diff options
| -rw-r--r-- | cmds/statsd/src/guardrail/StatsdStats.h | 1 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/MetricProducer.h | 1 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/MetricsManager.cpp | 6 | ||||
| -rw-r--r-- | cmds/statsd/src/metrics/metrics_manager_util.cpp | 8 | ||||
| -rw-r--r-- | services/core/java/com/android/server/stats/StatsCompanionService.java | 11 |
5 files changed, 16 insertions, 11 deletions
diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h index f254327fcc16..7baa5e57679e 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.h +++ b/cmds/statsd/src/guardrail/StatsdStats.h @@ -42,6 +42,7 @@ public: const static int kDimensionKeySizeHardLimit = 500; const static int kMaxConfigCount = 10; + const static int kMaxAlertCountPerConfig = 100; const static int kMaxConditionCountPerConfig = 200; const static int kMaxMetricCountPerConfig = 300; const static int kMaxMatcherCountPerConfig = 500; diff --git a/cmds/statsd/src/metrics/MetricProducer.h b/cmds/statsd/src/metrics/MetricProducer.h index e8f8299abd89..4ee94718de92 100644 --- a/cmds/statsd/src/metrics/MetricProducer.h +++ b/cmds/statsd/src/metrics/MetricProducer.h @@ -123,6 +123,7 @@ public: return byteSizeLocked(); } + /* If alert is valid, adds an AnomalyTracker and returns it. If invalid, returns nullptr. */ virtual sp<AnomalyTracker> addAnomalyTracker(const Alert &alert) { std::lock_guard<std::mutex> lock(mMutex); sp<AnomalyTracker> anomalyTracker = new AnomalyTracker(alert, mConfigKey); diff --git a/cmds/statsd/src/metrics/MetricsManager.cpp b/cmds/statsd/src/metrics/MetricsManager.cpp index 66e1aeb8f43e..ddc05c64415a 100644 --- a/cmds/statsd/src/metrics/MetricsManager.cpp +++ b/cmds/statsd/src/metrics/MetricsManager.cpp @@ -92,8 +92,10 @@ MetricsManager::MetricsManager(const ConfigKey& key, const StatsdConfig& config, ALOGE("This config is too big! Reject!"); mConfigValid = false; } - - // TODO: add alert size. + if (mAllAnomalyTrackers.size() > StatsdStats::kMaxAlertCountPerConfig) { + ALOGE("This config has too many alerts! Reject!"); + mConfigValid = false; + } // no matter whether this config is valid, log it in the stats. StatsdStats::getInstance().noteConfigReceived(key, mAllMetricProducers.size(), mAllConditionTrackers.size(), diff --git a/cmds/statsd/src/metrics/metrics_manager_util.cpp b/cmds/statsd/src/metrics/metrics_manager_util.cpp index 769f46dbd7e6..71e5c33b1b88 100644 --- a/cmds/statsd/src/metrics/metrics_manager_util.cpp +++ b/cmds/statsd/src/metrics/metrics_manager_util.cpp @@ -513,10 +513,12 @@ bool initAlerts(const StatsdConfig& config, const int metricIndex = itr->second; sp<MetricProducer> metric = allMetricProducers[metricIndex]; sp<AnomalyTracker> anomalyTracker = metric->addAnomalyTracker(alert); - if (anomalyTracker != nullptr) { - anomalyTrackerMap.insert(std::make_pair(alert.id(), allAnomalyTrackers.size())); - allAnomalyTrackers.push_back(anomalyTracker); + if (anomalyTracker == nullptr) { + // The ALOGW for this invalid alert was already displayed in addAnomalyTracker(). + return false; } + anomalyTrackerMap.insert(std::make_pair(alert.id(), allAnomalyTrackers.size())); + allAnomalyTrackers.push_back(anomalyTracker); } for (int i = 0; i < config.subscription_size(); ++i) { const Subscription& subscription = config.subscription(i); diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java index 9f9b1af5397e..fa7e53594781 100644 --- a/services/core/java/com/android/server/stats/StatsCompanionService.java +++ b/services/core/java/com/android/server/stats/StatsCompanionService.java @@ -172,7 +172,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { public void sendSubscriberBroadcast(IBinder intentSenderBinder, long configUid, long configKey, long subscriptionId, long subscriptionRuleId, StatsDimensionsValue dimensionsValue) { - if (DEBUG) Slog.d(TAG, "Statsd requested to sendSubscriberBroadcast."); enforceCallingPermission(); IntentSender intentSender = new IntentSender(intentSenderBinder); Intent intent = new Intent() @@ -181,16 +180,16 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { .putExtra(StatsManager.EXTRA_STATS_SUBSCRIPTION_ID, subscriptionId) .putExtra(StatsManager.EXTRA_STATS_SUBSCRIPTION_RULE_ID, subscriptionRuleId) .putExtra(StatsManager.EXTRA_STATS_DIMENSIONS_VALUE, dimensionsValue); + if (DEBUG) { + Slog.d(TAG, String.format("Statsd sendSubscriberBroadcast with params {%d %d %d %d %s}", + configUid, configKey, subscriptionId, + subscriptionRuleId, dimensionsValue)); + } try { intentSender.sendIntent(mContext, CODE_SUBSCRIBER_BROADCAST, intent, null, null); } catch (IntentSender.SendIntentException e) { Slog.w(TAG, "Unable to send using IntentSender from uid " + configUid + "; presumably it had been cancelled."); - if (DEBUG) { - Slog.d(TAG, String.format("SubscriberBroadcast params {%d %d %d %d %s}", - configUid, configKey, subscriptionId, - subscriptionRuleId, dimensionsValue)); - } } } |