Loading cmds/statsd/src/metrics/MetricProducer.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -442,7 +442,7 @@ protected: bool mIsActive; bool mIsActive; // The slice_by_state atom ids defined in statsd_config. // The slice_by_state atom ids defined in statsd_config. std::vector<int32_t> mSlicedStateAtoms; const std::vector<int32_t> mSlicedStateAtoms; // Maps atom ids and state values to group_ids (<atom_id, <value, group_id>>). // Maps atom ids and state values to group_ids (<atom_id, <value, group_id>>). const std::unordered_map<int32_t, std::unordered_map<int, int64_t>> mStateGroupMap; const std::unordered_map<int32_t, std::unordered_map<int, int64_t>> mStateGroupMap; Loading cmds/statsd/src/metrics/metrics_manager_util.cpp +10 −1 Original line number Original line Diff line number Diff line Loading @@ -791,10 +791,19 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t } } noReportMetricIds.insert(no_report_metric); noReportMetricIds.insert(no_report_metric); } } const set<int> whitelistedAtomIds(config.whitelisted_atom_ids().begin(), config.whitelisted_atom_ids().end()); for (const auto& it : allMetricProducers) { for (const auto& it : allMetricProducers) { // Register metrics to StateTrackers // Register metrics to StateTrackers for (int atomId : it->getSlicedStateAtoms()) { for (int atomId : it->getSlicedStateAtoms()) { // Register listener for non-whitelisted atoms only. Using whitelisted atom as a sliced // state atom is not allowed. if (whitelistedAtomIds.find(atomId) == whitelistedAtomIds.end()) { StateManager::getInstance().registerListener(atomId, it); StateManager::getInstance().registerListener(atomId, it); } else { return false; } } } } } return true; return true; Loading cmds/statsd/tests/MetricsManager_test.cpp +29 −0 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include "src/metrics/MetricProducer.h" #include "src/metrics/MetricProducer.h" #include "src/metrics/ValueMetricProducer.h" #include "src/metrics/ValueMetricProducer.h" #include "src/metrics/metrics_manager_util.h" #include "src/metrics/metrics_manager_util.h" #include "src/state/StateManager.h" #include "statsd_test_util.h" #include "statsd_test_util.h" using namespace testing; using namespace testing; Loading Loading @@ -615,6 +616,34 @@ TEST(MetricsManagerTest, TestCheckLogCredentialsWhitelistedAtom) { EXPECT_TRUE(metricsManager.checkLogCredentials(event)); EXPECT_TRUE(metricsManager.checkLogCredentials(event)); } } TEST(MetricsManagerTest, TestWhitelistedAtomStateTracker) { sp<UidMap> uidMap; sp<StatsPullerManager> pullerManager = new StatsPullerManager(); sp<AlarmMonitor> anomalyAlarmMonitor; sp<AlarmMonitor> periodicAlarmMonitor; StatsdConfig config = buildGoodConfig(); config.add_allowed_log_source("AID_SYSTEM"); config.add_whitelisted_atom_ids(3); config.add_whitelisted_atom_ids(4); State state; state.set_id(1); state.set_atom_id(3); *config.add_state() = state; config.mutable_count_metric(0)->add_slice_by_state(state.id()); StateManager::getInstance().clear(); MetricsManager metricsManager(kConfigKey, config, timeBaseSec, timeBaseSec, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor); EXPECT_EQ(0, StateManager::getInstance().getStateTrackersCount()); EXPECT_FALSE(metricsManager.isConfigValid()); } } // namespace statsd } // namespace statsd } // namespace os } // namespace os } // namespace android } // namespace android Loading Loading
cmds/statsd/src/metrics/MetricProducer.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -442,7 +442,7 @@ protected: bool mIsActive; bool mIsActive; // The slice_by_state atom ids defined in statsd_config. // The slice_by_state atom ids defined in statsd_config. std::vector<int32_t> mSlicedStateAtoms; const std::vector<int32_t> mSlicedStateAtoms; // Maps atom ids and state values to group_ids (<atom_id, <value, group_id>>). // Maps atom ids and state values to group_ids (<atom_id, <value, group_id>>). const std::unordered_map<int32_t, std::unordered_map<int, int64_t>> mStateGroupMap; const std::unordered_map<int32_t, std::unordered_map<int, int64_t>> mStateGroupMap; Loading
cmds/statsd/src/metrics/metrics_manager_util.cpp +10 −1 Original line number Original line Diff line number Diff line Loading @@ -791,10 +791,19 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t } } noReportMetricIds.insert(no_report_metric); noReportMetricIds.insert(no_report_metric); } } const set<int> whitelistedAtomIds(config.whitelisted_atom_ids().begin(), config.whitelisted_atom_ids().end()); for (const auto& it : allMetricProducers) { for (const auto& it : allMetricProducers) { // Register metrics to StateTrackers // Register metrics to StateTrackers for (int atomId : it->getSlicedStateAtoms()) { for (int atomId : it->getSlicedStateAtoms()) { // Register listener for non-whitelisted atoms only. Using whitelisted atom as a sliced // state atom is not allowed. if (whitelistedAtomIds.find(atomId) == whitelistedAtomIds.end()) { StateManager::getInstance().registerListener(atomId, it); StateManager::getInstance().registerListener(atomId, it); } else { return false; } } } } } return true; return true; Loading
cmds/statsd/tests/MetricsManager_test.cpp +29 −0 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include "src/metrics/MetricProducer.h" #include "src/metrics/MetricProducer.h" #include "src/metrics/ValueMetricProducer.h" #include "src/metrics/ValueMetricProducer.h" #include "src/metrics/metrics_manager_util.h" #include "src/metrics/metrics_manager_util.h" #include "src/state/StateManager.h" #include "statsd_test_util.h" #include "statsd_test_util.h" using namespace testing; using namespace testing; Loading Loading @@ -615,6 +616,34 @@ TEST(MetricsManagerTest, TestCheckLogCredentialsWhitelistedAtom) { EXPECT_TRUE(metricsManager.checkLogCredentials(event)); EXPECT_TRUE(metricsManager.checkLogCredentials(event)); } } TEST(MetricsManagerTest, TestWhitelistedAtomStateTracker) { sp<UidMap> uidMap; sp<StatsPullerManager> pullerManager = new StatsPullerManager(); sp<AlarmMonitor> anomalyAlarmMonitor; sp<AlarmMonitor> periodicAlarmMonitor; StatsdConfig config = buildGoodConfig(); config.add_allowed_log_source("AID_SYSTEM"); config.add_whitelisted_atom_ids(3); config.add_whitelisted_atom_ids(4); State state; state.set_id(1); state.set_atom_id(3); *config.add_state() = state; config.mutable_count_metric(0)->add_slice_by_state(state.id()); StateManager::getInstance().clear(); MetricsManager metricsManager(kConfigKey, config, timeBaseSec, timeBaseSec, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor); EXPECT_EQ(0, StateManager::getInstance().getStateTrackersCount()); EXPECT_FALSE(metricsManager.isConfigValid()); } } // namespace statsd } // namespace statsd } // namespace os } // namespace os } // namespace android } // namespace android Loading