Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38d70269 authored by Jeffrey Huang's avatar Jeffrey Huang
Browse files

Add mAlertToAnomalyTrackerMap to MetricsManager

Bug: 148280505
Test: bit statsd_test:*
Change-Id: I7127dd7dac9f6c4f3d415534c339aaba28fa41f3
parent 8a617e00
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ MetricsManager::MetricsManager(const ConfigKey& key, const StatsdConfig& config,
            mAllMetricProducers, mAllAnomalyTrackers, mAllPeriodicAlarmTrackers,
            mConditionToMetricMap, mTrackerToMetricMap, mTrackerToConditionMap,
            mActivationAtomTrackerToMetricMap, mDeactivationAtomTrackerToMetricMap,
            mMetricIndexesWithActivation, mNoReportMetricIds);
            mAlertTrackerMap, mMetricIndexesWithActivation, mNoReportMetricIds);

    mHashStringsInReport = config.hash_strings_in_metric_report();
    mVersionStringsInReport = config.version_strings_in_metric_report();
+4 −0
Original line number Diff line number Diff line
@@ -230,6 +230,10 @@ private:
    // Maps deactivation triggering event to MetricProducers.
    std::unordered_map<int, std::vector<int>> mDeactivationAtomTrackerToMetricMap;

    // Maps AlertIds to the index of the corresponding AnomalyTracker stored in mAllAnomalyTrackers.
    // The map is used in LoadMetadata to more efficiently lookup AnomalyTrackers from an AlertId.
    std::unordered_map<int64_t, int> mAlertTrackerMap;

    std::vector<int> mMetricIndexesWithActivation;

    void initLogSourceWhiteList();
+7 −6
Original line number Diff line number Diff line
@@ -830,10 +830,10 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t

bool initAlerts(const StatsdConfig& config,
                const unordered_map<int64_t, int>& metricProducerMap,
                unordered_map<int64_t, int>& alertTrackerMap,
                const sp<AlarmMonitor>& anomalyAlarmMonitor,
                vector<sp<MetricProducer>>& allMetricProducers,
                vector<sp<AnomalyTracker>>& allAnomalyTrackers) {
    unordered_map<int64_t, int> anomalyTrackerMap;
    for (int i = 0; i < config.alert_size(); i++) {
        const Alert& alert = config.alert(i);
        const auto& itr = metricProducerMap.find(alert.metric_id());
@@ -858,7 +858,7 @@ bool initAlerts(const StatsdConfig& config,
            // The ALOGW for this invalid alert was already displayed in addAnomalyTracker().
            return false;
        }
        anomalyTrackerMap.insert(std::make_pair(alert.id(), allAnomalyTrackers.size()));
        alertTrackerMap.insert(std::make_pair(alert.id(), allAnomalyTrackers.size()));
        allAnomalyTrackers.push_back(anomalyTracker);
    }
    for (int i = 0; i < config.subscription_size(); ++i) {
@@ -872,8 +872,8 @@ bool initAlerts(const StatsdConfig& config,
                (long long)subscription.id());
            return false;
        }
        const auto& itr = anomalyTrackerMap.find(subscription.rule_id());
        if (itr == anomalyTrackerMap.end()) {
        const auto& itr = alertTrackerMap.find(subscription.rule_id());
        if (itr == alertTrackerMap.end()) {
            ALOGW("subscription \"%lld\" has unknown rule id: \"%lld\"",
                (long long)subscription.id(), (long long)subscription.rule_id());
            return false;
@@ -944,6 +944,7 @@ bool initStatsdConfig(const ConfigKey& key, const StatsdConfig& config, UidMap&
                      unordered_map<int, std::vector<int>>& trackerToConditionMap,
                      unordered_map<int, std::vector<int>>& activationAtomTrackerToMetricMap,
                      unordered_map<int, std::vector<int>>& deactivationAtomTrackerToMetricMap,
                      unordered_map<int64_t, int>& alertTrackerMap,
                      vector<int>& metricsWithActivation,
                      std::set<int64_t>& noReportMetricIds) {
    unordered_map<int64_t, int> logTrackerMap;
@@ -976,8 +977,8 @@ bool initStatsdConfig(const ConfigKey& key, const StatsdConfig& config, UidMap&
        ALOGE("initMetricProducers failed");
        return false;
    }
    if (!initAlerts(config, metricProducerMap, anomalyAlarmMonitor, allMetricProducers,
                    allAnomalyTrackers)) {
    if (!initAlerts(config, metricProducerMap, alertTrackerMap, anomalyAlarmMonitor,
                    allMetricProducers, allAnomalyTrackers)) {
        ALOGE("initAlerts failed");
        return false;
    }
+1 −0
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@ bool initStatsdConfig(const ConfigKey& key, const StatsdConfig& config, UidMap&
                      std::unordered_map<int, std::vector<int>>& trackerToConditionMap,
                      unordered_map<int, std::vector<int>>& activationAtomTrackerToMetricMap,
                      unordered_map<int, std::vector<int>>& deactivationAtomTrackerToMetricMap,
                      std::unordered_map<int64_t, int>& alertTrackerMap,
                      vector<int>& metricsWithActivation,
                      std::set<int64_t>& noReportMetricIds);

+26 −9
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ using android::os::statsd::Predicate;
#ifdef __ANDROID__

const ConfigKey kConfigKey(0, 12345);
const long kAlertId = 3;

const long timeBaseSec = 1000;

@@ -85,7 +86,7 @@ StatsdConfig buildGoodConfig() {
    config.add_no_report_metric(3);

    auto alert = config.add_alert();
    alert->set_id(3);
    alert->set_id(kAlertId);
    alert->set_metric_id(3);
    alert->set_num_buckets(10);
    alert->set_refractory_period_secs(100);
@@ -218,7 +219,7 @@ StatsdConfig buildDimensionMetricsWithMultiTags() {
    metric->mutable_dimensions_in_what()->add_child()->set_field(1);

    auto alert = config.add_alert();
    alert->set_id(103);
    alert->set_id(kAlertId);
    alert->set_metric_id(3);
    alert->set_num_buckets(10);
    alert->set_refractory_period_secs(100);
@@ -284,6 +285,7 @@ TEST(MetricsManagerTest, TestGoodConfig) {
    unordered_map<int, std::vector<int>> trackerToConditionMap;
    unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
    unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
    unordered_map<int64_t, int> alertTrackerMap;
    vector<int> metricsWithActivation;
    std::set<int64_t> noReportMetricIds;

@@ -293,10 +295,14 @@ TEST(MetricsManagerTest, TestGoodConfig) {
                                 allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
                                 trackerToMetricMap, trackerToConditionMap,
                                 activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
                                 metricsWithActivation, noReportMetricIds));
                                 alertTrackerMap, metricsWithActivation,
                                 noReportMetricIds));
    EXPECT_EQ(1u, allMetricProducers.size());
    EXPECT_EQ(1u, allAnomalyTrackers.size());
    EXPECT_EQ(1u, noReportMetricIds.size());
    EXPECT_EQ(1u, alertTrackerMap.size());
    EXPECT_NE(alertTrackerMap.find(kAlertId), alertTrackerMap.end());
    EXPECT_EQ(alertTrackerMap.find(kAlertId)->second, 0);
}

TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
@@ -316,6 +322,7 @@ TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
    unordered_map<int, std::vector<int>> trackerToConditionMap;
    unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
    unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
    unordered_map<int64_t, int> alertTrackerMap;
    vector<int> metricsWithActivation;
    std::set<int64_t> noReportMetricIds;

@@ -325,7 +332,8 @@ TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
                                  allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
                                  trackerToMetricMap, trackerToConditionMap,
                                  activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
                                  metricsWithActivation, noReportMetricIds));
                                  alertTrackerMap, metricsWithActivation,
                                  noReportMetricIds));
}

TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
@@ -345,6 +353,7 @@ TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
    unordered_map<int, std::vector<int>> trackerToConditionMap;
    unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
    unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
    unordered_map<int64_t, int> alertTrackerMap;
    vector<int> metricsWithActivation;
    std::set<int64_t> noReportMetricIds;

@@ -354,7 +363,8 @@ TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
                                  allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
                                  trackerToMetricMap, trackerToConditionMap,
                                  activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
                                  metricsWithActivation, noReportMetricIds));
                                  alertTrackerMap, metricsWithActivation,
                                  noReportMetricIds));
}

TEST(MetricsManagerTest, TestMissingMatchers) {
@@ -374,6 +384,7 @@ TEST(MetricsManagerTest, TestMissingMatchers) {
    unordered_map<int, std::vector<int>> trackerToConditionMap;
    unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
    unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
    unordered_map<int64_t, int> alertTrackerMap;
    vector<int> metricsWithActivation;
    std::set<int64_t> noReportMetricIds;
    EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
@@ -382,7 +393,8 @@ TEST(MetricsManagerTest, TestMissingMatchers) {
                                  allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
                                  trackerToMetricMap, trackerToConditionMap,
                                  activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
                                  metricsWithActivation, noReportMetricIds));
                                  alertTrackerMap, metricsWithActivation,
                                  noReportMetricIds));
}

TEST(MetricsManagerTest, TestMissingPredicate) {
@@ -402,6 +414,7 @@ TEST(MetricsManagerTest, TestMissingPredicate) {
    unordered_map<int, std::vector<int>> trackerToConditionMap;
    unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
    unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
    unordered_map<int64_t, int> alertTrackerMap;
    vector<int> metricsWithActivation;
    std::set<int64_t> noReportMetricIds;
    EXPECT_FALSE(initStatsdConfig(kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor,
@@ -410,7 +423,7 @@ TEST(MetricsManagerTest, TestMissingPredicate) {
                                  allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
                                  trackerToMetricMap, trackerToConditionMap,
                                  activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
                                  metricsWithActivation, noReportMetricIds));
                                  alertTrackerMap, metricsWithActivation, noReportMetricIds));
}

TEST(MetricsManagerTest, TestCirclePredicateDependency) {
@@ -430,6 +443,7 @@ TEST(MetricsManagerTest, TestCirclePredicateDependency) {
    unordered_map<int, std::vector<int>> trackerToConditionMap;
    unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
    unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
    unordered_map<int64_t, int> alertTrackerMap;
    vector<int> metricsWithActivation;
    std::set<int64_t> noReportMetricIds;

@@ -439,7 +453,8 @@ TEST(MetricsManagerTest, TestCirclePredicateDependency) {
                                  allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
                                  trackerToMetricMap, trackerToConditionMap,
                                  activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
                                  metricsWithActivation, noReportMetricIds));
                                  alertTrackerMap, metricsWithActivation,
                                  noReportMetricIds));
}

TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
@@ -459,6 +474,7 @@ TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
    unordered_map<int, std::vector<int>> trackerToConditionMap;
    unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
    unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
    unordered_map<int64_t, int> alertTrackerMap;
    vector<int> metricsWithActivation;
    std::set<int64_t> noReportMetricIds;

@@ -468,7 +484,8 @@ TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
                                  allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap,
                                  trackerToMetricMap, trackerToConditionMap,
                                  activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
                                  metricsWithActivation, noReportMetricIds));
                                  alertTrackerMap, metricsWithActivation,
                                  noReportMetricIds));
}

#else