個人ステータスページ

Home PDF Audio

インストールしたvnstatのバージョンが-uパラメータをサポートしていないようです。vnstatを設定し、帯域幅監視APIをセットアップする正しい手順に進みましょう。

ステップ1: vnstatの設定

ネットワークインターフェースに対して vnstat を初期化します:

sudo vnstat -i eth0

このコマンドは、vnstat を使用して eth0 インターフェースのネットワークトラフィック統計を表示します。sudo を使用して管理者権限で実行する必要があります。

ステップ2: データ収集を待つ

vnstatはデータを収集するために時間が必要です。定期的にステータスを確認してください:

sudo vnstat -l

このコマンドは、リアルタイムでネットワークトラフィックを監視するために使用されます。vnstat はネットワークインターフェースのトラフィックデータを収集し、-l オプションを指定することで、リアルタイムのトラフィック状況を表示します。sudo は管理者権限でコマンドを実行するために使用されます。

しばらく時間が経ったら、データ収集を確認します:

sudo vnstat -d

ステップ3: 帯域幅データを公開するAPIを作成する

Flaskをインストール:

pip install Flask

このコマンドは、Pythonのパッケージ管理ツールであるpipを使用して、FlaskというWebアプリケーションフレームワークをインストールするものです。Flaskは、軽量で柔軟なWebアプリケーションの開発を可能にするPythonのフレームワークです。

以下は、bandwidth_api.pyというPythonスクリプトの作成例です。このスクリプトは、Bandwidth APIを使用して何らかの操作を行うための基本的な構造を示しています。

import requests

class BandwidthAPI:
    def __init__(self, api_token, api_secret):
        self.api_token = api_token
        self.api_secret = api_secret
        self.base_url = "https://api.bandwidth.com"

    def _get_headers(self):
        return {
            "Authorization": f"Basic {self.api_token}:{self.api_secret}",
            "Content-Type": "application/json"
        }

    def make_request(self, method, endpoint, data=None):
        url = f"{self.base_url}/{endpoint}"
        headers = self._get_headers()
        response = requests.request(method, url, headers=headers, json=data)
        response.raise_for_status()
        return response.json()

    def get_account_info(self):
        return self.make_request("GET", "v1/accounts/me")

    def send_message(self, from_number, to_number, text):
        data = {
            "from": from_number,
            "to": to_number,
            "text": text
        }
        return self.make_request("POST", "v1/messages", data)

if __name__ == "__main__":
    # Replace with your actual API token and secret
    api_token = "your_api_token"
    api_secret = "your_api_secret"

    bandwidth_api = BandwidthAPI(api_token, api_secret)

    # Example: Get account info
    account_info = bandwidth_api.get_account_info()
    print("Account Info:", account_info)

    # Example: Send a message
    from_number = "+1234567890"
    to_number = "+0987654321"
    message_text = "Hello from Bandwidth API!"
    send_message_response = bandwidth_api.send_message(from_number, to_number, message_text)
    print("Message Sent:", send_message_response)

説明:

使用方法:

  1. your_api_tokenyour_api_secret を実際のBandwidth APIのトークンとシークレットに置き換えます。
  2. スクリプトを実行して、Bandwidth APIとのやり取りを確認します。

このスクリプトは、Bandwidth APIを使用して基本的な操作を行うための出発点として利用できます。必要に応じて、さらに機能を追加したり、エラーハンドリングを強化したりすることができます。

from flask import Flask, jsonify
from flask_cors import CORS
import subprocess
app = Flask(__name__)
CORS(app)  # すべてのルートに対してCORSを有効にする
@app.route('/bandwidth', methods=['GET'])
def get_bandwidth():
    # eth0の5分間隔のトラフィック統計を取得するためにvnstatコマンドを実行
    result = subprocess.run(['vnstat', '-i', 'eth0', '-5', '--json'], capture_output=True, text=True)
    data = result.stdout
# キャプチャしたデータをJSONレスポンスとして返す
return jsonify(data)
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

このコードは、Pythonのスクリプトが直接実行された場合に、Flaskアプリケーションを起動するためのものです。host='0.0.0.0'と指定することで、外部からのアクセスを許可し、port=5000でアプリケーションがリッスンするポートを指定しています。

あなたはプロの翻訳者です。Jekyllブログ投稿のためのマークダウンファイルを翻訳しています。以下のテキストを日本語に翻訳してください。英語の名前は翻訳しないでください。コードブロックに注意し、わからない場合は変更しないでください。

スクリプトを実行します:

python bandwidth_api.py

ステップ 4: ブログと統合する

以下のHTMLとJavaScriptを使用して、帯域幅データを取得し表示します:

document.addEventListener('DOMContentLoaded', function () {
    fetch('https://www.lzwjava.xyz/bandwidth')
        .then(response => response.json())
        .then(data => {
            var bandwidthData = JSON.parse(data);
// 時間を表示するためのコンテナを作成
var timesContainer = document.createElement('div');
            var currentUtcTime = new Date();
            var currentLocalTime = new Date(currentUtcTime.getTime());
            var pUtcTime = document.createElement('p');
            pUtcTime.textContent = `UTC時間: ${currentUtcTime.toUTCString()}`;
            timesContainer.appendChild(pUtcTime);
var pLocalTime = document.createElement('p');
pLocalTime.textContent = `私の現地時間: ${currentLocalTime.toString()}`;
timesContainer.appendChild(pLocalTime);
            // タイムズコンテナをステータスdivに追加する
            document.getElementById('status').appendChild(timesContainer);
// テーブルを作成
var table = document.createElement('table');
table.border = '1';
table.style.borderCollapse = 'collapse';
table.style.width = '100%';
            // テーブルのヘッダーを作成
            var thead = document.createElement('thead');
            var tr = document.createElement('tr');
            var headers = ['時間', 'トラフィック (KB/s)', 'ステータス'];
            headers.forEach(headerText => {
                var th = document.createElement('th');
                th.textContent = headerText;
                tr.appendChild(th);
            });
            thead.appendChild(tr);
            table.appendChild(thead);
        // テーブル本体を作成
        var tbody = document.createElement('tbody');
// トラフィックデータを処理する
var fiveMinuteData = bandwidthData.interfaces[0].traffic.fiveminute.reverse();
fiveMinuteData.forEach(interval => {
    var tr = document.createElement('tr');
var dataTime = new Date(Date.UTC(interval.date.year, interval.date.month - 1, interval.date.day, interval.time.hour, interval.time.minute));
var timeDifference = Math.round((currentUtcTime - dataTime) / (1000 * 60)); // 時間差を分単位で計算
var tdTimeDifference = document.createElement('td');
tdTimeDifference.textContent = timeDifference + ' 分前';
tr.appendChild(tdTimeDifference);
var averageTraffic = (interval.rx + interval.tx) / 2; // RXとTXの平均を計算
var tdTrafficKBs = document.createElement('td');
var trafficKBs = (averageTraffic / (5 * 60 * 1024)).toFixed(2); // KB/sに変換
tdTrafficKBs.textContent = trafficKBs;
tr.appendChild(tdTrafficKBs);
var tdStatus = document.createElement('td');
tdStatus.textContent = trafficKBs > 5 ? 'Online' : 'Offline';
tdStatus.className = trafficKBs > 5 ? 'status-online' : 'status-offline';
tr.appendChild(tdStatus);
tbody.appendChild(tr);
});
table.appendChild(tbody);
// テーブルをステータス div に追加
document.getElementById('status').appendChild(table);
})
.catch(error => {
    console.error('帯域幅データの取得中にエラーが発生しました:', error);
});

http://your-droplet-ip:5000/bandwidth をあなたのドロップレットのIPアドレスに置き換えてください。

追加の考慮事項

これらの手順に従うことで、DigitalOceanドロップレットの帯域幅使用量に基づいて、あなたがオンラインかどうかを示すステータスページをブログに作成できます。


Back 2025.01.18 Donate