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");
}