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

Commit 10535b9a authored by Yao Chen's avatar Yao Chen
Browse files

Reject the config if condition config has errors. And add log tag.

Test: added unit test.
Change-Id: I7108350978f7c1d0e8e87f22082e19fc76a75631
parent c8862caf
Loading
Loading
Loading
Loading
+33 −15
Original line number Diff line number Diff line
@@ -14,6 +14,9 @@
 * limitations under the License.
 */

#define DEBUG true  // STOPSHIP if true
#include "Log.h"

#include "../condition/CombinationConditionTracker.h"
#include "../condition/SimpleConditionTracker.h"
#include "../external/StatsPullerManager.h"
@@ -221,9 +224,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config,

        int conditionIndex = -1;
        if (metric.has_condition()) {
            handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap,
                                       metric.links(), allConditionTrackers, conditionIndex,
                                       conditionToMetricMap);
            bool good = handleMetricWithConditions(
                    metric.condition(), metricIndex, conditionTrackerMap, metric.links(),
                    allConditionTrackers, conditionIndex, conditionToMetricMap);
            if (!good) {
                return false;
            }
        } else {
            if (metric.links_size() > 0) {
                ALOGW("metrics has a EventConditionLink but doesn't have a condition");
@@ -289,9 +295,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config,
        int conditionIndex = -1;

        if (metric.has_condition()) {
            handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap,
                                       metric.links(), allConditionTrackers, conditionIndex,
                                       conditionToMetricMap);
            bool good = handleMetricWithConditions(
                    metric.condition(), metricIndex, conditionTrackerMap, metric.links(),
                    allConditionTrackers, conditionIndex, conditionToMetricMap);
            if (!good) {
                return false;
            }
        } else {
            if (metric.links_size() > 0) {
                ALOGW("metrics has a EventConditionLink but doesn't have a condition");
@@ -323,9 +332,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config,

        int conditionIndex = -1;
        if (metric.has_condition()) {
            handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap,
                                       metric.links(), allConditionTrackers, conditionIndex,
                                       conditionToMetricMap);
            bool good = handleMetricWithConditions(
                    metric.condition(), metricIndex, conditionTrackerMap, metric.links(),
                    allConditionTrackers, conditionIndex, conditionToMetricMap);
            if (!good) {
                return false;
            }
        } else {
            if (metric.links_size() > 0) {
                ALOGW("metrics has a EventConditionLink but doesn't have a condition");
@@ -370,9 +382,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config,

        int conditionIndex = -1;
        if (metric.has_condition()) {
            handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap,
                                       metric.links(), allConditionTrackers, conditionIndex,
                                       conditionToMetricMap);
            bool good = handleMetricWithConditions(
                    metric.condition(), metricIndex, conditionTrackerMap, metric.links(),
                    allConditionTrackers, conditionIndex, conditionToMetricMap);
            if (!good) {
                return false;
            }
        } else {
            if (metric.links_size() > 0) {
                ALOGW("metrics has a EventConditionLink but doesn't have a condition");
@@ -416,9 +431,12 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config,

        int conditionIndex = -1;
        if (metric.has_condition()) {
            handleMetricWithConditions(metric.condition(), metricIndex, conditionTrackerMap,
                                       metric.links(), allConditionTrackers, conditionIndex,
                                       conditionToMetricMap);
            bool good = handleMetricWithConditions(
                    metric.condition(), metricIndex, conditionTrackerMap, metric.links(),
                    allConditionTrackers, conditionIndex, conditionToMetricMap);
            if (!good) {
                return false;
            }
        } else {
            if (metric.links_size() > 0) {
                ALOGW("metrics has a EventConditionLink but doesn't have a condition");
+34 −0
Original line number Diff line number Diff line
@@ -165,6 +165,25 @@ StatsdConfig buildMissingMatchers() {
    return config;
}

StatsdConfig buildMissingCondition() {
    StatsdConfig config;
    config.set_name("12345");

    CountMetric* metric = config.add_count_metric();
    metric->set_name("3");
    metric->set_what("SCREEN_EVENT");
    metric->mutable_bucket()->set_bucket_size_millis(30 * 1000L);
    metric->set_condition("SOME_CONDITION");

    LogEntryMatcher* eventMatcher = config.add_log_entry_matcher();
    eventMatcher->set_name("SCREEN_EVENT");

    SimpleLogEntryMatcher* simpleLogEntryMatcher = eventMatcher->mutable_simple_log_entry_matcher();
    simpleLogEntryMatcher->set_tag(2);

    return config;
}

StatsdConfig buildDimensionMetricsWithMultiTags() {
    StatsdConfig config;
    config.set_name("12345");
@@ -310,6 +329,21 @@ TEST(MetricsManagerTest, TestMissingMatchers) {
                                  conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
}

TEST(MetricsManagerTest, TestMissingCondition) {
    StatsdConfig config = buildMissingCondition();
    set<int> allTagIds;
    vector<sp<LogMatchingTracker>> allLogEntryMatchers;
    vector<sp<ConditionTracker>> allConditionTrackers;
    vector<sp<MetricProducer>> allMetricProducers;
    std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
    unordered_map<int, std::vector<int>> conditionToMetricMap;
    unordered_map<int, std::vector<int>> trackerToMetricMap;
    unordered_map<int, std::vector<int>> trackerToConditionMap;
    EXPECT_FALSE(initStatsdConfig(kConfigKey, config, allTagIds, allLogEntryMatchers,
                                  allConditionTrackers, allMetricProducers, allAnomalyTrackers,
                                  conditionToMetricMap, trackerToMetricMap, trackerToConditionMap));
}

TEST(MetricsManagerTest, TestCircleConditionDependency) {
    StatsdConfig config = buildCircleConditions();
    set<int> allTagIds;