Add a cmd line tool to StatsService to parse log files from Dropbox

Test: adb shell cmd stats all-logs
Change-Id: I7803c9c021a971619f60fbf6bdfabd33d2f476ef
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index 5ee07b4..030c760 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -17,6 +17,7 @@
 #define LOG_TAG "statsd"
 
 #include "StatsService.h"
+#include "DropboxReader.h"
 
 #include <binder/IPCThreadState.h>
 #include <binder/IServiceManager.h>
@@ -27,6 +28,7 @@
 
 #include <unistd.h>
 #include <stdio.h>
+#include <stdlib.h>
 
 using namespace android;
 
@@ -118,15 +120,13 @@
 status_t
 StatsService::command(FILE* in, FILE* out, FILE* err, Vector<String8>& args)
 {
-    fprintf(out, "StatsService::command:");
-    ALOGD("StatsService::command:");
-    const int N = args.size();
-    for (int i=0; i<N; i++) {
-        fprintf(out, " %s", String8(args[i]).string());
-        ALOGD("   %s", String8(args[i]).string());
+    if (args.size() > 0) {
+        if (!args[0].compare(String8("print-stats-log")) && args.size() > 1) {
+            return doPrintStatsLog(out, args);
+        }
     }
-    fprintf(out, "\n");
 
+    printCmdHelp(out);
     return NO_ERROR;
 }
 
@@ -144,3 +144,18 @@
     return Status::ok();
 }
 
+status_t
+StatsService::doPrintStatsLog(FILE* out, const Vector<String8>& args) {
+    long msec = 0;
+
+    if (args.size() > 2) {
+        msec = strtol(args[2].string(), NULL, 10);
+    }
+    return DropboxReader::readStatsLogs(out, args[1].string(), msec);
+}
+
+void
+StatsService::printCmdHelp(FILE* out) {
+    fprintf(out, "Usage:\n");
+    fprintf(out, "\t print-stats-log [tag_required] [timestamp_nsec_optional]\n");
+}