Add metric computation skeleton to statsd.
This cl is to let statsd understand statsd_config, and compute metrics
defined in the config.
+ StatsLogProcessor is given a StatsdConfig (hard coded right now).
We construct a MetricProducer for each of the metric, and the metrics
share Condition and LogEntryMatchers
+ Added the CountMetricProducer type for CountMetric.
We can now count times of SCREEN_ON events given a config.
TODO: 1) conditions are not implemented.
2) slicings are not implemented in CountMetric
3) move the interaction to dropbox to a separate thread
4) decide how the in memory metrics would be used by anomaly detection
Test: manual test.
$ adb shell /system/bin/statsd
$ cat config_file.dat | adb shell cmd stats config
Change-Id: I38f4059c0dc5a827c338131d4a6fa7d4cbe865db
diff --git a/cmds/statsd/tests/LogEntryMatcher_test.cpp b/cmds/statsd/tests/LogEntryMatcher_test.cpp
index 81d93b6..473704a 100644
--- a/cmds/statsd/tests/LogEntryMatcher_test.cpp
+++ b/cmds/statsd/tests/LogEntryMatcher_test.cpp
@@ -14,13 +14,13 @@
#define LOG_TAG "statsd_test"
-#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
+#include <gtest/gtest.h>
+#include <log/log_event_list.h>
+#include <log/log_read.h>
+#include <log/logprint.h>
#include "../src/matchers/LogEntryMatcherManager.h"
#include "../src/parse_util.h"
-#include <log/logprint.h>
-#include <log/log_read.h>
-#include <log/log_event_list.h>
-#include <gtest/gtest.h>
+#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
#include <stdio.h>
@@ -38,12 +38,10 @@
auto simpleMatcher = matcher.mutable_simple_log_entry_matcher();
simpleMatcher->add_tag(kTagIdWakelock);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
}
TEST(LogEntryMatcherTest, TestBoolMatcher) {
@@ -54,24 +52,18 @@
auto keyValue = simpleMatcher->add_key_value_matcher();
keyValue->mutable_key_matcher()->set_key(kKeyIdState);
-
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
keyValue->set_eq_bool(true);
- boolMap[kKeyIdState] = true;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
+ wrapper.boolMap[kKeyIdState] = true;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
keyValue->set_eq_bool(false);
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
- boolMap[kKeyIdState] = false;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
+ wrapper.boolMap[kTagIdWakelock] = false;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
}
TEST(LogEntryMatcherTest, TestStringMatcher) {
@@ -83,14 +75,12 @@
keyValue->mutable_key_matcher()->set_key(kKeyIdState);
keyValue->set_eq_string("wakelock_name");
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
- strMap[kKeyIdState] = "wakelock_name";
+ wrapper.strMap[kKeyIdState] = "wakelock_name";
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
}
TEST(LogEntryMatcherTest, TestIntComparisonMatcher) {
@@ -101,32 +91,24 @@
auto keyValue = simpleMatcher->add_key_value_matcher();
keyValue->mutable_key_matcher()->set_key(kKeyIdState);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
keyValue->set_lt_int(10);
- intMap[kKeyIdState] = 11;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- intMap[kKeyIdState] = 10;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- intMap[kKeyIdState] = 9;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
+ wrapper.intMap[kKeyIdState] = 11;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 10;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 9;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
keyValue->set_gt_int(10);
- intMap[kKeyIdState] = 11;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- intMap[kKeyIdState] = 10;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- intMap[kKeyIdState] = 9;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
+ wrapper.intMap[kKeyIdState] = 11;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 10;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 9;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
}
TEST(LogEntryMatcherTest, TestIntWithEqualityComparisonMatcher) {
@@ -137,32 +119,24 @@
auto keyValue = simpleMatcher->add_key_value_matcher();
keyValue->mutable_key_matcher()->set_key(kKeyIdState);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
keyValue->set_lte_int(10);
- intMap[kKeyIdState] = 11;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- intMap[kKeyIdState] = 10;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- intMap[kKeyIdState] = 9;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
+ wrapper.intMap[kKeyIdState] = 11;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 10;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 9;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
keyValue->set_gte_int(10);
- intMap[kKeyIdState] = 11;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- intMap[kKeyIdState] = 10;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- intMap[kKeyIdState] = 9;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
+ wrapper.intMap[kKeyIdState] = 11;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 10;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 9;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
}
TEST(LogEntryMatcherTest, TestFloatComparisonMatcher) {
@@ -173,26 +147,20 @@
auto keyValue = simpleMatcher->add_key_value_matcher();
keyValue->mutable_key_matcher()->set_key(kKeyIdState);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
keyValue->set_lt_float(10.0);
- floatMap[kKeyIdState] = 10.1;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- floatMap[kKeyIdState] = 9.9;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
+ wrapper.floatMap[kKeyIdState] = 10.1;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.floatMap[kKeyIdState] = 9.9;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
keyValue->set_gt_float(10.0);
- floatMap[kKeyIdState] = 10.1;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
- floatMap[kKeyIdState] = 9.9;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
- floatMap, boolMap));
+ wrapper.floatMap[kKeyIdState] = 10.1;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.floatMap[kKeyIdState] = 9.9;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
}
// Helper for the composite matchers.
@@ -209,23 +177,23 @@
auto combination = matcher.mutable_combination();
combination->set_operation(LogicalOperation::AND);
- addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(), kTagIdWakelock, kKeyIdState, 3);
- addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(), kTagIdWakelock, kKeyIdPackageVersion, 4);
+ addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
+ kTagIdWakelock, kKeyIdState, 3);
+ addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
+ kTagIdWakelock, kKeyIdPackageVersion, 4);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
- intMap[kKeyIdPackageVersion] = 4;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
- intMap.clear();
- intMap[kKeyIdState] = 3;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
- intMap.clear();
- intMap[kKeyIdState] = 3;
- intMap[kKeyIdPackageVersion] = 4;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
+ wrapper.intMap[1003] = 4;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap.clear();
+ wrapper.intMap[1] = 3;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap.clear();
+ wrapper.intMap[1] = 3;
+ wrapper.intMap[1003] = 4;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
}
TEST(LogEntryMatcherTest, TestOrMatcher) {
@@ -239,26 +207,20 @@
addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
kTagIdWakelock, kKeyIdPackageVersion, 4);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
// Don't set any key-value pairs.
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
- intMap[kKeyIdPackageVersion] = 4;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
- intMap.clear();
- intMap[kKeyIdState] = 3;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
- intMap.clear();
- intMap[kKeyIdState] = 3;
- intMap[kKeyIdPackageVersion] = 4;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[1003] = 4;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap.clear();
+ wrapper.intMap[1] = 3;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap.clear();
+ wrapper.intMap[1] = 3;
+ wrapper.intMap[1003] = 4;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
}
TEST(LogEntryMatcherTest, TestNotMatcher) {
@@ -271,15 +233,12 @@
addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
kTagIdWakelock, kKeyIdState, 3);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
// Don't set any key-value pairs.
- intMap[kKeyIdState] = 3;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
+ wrapper.intMap[kKeyIdState] = 3;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
}
TEST(LogEntryMatcherTest, TestNANDMatcher) {
@@ -293,20 +252,15 @@
addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
kTagIdWakelock, kKeyIdPackageVersion, 4);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
// Don't set any key-value pairs.
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
- intMap[kKeyIdState] = 3;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
- intMap[kKeyIdPackageVersion] = 4;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 3;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdPackageVersion] = 4;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
}
TEST(LogEntryMatcherTest, TestNORMatcher) {
@@ -320,20 +274,15 @@
addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
kTagIdWakelock, kKeyIdPackageVersion, 4);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
// Don't set any key-value pairs.
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
- intMap[kKeyIdState] = 3;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
- intMap[kKeyIdPackageVersion] = 4;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 3;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdPackageVersion] = 4;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
}
// Tests that a NOT on top of AND is the same as NAND
@@ -350,22 +299,17 @@
addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
kTagIdWakelock, kKeyIdPackageVersion, 4);
- unordered_map<int, long> intMap;
- unordered_map<int, string> strMap;
- unordered_map<int, float> floatMap;
- unordered_map<int, bool> boolMap;
+ LogEventWrapper wrapper;
+ wrapper.tagId = kTagIdWakelock;
// Don't set any key-value pairs.
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
- intMap[kKeyIdState] = 3;
- EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
- intMap[kKeyIdPackageVersion] = 4;
- EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
- boolMap));
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdState] = 3;
+ EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+ wrapper.intMap[kKeyIdPackageVersion] = 4;
+ EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
}
#else
- GTEST_LOG_(INFO) << "This test does nothing.\n";
+GTEST_LOG_(INFO) << "This test does nothing.\n";
#endif