Translate Android log entries to stats_log proto
Test: tested on local device

Change-Id: If9a779a96d31cefaffb1e4424629c14b08e1fc57
diff --git a/cmds/statsd/src/DropboxReader.cpp b/cmds/statsd/src/DropboxReader.cpp
index 187f4ad..cda2f43 100644
--- a/cmds/statsd/src/DropboxReader.cpp
+++ b/cmds/statsd/src/DropboxReader.cpp
@@ -15,9 +15,7 @@
  */
 #include <android/os/DropBoxManager.h>
 #include <android-base/file.h>
-#include <cutils/log.h>
 #include <androidfw/ZipUtils.h>
-#include <stdio.h>
 
 #include "DropboxReader.h"
 
@@ -25,14 +23,14 @@
 using android::String16;
 using android::binder::Status;
 using android::base::unique_fd;
+using android::os::statsd::EventMetricData;
 using android::os::DropBoxManager;
-using android::os::statsd::StatsLogEntry;
 using android::ZipUtils;
 using std::vector;
 
 status_t DropboxReader::readStatsLogs(FILE* out, const string& tag, long msec) {
     sp<DropBoxManager> dropbox = new DropBoxManager();
-    StatsLogList logList;
+    StatsLogReport logReport;
 
     long timestamp = msec;
     // instead of while(true), put a hard limit 1000. Dropbox won't have more than 1000 files.
@@ -51,23 +49,23 @@
         timestamp = entry.getTimestamp();
 
         if (entry.getFlags() & DropBoxManager::IS_GZIPPED) {
-            if (!parseFromGzipFile(fd, logList)) {
+            if (!parseFromGzipFile(fd, logReport)) {
                 // Failed to parse from the file. Continue to fetch the next entry.
                 continue;
             }
         } else {
-            if (!parseFromFile(fd, logList)) {
+            if (!parseFromFile(fd, logReport)) {
                 // Failed to parse from the file. Continue to fetch the next entry.
                 continue;
             }
         }
 
-        printLog(out, logList);
+        printLog(out, logReport);
     }
     return android::OK;
 }
 
-bool DropboxReader::parseFromGzipFile(const unique_fd& fd, StatsLogList& list) {
+bool DropboxReader::parseFromGzipFile(const unique_fd& fd, StatsLogReport& logReport) {
     FILE *file = fdopen(fd, "r");
     bool result = false;
     bool scanResult;
@@ -80,7 +78,7 @@
     if (scanResult && method == kCompressDeflated) {
         vector<uint8_t> buf(uncompressedLen);
         if (ZipUtils::inflateToBuffer(file, &buf[0], uncompressedLen, compressedLen)) {
-            if (list.ParseFromArray(&buf[0], uncompressedLen)) {
+            if (logReport.ParseFromArray(&buf[0], uncompressedLen)) {
                 result = true;
             }
         }
@@ -92,29 +90,30 @@
 }
 
 // parse a non zipped file.
-bool DropboxReader::parseFromFile(const unique_fd& fd, StatsLogList& list) {
+bool DropboxReader::parseFromFile(const unique_fd& fd, StatsLogReport& logReport) {
     string content;
     if (!android::base::ReadFdToString(fd, &content)) {
         ALOGE("Failed to read file");
         return false;
     }
-    if (!list.ParseFromString(content)) {
+    if (!logReport.ParseFromString(content)) {
         ALOGE("failed to parse log entry from data");
         return false;
     }
     return true;
 }
 
-void DropboxReader::printLog(FILE* out, const StatsLogList& list) {
-    for (int i = 0; i < list.stats_log_entry_size(); i++) {
-        const StatsLogEntry entry = list.stats_log_entry(i);
-        // TODO: print pretty
-        fprintf(out, "time_msec=%lld, type=%d, aggregate_type=%d, uid=%d, pid=%d ",
-                entry.start_report_millis(), entry.type(), entry.aggregate_type(),
-                entry.uid(), entry.pid());
-        for (int j = 0; j < entry.pairs_size(); j++) {
-            fprintf(out, "msg=%s ", entry.pairs(j).value_str().c_str());
+void DropboxReader::printLog(FILE* out, const StatsLogReport& logReport) {
+    fprintf(out, "start_time_msec=%lld, end_time_msec=%lld, ",
+            logReport.start_report_millis(), logReport.end_report_millis());
+    for (int i = 0; i < logReport.event_metrics().data_size(); i++) {
+        EventMetricData eventMetricData = logReport.event_metrics().data(i);
+        for (int j = 0; j < eventMetricData.key_value_pair_size(); j++) {
+            fprintf(out, "key=%d, ", eventMetricData.key_value_pair(j).key());
+            fprintf(out, "value_str=%s ", eventMetricData.key_value_pair(j).value_str().c_str());
+            fprintf(out, "value_int=%lld ", eventMetricData.key_value_pair(j).value_int());
+            fprintf(out, "value_float=%f ", eventMetricData.key_value_pair(j).value_float());
         }
-        fprintf(out, "\n");
     }
+    fprintf(out, "\n");
 }