Home | History | Annotate | Download | only in loadtest
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.statsd.loadtest;
     17 
     18 import android.text.format.DateFormat;
     19 
     20 import com.android.os.StatsLog;
     21 
     22 import java.util.List;
     23 
     24 public class DisplayProtoUtils {
     25     private static final int MAX_NUM_METRICS_TO_DISPLAY = 10;
     26 
     27     public static void displayLogReport(StringBuilder sb, StatsLog.ConfigMetricsReportList reports) {
     28         sb.append("******************** Report ********************\n");
     29         if (reports.hasConfigKey()) {
     30             sb.append("ConfigKey: ");
     31             com.android.os.StatsLog.ConfigMetricsReportList.ConfigKey key = reports.getConfigKey();
     32             sb.append("\tuid: ").append(key.getUid()).append(" id: ").append(key.getId())
     33                     .append("\n");
     34         }
     35 
     36         int numMetrics = 0;
     37         for (StatsLog.ConfigMetricsReport report : reports.getReportsList()) {
     38             sb.append("StatsLogReport size: ").append(report.getMetricsCount()).append("\n");
     39             sb.append("Last report time:").append(getDateStr(report.getLastReportElapsedNanos())).
     40                     append("\n");
     41             sb.append("Current report time:").append(getDateStr(report.getCurrentReportElapsedNanos())).
     42                     append("\n");
     43             for (StatsLog.StatsLogReport log : report.getMetricsList()) {
     44                 numMetrics++;
     45                 if (numMetrics > MAX_NUM_METRICS_TO_DISPLAY) {
     46                     sb.append("... output truncated\n");
     47                     sb.append("************************************************");
     48                     return;
     49                 }
     50                 sb.append("\n");
     51                 sb.append("metric id: ").append(log.getMetricId()).append("\n");
     52 
     53                 switch (log.getDataCase()) {
     54                     case DURATION_METRICS:
     55                         sb.append("Duration metric data\n");
     56                         displayDurationMetricData(sb, log);
     57                         break;
     58                     case EVENT_METRICS:
     59                         sb.append("Event metric data\n");
     60                         displayEventMetricData(sb, log);
     61                         break;
     62                     case COUNT_METRICS:
     63                         sb.append("Count metric data\n");
     64                         displayCountMetricData(sb, log);
     65                         break;
     66                     case GAUGE_METRICS:
     67                         sb.append("Gauge metric data\n");
     68                         displayGaugeMetricData(sb, log);
     69                         break;
     70                     case VALUE_METRICS:
     71                         sb.append("Value metric data\n");
     72                         displayValueMetricData(sb, log);
     73                         break;
     74                     case DATA_NOT_SET:
     75                         sb.append("No metric data\n");
     76                         break;
     77                 }
     78             }
     79         }
     80         sb.append("************************************************");
     81     }
     82 
     83     public static String getDateStr(long nanoSec) {
     84         return DateFormat.format("dd/MM hh:mm:ss", nanoSec/1000000).toString();
     85     }
     86 
     87     private static void displayDimension(StringBuilder sb, StatsLog.DimensionsValue dimensionValue) {
     88         sb.append(dimensionValue.getField()).append(":");
     89         if (dimensionValue.hasValueBool()) {
     90             sb.append(dimensionValue.getValueBool());
     91         } else if (dimensionValue.hasValueFloat()) {
     92             sb.append(dimensionValue.getValueFloat());
     93         } else if (dimensionValue.hasValueInt()) {
     94             sb.append(dimensionValue.getValueInt());
     95         } else if (dimensionValue.hasValueStr()) {
     96             sb.append(dimensionValue.getValueStr());
     97         } else if (dimensionValue.hasValueTuple()) {
     98             sb.append("{");
     99             for (StatsLog.DimensionsValue child :
    100                     dimensionValue.getValueTuple().getDimensionsValueList()) {
    101                 displayDimension(sb, child);
    102             }
    103             sb.append("}");
    104         }
    105         sb.append(" ");
    106     }
    107 
    108     public static void displayDurationMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
    109         StatsLog.StatsLogReport.DurationMetricDataWrapper durationMetricDataWrapper
    110                 = log.getDurationMetrics();
    111         sb.append("Dimension size: ").append(durationMetricDataWrapper.getDataCount()).append("\n");
    112         for (StatsLog.DurationMetricData duration : durationMetricDataWrapper.getDataList()) {
    113             sb.append("dimension_in_what: ");
    114             displayDimension(sb, duration.getDimensionsInWhat());
    115             sb.append("\n");
    116             if (duration.hasDimensionsInCondition()) {
    117                 sb.append("dimension_in_condition: ");
    118                 displayDimension(sb, duration.getDimensionsInCondition());
    119                 sb.append("\n");
    120             }
    121 
    122             for (StatsLog.DurationBucketInfo info : duration.getBucketInfoList())  {
    123                 sb.append("\t[").append(getDateStr(info.getStartBucketElapsedNanos())).append("-")
    124                         .append(getDateStr(info.getEndBucketElapsedNanos())).append("] -> ")
    125                         .append(info.getDurationNanos()).append(" ns\n");
    126             }
    127         }
    128     }
    129 
    130     public static void displayEventMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
    131         sb.append("Contains ").append(log.getEventMetrics().getDataCount()).append(" events\n");
    132         StatsLog.StatsLogReport.EventMetricDataWrapper eventMetricDataWrapper =
    133                 log.getEventMetrics();
    134         for (StatsLog.EventMetricData event : eventMetricDataWrapper.getDataList()) {
    135             sb.append(getDateStr(event.getElapsedTimestampNanos())).append(": ");
    136             sb.append(event.getAtom().getPushedCase().toString()).append("\n");
    137         }
    138     }
    139 
    140     public static void displayCountMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
    141         StatsLog.StatsLogReport.CountMetricDataWrapper countMetricDataWrapper
    142                 = log.getCountMetrics();
    143         sb.append("Dimension size: ").append(countMetricDataWrapper.getDataCount()).append("\n");
    144         for (StatsLog.CountMetricData count : countMetricDataWrapper.getDataList()) {
    145             sb.append("dimension_in_what: ");
    146             displayDimension(sb, count.getDimensionsInWhat());
    147             sb.append("\n");
    148             if (count.hasDimensionsInCondition()) {
    149                 sb.append("dimension_in_condition: ");
    150                 displayDimension(sb, count.getDimensionsInCondition());
    151                 sb.append("\n");
    152             }
    153 
    154             for (StatsLog.CountBucketInfo info : count.getBucketInfoList())  {
    155                 sb.append("\t[").append(getDateStr(info.getStartBucketElapsedNanos())).append("-")
    156                         .append(getDateStr(info.getEndBucketElapsedNanos())).append("] -> ")
    157                         .append(info.getCount()).append("\n");
    158             }
    159         }
    160     }
    161 
    162     public static void displayGaugeMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
    163         sb.append("Display me!");
    164     }
    165 
    166     public static void displayValueMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
    167         sb.append("Display me!");
    168     }
    169 }
    170