System X-Rayの指標をカスタマイズする​


System X-Rayの指標をカスタマイズする​

System X-Rayの指標画面は、表示したい情報を送信することでカスタマイズできます。この機能を使用すると、静的な情報のほか、指標が各種しきい値を超えたとき、イベントが発生したときに、有益な情報を表示できます。

カスタム指標を作成する

定義した指標を含むインテントがアプリによってブロードキャストされ、System X-Rayで受信されると、アプリセクションが表示されます。以下のコードは、System X-Rayのインテントを作成する方法を示しています。

private void updateMetrics(Context context) {

// インテントを初期化
Intent intent = new Intent("com.amazon.ssm.METRICS_UPDATE");
intent.putExtra("com.amazon.ssm.PACKAGENAME", context.getPackageName());

// 指標を追加
intent.putExtra("Metrics1", "First metric");
intent.putExtra("Color1", "green");

intent.putExtra("Metrics2", "Second metric");
intent.putExtra("Color2", "yellow");

intent.putExtra("Metrics3", "Third metric");
intent.putExtra("Color3", "red");

// 送信
context.sendBroadcast(intent);
}

このサンプルでは、Contextクラスを使用して、環境に必要なリソースとクラスを取得します。

アクションcom.amazon.ssm.METRICS_UPDATEでインテントを初期化して、エクストラとしてアプリのパッケージ名を追加します。アプリがフォアグラウンドにある場合、System X-Rayはアプリセクションのみを表示するため、パッケージ名は必須です。このコードをアクティビティに配置すると、getPackageName()ヘルパーメソッドを呼び出すことができます。

指標の名前は、Metrics1Metrics2Metrics3のいずれかにする必要があります。これ以外の名前は無視されます。指標の値には任意の文字列を設定できますが、切り捨てられる場合があることに注意してください。System X-Rayは、各指標を [name]:[value] 形式で表示します。

指標のデフォルトの色は灰色です。色を変更するには、インテントにエクストラを追加する必要があります。エクストラの名前は、Color1Color2Color3のいずれかにする必要があります。値は、redyellowgreen, or blueのいずれかを指定できます。色を適用するために指標名と色名に同じ数字を入れる必要があります。たとえば、Metrics1にはColor1が適用されます。色の値は互いに独立しているため、同じ色の指標を複数使用できます。

インテントを設定できたら、sendBroadcast(Intent)メソッドを呼び出すことができます。System X-Rayが有効になっていれば、Appというセクションが追加され、インテントで定義した指標が表示されます。指標の値や色を変更する場合は、値または色を変更したインテントを再度作成して送信する必要があります。

System X-Rayで複数の指標を追跡している場合は、一部の指標しか変更しなかった場合でも、System X-Rayでは指標の状態がキャッシュされないため、すべての指標の状態を再度送信する必要があります。一部しか送信しない場合、送信しなかった指標はSystem X-Rayから削除されます。

カスタム指標の例

この機能の使用例をいくつか紹介します。

静的な情報

アプリを複数のAmazon Fire TVデバイスでテストする場合や複数のWi-Fiネットワークを使用する場合、テストしているFire TVモデルを確認できたり、Fire TVが使用しているWi-FiネットワークのSSIDを参照できたりすると便利です。アプリの起動時にこの情報を取得して、System X-Rayに送信できます。以下のコードは、静的な情報を表示する方法の例を示しています。

private void updateMetrics(Context context, String buildModel, String ssid) {
    // インテントを初期化
    Intent intent = new Intent("com.amazon.ssm.METRICS_UPDATE");
    intent.putExtra("com.amazon.ssm.PACKAGENAME", context.getPackageName());

    // 指標を追加
    intent.putExtra("Metrics1", buildModel);
    intent.putExtra("Metrics2", ssid);

    // 送信
    context.sendBroadcast(intent);
}

上記のように入力すると、次のような画像が表示されます。この画像では、Amazon Fire TVデバイスのモデルがAFTS(ボックスタイプのFire TV第2世代)であることが示されています。また、Fire TVがGuestというネットワークに接続されていることも示されています。

しきい値

しきい値を超える可能性がある指標を追跡することができます。たとえば、アプリにビデオコンテンツがあり、ビデオ再生中のドロップフレーム数を追跡したいとします。その場合、たとえば5フレーム未満の場合は緑色、5~9フレームの場合は黄色、10フレーム以上の場合は赤色で表示するよう設定できます。

ドロップフレーム数が更新されると、それに応じて色がしきい値に対応する色に変わります。次のコードサンプルは、しきい値の表示方法を示しています。

private void updateMetrics(Context context, int numFrameDrops, String frameDropStatus) {
    // インテントを初期化
    Intent intent = new Intent("com.amazon.ssm.METRICS_UPDATE");
    intent.putExtra("com.amazon.ssm.PACKAGENAME", context.getPackageName());

    // 指標を追加
    intent.putExtra("Metrics1", "FrameDrops:"+numFrameDrops);
    intent.putExtra("Color1", frameDropStatus);

    // 送信
    context.sendBroadcast(intent);
}

以下のスクリーンショットは、しきい値による表示の違いを示しています。

イベント

イベントログは有効な機能ですが、開発者はイベントの発生時刻を視覚的に追跡できる方法を必要とすることもあります。たとえば、テストで3時間ビデオを再生した結果、例外が断続的にスローされることが判明する場合があります。以下にイベントの構成方法の例を示します。

private void updateMetrics(Context context, String message, String time) {
    // インテントを初期化
    Intent intent = new Intent("com.amazon.ssm.METRICS_UPDATE");
    intent.putExtra("com.amazon.ssm.PACKAGENAME", context.getPackageName());

    // 指標を追加
    intent.putExtra("Metrics1", message);
    intent.putExtra("Color1", "Red");

    intent.putExtra("Metrics2", "Time:"+time);
    intent.putExtra("Color2", "Red");

    // 送信
    context.sendBroadcast(intent);
}

これは、例外と発生時刻を表示したSystem X-Rayのスクリーンショットです。

関連リソース

詳細については、以下を参照してください。