Add StatsdStats and guardrail.
+ StatsdStats is the global class that tracks the stats about statsd.
+ Added guardrail for classes that have a map which could potentially grow
unboundedly with the number of logs.
TODO: add unit tests & CTS for StatsdStats, and guardrail
add stats for pulled atoms.
Test: statsd_test
Change-Id: I0ea562de4dd3f6162f7923a9c193420b482c1d51
diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp
index ec2650e..8b64f0d 100644
--- a/cmds/statsd/src/StatsService.cpp
+++ b/cmds/statsd/src/StatsService.cpp
@@ -22,6 +22,7 @@
#include "config/ConfigKey.h"
#include "config/ConfigManager.h"
#include "guardrail/MemoryLeakTrackUtil.h"
+#include "guardrail/StatsdStats.h"
#include "storage/DropboxReader.h"
#include "storage/StorageManager.h"
@@ -222,7 +223,7 @@
}
if (!args[0].compare(String8("print-stats"))) {
- return cmd_print_stats(out);
+ return cmd_print_stats(out, args);
}
if (!args[0].compare(String8("clear-config"))) {
@@ -305,8 +306,9 @@
fprintf(out, " NAME The name of the configuration\n");
fprintf(out, "\n");
fprintf(out, "\n");
- fprintf(out, "usage: adb shell cmd stats print-stats\n");
+ fprintf(out, "usage: adb shell cmd stats print-stats [reset]\n");
fprintf(out, " Prints some basic stats.\n");
+ fprintf(out, " reset: 1 to reset the statsd stats. default=0.\n");
}
status_t StatsService::cmd_trigger_broadcast(FILE* out, Vector<String8>& args) {
@@ -474,12 +476,20 @@
}
}
-status_t StatsService::cmd_print_stats(FILE* out) {
+status_t StatsService::cmd_print_stats(FILE* out, const Vector<String8>& args) {
vector<ConfigKey> configs = mConfigManager->GetAllConfigKeys();
for (const ConfigKey& key : configs) {
fprintf(out, "Config %s uses %zu bytes\n", key.ToString().c_str(),
mProcessor->GetMetricsSize(key));
}
+ fprintf(out, "Detailed statsd stats in logcat...");
+ StatsdStats& statsdStats = StatsdStats::getInstance();
+ bool reset = false;
+ if (args.size() > 1) {
+ reset = strtol(args[1].string(), NULL, 10);
+ }
+ vector<int8_t> output;
+ statsdStats.dumpStats(&output, reset);
return NO_ERROR;
}