セットアップと初期化
Speedtest対応のテストエージェント
Speedtest測定に使用するテストエージェントは、Speedtestを実行しているWebクライアントからアクセスできる必要があります。ほとんどの場合、これはインターネット経由でアクセスできる必要があることを意味します。
REST APIのALLOWED_ORIGINS設定
Speedtestを機能させるには、SpeedtestWebページがREST APIにアクセスできる必要があります。これは、SpeedtestWebページがホストされているホスト名を ALLOWED_ORIGINS 設定に追加する必要があることを意味します。これを行わないと、Web ブラウザーは REST API へのアクセスを拒否します。
コントロール・センター・インスタンスで、ファイル・ /etc/netrounds/restol.conf を開き、次の設定を追加します:
ALLOWED_ORIGINS=https://<hostname>
ここで <hostname> は、Speedtest Webページがホストされている完全修飾ドメイン名(FQDN)です。
ALLOWED_ORIGINS設定のしくみについては、こちらの記事をご覧ください: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
クロスオリジンリソース共有(CORS)に関する全体像を理解するには、この記事が役に立ちます https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
HTTPS から HTTP への Web サーバーのリダイレクト
Paragon Active Assurance の Speedtest 機能は、パフォーマンスを最大化するために暗号化されていない HTTP プロトコルを使用するため、ページを読み込むすべての Web クライアントが URL で http:// を使用することが重要です。
ただし、このページにリンクする場合、またはアドレスバーでユーザーがプロトコル http:// を省略した場合、Webブラウザはデフォルトで https://になり、Speedtestページで問題が発生します。
このため、Paragon Active Assurance に組み込まれている Speedtest 機能には、 https:// 要求を Speedtest ページの http:// にリダイレクトする Apache 構成の書き換えルールがあります。
このような書き換えルールは、カスタムSpeedtestWebページにも追加することをお勧めします。次のサブセクションを参照してください。
コントロールセンターでカスタムSpeedtestWebページをホストする
コントロールセンターと同じWebサーバーでカスタムSpeedtestWebページをホストしている場合は、ファイルを /etc/apache2/sites-available/netrounds-ssl.conf編集できます。
以下は、組み込みのSpeedtestページの書き換えルールです。
## Rewrite rules
RewriteEngine On
RewriteRule ^/[^/]+/speedtest(?:-flash|-websocket)?/?$ http://%{HTTP_HOST}%{REQUEST_URI} [R]
したがって、サンプルのWebページに同様のルールを追加するには、次のように記述します。
RewriteRule ^/static/speedtest_demo/example.html$ http://%{HTTP_HOST}%{REQUEST_URI} [R]
Control Center を新しいバージョンにアップグレードすると、このファイルは上書きされるため、アップグレード後にこのルールを再度追加する必要があります。
別の Web サーバーでのカスタム Speedtest Web ページのホスティング
コントロールセンターがホストされているサーバーとは異なるWebサーバーでカスタムSpeedtestWebページをホストしている場合は、同様の書き換えルールを追加する方法については、Webサーバーのドキュメントを参照してください。
Speedtestライブラリを含める
SpeedtestライブラリをHTMLファイルに含めて初期化する必要があります。 example.html では、これは次のように行われます。
<script src='static/js/Speedtest.js'></script>
<script src='static/js/SpeedtestLib.js'></script>
<script src='static/js/script.js'></script>
<script type='text/javascript'>
var account = 'dev';
var apiUrl = 'https://<rest_hostname>/rest';
var workerScriptPath = 'static/js/SpeedtestWorker.js';
initSpeedtest(apiUrl, workerScriptPath, account);
</script>
説明:
var account = 'dev'− Paragon Active Assuranceのアカウントの短縮名。var apiUrl = 'https://<rest_hostname>/rest'−これをParagon Active Assurance REST APIのURL に置き換えます 。var workerScriptPath = 'static/js/SpeedtestWorker.js'− ワーカースクリプトにアクセスできるパス。
Speedtestの初期化
ファイル static/js/script.jsで、 initSpeedtest は Speedtest 応答を処理するコールバック関数を設定します。
function initSpeedtest(apiUrl, workerScriptPath, account) {
speedtest = new SpeedtestLib(apiUrl, workerScriptPath, account);
speedtest.setSnapshotResponse(resultSpeed);
speedtest.setResultResponse(resultDelay);
speedtest.setFailureResponse(failureHandler);
speedtest.setSuccessResponse(successHandler);
speedtest.getServers(setServerDropdown);
speedtest.getCategories(setCategoryDropdown);
各 speedtest. 関数の引数は、SpeedtestLib によって送信されたデータを処理するコールバック関数である必要があります。
speedtest.setSnapshotResponse(resultSpeed)−テストのアップロード/ダウンロード部分の部分的な結果。テスト実行中に送信されるspeedtest.setResultResponse(resultDelay)−テストのTCP / ICMPPING部分の部分的な結果。テスト実行中に送信されるspeedtest.setFailureResponse(failureHandler)− コントロールセンターへのレポートの送信に失敗しましたspeedtest.setSuccessResponse(successHandler)− コントロールセンターへのレポート送信に成功しましたspeedtest.getServers(setServerDropdown)−利用可能なサーバーのリストが取得されましたspeedtest.getCategories(setCategoryDropdown)−利用可能なSpeedtestカテゴリのリストが取得されました
たとえば、 setServerDropdown コールバック関数は、使用可能なサーバーをユーザー インターフェイスに入力します。
function setServerDropdown(serverList) {
serverList['items'].forEach(function(server) {
var option = document.createElement('option');
option.text = server['name'];
var serverString = server['test_agent_id'] + ':' + server['interface'] + ' ' +
server['ip'] + ' ' + server['port'] + ' ' + server['test_length'] + ' ' +
server['tcp_sessions'];
option.value = serverString;
document.getElementById('dropdown-server').add(option);
});
}
ここでは、 serverList は SpeedtestLib によって提供されます。
その他のコールバック関数については、 static/js/script.jsを参照してください。