Home | History | Annotate | Download | only in dogfood
      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.dogfood;
     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     public static void displayLogReport(StringBuilder sb, StatsLog.ConfigMetricsReportList reports) {
     26         sb.append("ConfigKey: ");
     27         if (reports.hasConfigKey()) {
     28             com.android.os.StatsLog.ConfigMetricsReportList.ConfigKey key = reports.getConfigKey();
     29             sb.append("\tuid: ").append(key.getUid()).append(" name: ").append(key.getId())
     30                     .append("\n");
     31         }
     32 
     33         for (StatsLog.ConfigMetricsReport report : reports.getReportsList()) {
     34             sb.append("StatsLogReport size: ").append(report.getMetricsCount()).append("\n");
     35             sb.append("Last report time:").append(getDateStr(report.getLastReportElapsedNanos())).
     36                     append("\n");
     37             sb.append("Current report time:").append(getDateStr(report.getCurrentReportElapsedNanos())).
     38                     append("\n");
     39             for (StatsLog.StatsLogReport log : report.getMetricsList()) {
     40                 sb.append("\n\n");
     41                 sb.append("metric id: ").append(log.getMetricId()).append("\n");
     42 
     43                 switch (log.getDataCase()) {
     44                     case DURATION_METRICS:
     45                         sb.append("Duration metric data\n");
     46                         displayDurationMetricData(sb, log);
     47                         break;
     48                     case EVENT_METRICS:
     49                         sb.append("Event metric data\n");
     50                         displayEventMetricData(sb, log);
     51                         break;
     52                     case COUNT_METRICS:
     53                         sb.append("Count metric data\n");
     54                         displayCountMetricData(sb, log);
     55                         break;
     56                     case GAUGE_METRICS:
     57                         sb.append("Gauge metric data\n");
     58                         displayGaugeMetricData(sb, log);
     59                         break;
     60                     case VALUE_METRICS:
     61                         sb.append("Value metric data\n");
     62                         displayValueMetricData(sb, log);
     63                         break;
     64                     case DATA_NOT_SET:
     65                         sb.append("No metric data\n");
     66                         break;
     67                 }
     68             }
     69         }
     70     }
     71 
     72     public static String getDateStr(long nanoSec) {
     73         return DateFormat.format("dd/MM hh:mm:ss", nanoSec/1000000).toString();
     74     }
     75 
     76     private static void displayDimension(StringBuilder sb, StatsLog.DimensionsValue dimensionValue) {
     77         sb.append(dimensionValue.getField()).append(":");
     78         if (dimensionValue.hasValueBool()) {
     79             sb.append(dimensionValue.getValueBool());
     80         } else if (dimensionValue.hasValueFloat()) {
     81             sb.append(dimensionValue.getValueFloat());
     82         } else if (dimensionValue.hasValueInt()) {
     83             sb.append(dimensionValue.getValueInt());
     84         } else if (dimensionValue.hasValueStr()) {
     85             sb.append(dimensionValue.getValueStr());
     86         } else if (dimensionValue.hasValueTuple()) {
     87             sb.append("{");
     88             for (StatsLog.DimensionsValue child :
     89                     dimensionValue.getValueTuple().getDimensionsValueList()) {
     90                 displayDimension(sb, child);
     91             }
     92             sb.append("}");
     93         }
     94         sb.append(" ");
     95     }
     96 
     97     public static void displayDurationMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
     98         StatsLog.StatsLogReport.DurationMetricDataWrapper durationMetricDataWrapper
     99                 = log.getDurationMetrics();
    100         sb.append("Dimension size: ").append(durationMetricDataWrapper.getDataCount()).append("\n");
    101         for (StatsLog.DurationMetricData duration : durationMetricDataWrapper.getDataList()) {
    102             sb.append("dimension_in_what: ");
    103             displayDimension(sb, duration.getDimensionsInWhat());
    104             sb.append("\n");
    105             if (duration.hasDimensionsInCondition()) {
    106                 sb.append("dimension_in_condition: ");
    107                 displayDimension(sb, duration.getDimensionsInCondition());
    108                 sb.append("\n");
    109             }
    110 
    111             for (StatsLog.DurationBucketInfo info : duration.getBucketInfoList())  {
    112                 sb.append("\t[").append(getDateStr(info.getStartBucketElapsedNanos())).append("-")
    113                         .append(getDateStr(info.getEndBucketElapsedNanos())).append("] -> ")
    114                         .append(info.getDurationNanos()).append(" ns\n");
    115             }
    116         }
    117     }
    118 
    119     public static void displayEventMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
    120         sb.append("Contains ").append(log.getEventMetrics().getDataCount()).append(" events\n");
    121         StatsLog.StatsLogReport.EventMetricDataWrapper eventMetricDataWrapper =
    122                 log.getEventMetrics();
    123         for (StatsLog.EventMetricData event : eventMetricDataWrapper.getDataList()) {
    124             sb.append(getDateStr(event.getElapsedTimestampNanos())).append(": ");
    125             sb.append(event.getAtom().getPushedCase().toString()).append("\n");
    126         }
    127     }
    128 
    129     public static void displayCountMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
    130         StatsLog.StatsLogReport.CountMetricDataWrapper countMetricDataWrapper
    131                 = log.getCountMetrics();
    132         sb.append("Dimension size: ").append(countMetricDataWrapper.getDataCount()).append("\n");
    133         for (StatsLog.CountMetricData count : countMetricDataWrapper.getDataList()) {
    134             sb.append("dimension_in_what: ");
    135             displayDimension(sb, count.getDimensionsInWhat());
    136             sb.append("\n");
    137             if (count.hasDimensionsInCondition()) {
    138                 sb.append("dimension_in_condition: ");
    139                 displayDimension(sb, count.getDimensionsInCondition());
    140                 sb.append("\n");
    141             }
    142 
    143             for (StatsLog.CountBucketInfo info : count.getBucketInfoList())  {
    144                 sb.append("\t[").append(getDateStr(info.getStartBucketElapsedNanos())).append("-")
    145                         .append(getDateStr(info.getEndBucketElapsedNanos())).append("] -> ")
    146                         .append(info.getCount()).append("\n");
    147             }
    148         }
    149     }
    150 
    151     public static void displayGaugeMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
    152         sb.append("Display me!");
    153     }
    154 
    155     public static void displayValueMetricData(StringBuilder sb, StatsLog.StatsLogReport log) {
    156         sb.append("Display me!");
    157     }
    158 }
    159