Merge "Partial Config Update: store metric/state hashes"
This commit is contained in:
committed by
Android (Google) Code Review
commit
423aa6219c
@@ -69,13 +69,14 @@ const int FIELD_ID_END_BUCKET_ELAPSED_MILLIS = 6;
|
||||
CountMetricProducer::CountMetricProducer(
|
||||
const ConfigKey& key, const CountMetric& metric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache, const sp<ConditionWizard>& wizard,
|
||||
const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const uint64_t protoHash, const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const unordered_map<int, shared_ptr<Activation>>& eventActivationMap,
|
||||
const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap,
|
||||
const vector<int>& slicedStateAtoms,
|
||||
const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap)
|
||||
: MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, initialConditionCache, wizard,
|
||||
eventActivationMap, eventDeactivationMap, slicedStateAtoms, stateGroupMap) {
|
||||
protoHash, eventActivationMap, eventDeactivationMap, slicedStateAtoms,
|
||||
stateGroupMap) {
|
||||
if (metric.has_bucket()) {
|
||||
mBucketSizeNs =
|
||||
TimeUnitToBucketSizeInMillisGuardrailed(key.GetUid(), metric.bucket()) * 1000000;
|
||||
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
CountMetricProducer(
|
||||
const ConfigKey& key, const CountMetric& countMetric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache, const sp<ConditionWizard>& wizard,
|
||||
const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const uint64_t protoHash, const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap = {},
|
||||
const std::unordered_map<int, std::vector<std::shared_ptr<Activation>>>&
|
||||
eventDeactivationMap = {},
|
||||
@@ -57,6 +57,10 @@ public:
|
||||
const HashableDimensionKey& primaryKey, const FieldValue& oldState,
|
||||
const FieldValue& newState) override;
|
||||
|
||||
MetricType getMetricType() const override {
|
||||
return METRIC_TYPE_COUNT;
|
||||
}
|
||||
|
||||
protected:
|
||||
void onMatchedLogEventInternalLocked(
|
||||
const size_t matcherIndex, const MetricDimensionKey& eventKey,
|
||||
|
||||
@@ -66,14 +66,15 @@ DurationMetricProducer::DurationMetricProducer(
|
||||
const ConfigKey& key, const DurationMetric& metric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache, const size_t startIndex,
|
||||
const size_t stopIndex, const size_t stopAllIndex, const bool nesting,
|
||||
const sp<ConditionWizard>& wizard, const FieldMatcher& internalDimensions,
|
||||
const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const sp<ConditionWizard>& wizard, const uint64_t protoHash,
|
||||
const FieldMatcher& internalDimensions, const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const unordered_map<int, shared_ptr<Activation>>& eventActivationMap,
|
||||
const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap,
|
||||
const vector<int>& slicedStateAtoms,
|
||||
const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap)
|
||||
: MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, initialConditionCache, wizard,
|
||||
eventActivationMap, eventDeactivationMap, slicedStateAtoms, stateGroupMap),
|
||||
protoHash, eventActivationMap, eventDeactivationMap, slicedStateAtoms,
|
||||
stateGroupMap),
|
||||
mAggregationType(metric.aggregation_type()),
|
||||
mStartIndex(startIndex),
|
||||
mStopIndex(stopIndex),
|
||||
|
||||
@@ -42,8 +42,9 @@ public:
|
||||
const ConfigKey& key, const DurationMetric& durationMetric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache, const size_t startIndex,
|
||||
const size_t stopIndex, const size_t stopAllIndex, const bool nesting,
|
||||
const sp<ConditionWizard>& wizard, const FieldMatcher& internalDimensions,
|
||||
const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const sp<ConditionWizard>& wizard, const uint64_t protoHash,
|
||||
const FieldMatcher& internalDimensions, const int64_t timeBaseNs,
|
||||
const int64_t startTimeNs,
|
||||
const unordered_map<int, shared_ptr<Activation>>& eventActivationMap = {},
|
||||
const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap = {},
|
||||
const vector<int>& slicedStateAtoms = {},
|
||||
@@ -58,6 +59,10 @@ public:
|
||||
const HashableDimensionKey& primaryKey, const FieldValue& oldState,
|
||||
const FieldValue& newState) override;
|
||||
|
||||
MetricType getMetricType() const override {
|
||||
return METRIC_TYPE_DURATION;
|
||||
}
|
||||
|
||||
protected:
|
||||
void onMatchedLogEventLocked(const size_t matcherIndex, const LogEvent& event) override;
|
||||
|
||||
|
||||
@@ -55,13 +55,14 @@ const int FIELD_ID_ATOMS = 2;
|
||||
EventMetricProducer::EventMetricProducer(
|
||||
const ConfigKey& key, const EventMetric& metric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache, const sp<ConditionWizard>& wizard,
|
||||
const int64_t startTimeNs,
|
||||
const uint64_t protoHash, const int64_t startTimeNs,
|
||||
const unordered_map<int, shared_ptr<Activation>>& eventActivationMap,
|
||||
const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap,
|
||||
const vector<int>& slicedStateAtoms,
|
||||
const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap)
|
||||
: MetricProducer(metric.id(), key, startTimeNs, conditionIndex, initialConditionCache, wizard,
|
||||
eventActivationMap, eventDeactivationMap, slicedStateAtoms, stateGroupMap) {
|
||||
protoHash, eventActivationMap, eventDeactivationMap, slicedStateAtoms,
|
||||
stateGroupMap) {
|
||||
if (metric.links().size() > 0) {
|
||||
for (const auto& link : metric.links()) {
|
||||
Metric2Condition mc;
|
||||
|
||||
@@ -36,7 +36,7 @@ public:
|
||||
EventMetricProducer(
|
||||
const ConfigKey& key, const EventMetric& eventMetric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache, const sp<ConditionWizard>& wizard,
|
||||
const int64_t startTimeNs,
|
||||
const uint64_t protoHash, const int64_t startTimeNs,
|
||||
const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap = {},
|
||||
const std::unordered_map<int, std::vector<std::shared_ptr<Activation>>>&
|
||||
eventDeactivationMap = {},
|
||||
@@ -45,6 +45,10 @@ public:
|
||||
|
||||
virtual ~EventMetricProducer();
|
||||
|
||||
MetricType getMetricType() const override {
|
||||
return METRIC_TYPE_EVENT;
|
||||
}
|
||||
|
||||
private:
|
||||
void onMatchedLogEventInternalLocked(
|
||||
const size_t matcherIndex, const MetricDimensionKey& eventKey,
|
||||
|
||||
@@ -71,13 +71,14 @@ const int FIELD_ID_END_BUCKET_ELAPSED_MILLIS = 8;
|
||||
GaugeMetricProducer::GaugeMetricProducer(
|
||||
const ConfigKey& key, const GaugeMetric& metric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache, const sp<ConditionWizard>& wizard,
|
||||
const int whatMatcherIndex, const sp<EventMatcherWizard>& matcherWizard,
|
||||
const int pullTagId, const int triggerAtomId, const int atomId, const int64_t timeBaseNs,
|
||||
const int64_t startTimeNs, const sp<StatsPullerManager>& pullerManager,
|
||||
const uint64_t protoHash, const int whatMatcherIndex,
|
||||
const sp<EventMatcherWizard>& matcherWizard, const int pullTagId, const int triggerAtomId,
|
||||
const int atomId, const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const sp<StatsPullerManager>& pullerManager,
|
||||
const unordered_map<int, shared_ptr<Activation>>& eventActivationMap,
|
||||
const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap)
|
||||
: MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, initialConditionCache, wizard,
|
||||
eventActivationMap, eventDeactivationMap, /*slicedStateAtoms=*/{},
|
||||
protoHash, eventActivationMap, eventDeactivationMap, /*slicedStateAtoms=*/{},
|
||||
/*stateGroupMap=*/{}),
|
||||
mWhatMatcherIndex(whatMatcherIndex),
|
||||
mEventMatcherWizard(matcherWizard),
|
||||
|
||||
@@ -59,10 +59,11 @@ public:
|
||||
GaugeMetricProducer(
|
||||
const ConfigKey& key, const GaugeMetric& gaugeMetric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache,
|
||||
const sp<ConditionWizard>& conditionWizard, const int whatMatcherIndex,
|
||||
const sp<EventMatcherWizard>& matcherWizard, const int pullTagId,
|
||||
const int triggerAtomId, const int atomId, const int64_t timeBaseNs,
|
||||
const int64_t startTimeNs, const sp<StatsPullerManager>& pullerManager,
|
||||
const sp<ConditionWizard>& conditionWizard, const uint64_t protoHash,
|
||||
const int whatMatcherIndex, const sp<EventMatcherWizard>& matcherWizard,
|
||||
const int pullTagId, const int triggerAtomId, const int atomId,
|
||||
const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const sp<StatsPullerManager>& pullerManager,
|
||||
const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap = {},
|
||||
const std::unordered_map<int, std::vector<std::shared_ptr<Activation>>>&
|
||||
eventDeactivationMap = {});
|
||||
@@ -96,6 +97,10 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
MetricType getMetricType() const override {
|
||||
return METRIC_TYPE_GAUGE;
|
||||
}
|
||||
|
||||
protected:
|
||||
void onMatchedLogEventInternalLocked(
|
||||
const size_t matcherIndex, const MetricDimensionKey& eventKey,
|
||||
|
||||
@@ -46,13 +46,14 @@ const int FIELD_ID_ACTIVE_EVENT_ACTIVATION_STATE = 3;
|
||||
MetricProducer::MetricProducer(
|
||||
const int64_t& metricId, const ConfigKey& key, const int64_t timeBaseNs,
|
||||
const int conditionIndex, const vector<ConditionState>& initialConditionCache,
|
||||
const sp<ConditionWizard>& wizard,
|
||||
const sp<ConditionWizard>& wizard, const uint64_t protoHash,
|
||||
const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap,
|
||||
const std::unordered_map<int, std::vector<std::shared_ptr<Activation>>>&
|
||||
eventDeactivationMap,
|
||||
const vector<int>& slicedStateAtoms,
|
||||
const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap)
|
||||
: mMetricId(metricId),
|
||||
mProtoHash(protoHash),
|
||||
mConfigKey(key),
|
||||
mTimeBaseNs(timeBaseNs),
|
||||
mCurrentBucketStartTimeNs(timeBaseNs),
|
||||
|
||||
@@ -87,6 +87,13 @@ enum BucketDropReason {
|
||||
NO_DATA = 9
|
||||
};
|
||||
|
||||
enum MetricType {
|
||||
METRIC_TYPE_EVENT = 1,
|
||||
METRIC_TYPE_COUNT = 2,
|
||||
METRIC_TYPE_DURATION = 3,
|
||||
METRIC_TYPE_GAUGE = 4,
|
||||
METRIC_TYPE_VALUE = 5,
|
||||
};
|
||||
struct Activation {
|
||||
Activation(const ActivationType& activationType, const int64_t ttlNs)
|
||||
: ttl_ns(ttlNs),
|
||||
@@ -130,7 +137,7 @@ class MetricProducer : public virtual android::RefBase, public virtual StateList
|
||||
public:
|
||||
MetricProducer(const int64_t& metricId, const ConfigKey& key, const int64_t timeBaseNs,
|
||||
const int conditionIndex, const vector<ConditionState>& initialConditionCache,
|
||||
const sp<ConditionWizard>& wizard,
|
||||
const sp<ConditionWizard>& wizard, const uint64_t protoHash,
|
||||
const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap,
|
||||
const std::unordered_map<int, std::vector<std::shared_ptr<Activation>>>&
|
||||
eventDeactivationMap,
|
||||
@@ -259,10 +266,16 @@ public:
|
||||
int64_t currentTimeNs, const DumpReportReason reason, ProtoOutputStream* proto);
|
||||
|
||||
// Start: getters/setters
|
||||
inline const int64_t& getMetricId() const {
|
||||
inline int64_t getMetricId() const {
|
||||
return mMetricId;
|
||||
}
|
||||
|
||||
inline uint64_t getProtoHash() const {
|
||||
return mProtoHash;
|
||||
}
|
||||
|
||||
virtual MetricType getMetricType() const = 0;
|
||||
|
||||
// For test only.
|
||||
inline int64_t getCurrentBucketNum() const {
|
||||
return mCurrentBucketNum;
|
||||
@@ -400,6 +413,10 @@ protected:
|
||||
|
||||
const int64_t mMetricId;
|
||||
|
||||
// Hash of the Metric's proto bytes from StatsdConfig, including any activations.
|
||||
// Used to determine if the definition of this metric has changed across a config update.
|
||||
const uint64_t mProtoHash;
|
||||
|
||||
const ConfigKey mConfigKey;
|
||||
|
||||
// The time when this metric producer was first created. The end time for the current bucket
|
||||
|
||||
@@ -80,11 +80,11 @@ MetricsManager::MetricsManager(const ConfigKey& key, const StatsdConfig& config,
|
||||
mConfigValid = initStatsdConfig(
|
||||
key, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseNs, currentTimeNs, mTagIds, mAllAtomMatchingTrackers, mAtomMatchingTrackerMap,
|
||||
mAllConditionTrackers, mConditionTrackerMap, mAllMetricProducers, mAllAnomalyTrackers,
|
||||
mAllPeriodicAlarmTrackers, mConditionToMetricMap, mTrackerToMetricMap,
|
||||
mTrackerToConditionMap, mActivationAtomTrackerToMetricMap,
|
||||
mAllConditionTrackers, mConditionTrackerMap, mAllMetricProducers, mMetricProducerMap,
|
||||
mAllAnomalyTrackers, mAllPeriodicAlarmTrackers, mConditionToMetricMap,
|
||||
mTrackerToMetricMap, mTrackerToConditionMap, mActivationAtomTrackerToMetricMap,
|
||||
mDeactivationAtomTrackerToMetricMap, mAlertTrackerMap, mMetricIndexesWithActivation,
|
||||
mNoReportMetricIds);
|
||||
mStateProtoHashes, mNoReportMetricIds);
|
||||
|
||||
mHashStringsInReport = config.hash_strings_in_metric_report();
|
||||
mVersionStringsInReport = config.version_strings_in_metric_report();
|
||||
|
||||
@@ -248,6 +248,9 @@ private:
|
||||
// Maps the id of a condition tracker to its index in mAllConditionTrackers.
|
||||
std::unordered_map<int64_t, int> mConditionTrackerMap;
|
||||
|
||||
// Maps the id of a metric producer to its index in mAllMetricProducers.
|
||||
std::unordered_map<int64_t, int> mMetricProducerMap;
|
||||
|
||||
// To make the log processing more efficient, we want to do as much filtering as possible
|
||||
// before we go into individual trackers and conditions to match.
|
||||
|
||||
@@ -295,6 +298,9 @@ private:
|
||||
// The config is always active if any metric in the config does not have an activation signal.
|
||||
bool mIsAlwaysActive;
|
||||
|
||||
// Hashes of the States used in this config, keyed by the state id, used in config updates.
|
||||
std::map<int64_t, uint64_t> mStateProtoHashes;
|
||||
|
||||
FRIEND_TEST(WakelockDurationE2eTest, TestAggregatedPredicateDimensions);
|
||||
FRIEND_TEST(MetricConditionLinkE2eTest, TestMultiplePredicatesAndLinks);
|
||||
FRIEND_TEST(AttributionE2eTest, TestAttributionMatchAndSliceByFirstUid);
|
||||
|
||||
@@ -79,16 +79,17 @@ const Value ZERO_DOUBLE((int64_t)0);
|
||||
ValueMetricProducer::ValueMetricProducer(
|
||||
const ConfigKey& key, const ValueMetric& metric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache,
|
||||
const sp<ConditionWizard>& conditionWizard, const int whatMatcherIndex,
|
||||
const sp<EventMatcherWizard>& matcherWizard, const int pullTagId, const int64_t timeBaseNs,
|
||||
const int64_t startTimeNs, const sp<StatsPullerManager>& pullerManager,
|
||||
const sp<ConditionWizard>& conditionWizard, const uint64_t protoHash,
|
||||
const int whatMatcherIndex, const sp<EventMatcherWizard>& matcherWizard,
|
||||
const int pullTagId, const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const sp<StatsPullerManager>& pullerManager,
|
||||
const unordered_map<int, shared_ptr<Activation>>& eventActivationMap,
|
||||
const unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap,
|
||||
const vector<int>& slicedStateAtoms,
|
||||
const unordered_map<int, unordered_map<int, int64_t>>& stateGroupMap)
|
||||
: MetricProducer(metric.id(), key, timeBaseNs, conditionIndex, initialConditionCache,
|
||||
conditionWizard, eventActivationMap, eventDeactivationMap, slicedStateAtoms,
|
||||
stateGroupMap),
|
||||
conditionWizard, protoHash, eventActivationMap, eventDeactivationMap,
|
||||
slicedStateAtoms, stateGroupMap),
|
||||
mWhatMatcherIndex(whatMatcherIndex),
|
||||
mEventMatcherWizard(matcherWizard),
|
||||
mPullerManager(pullerManager),
|
||||
|
||||
@@ -52,9 +52,9 @@ public:
|
||||
ValueMetricProducer(
|
||||
const ConfigKey& key, const ValueMetric& valueMetric, const int conditionIndex,
|
||||
const vector<ConditionState>& initialConditionCache,
|
||||
const sp<ConditionWizard>& conditionWizard, const int whatMatcherIndex,
|
||||
const sp<EventMatcherWizard>& matcherWizard, const int pullTagId,
|
||||
const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const sp<ConditionWizard>& conditionWizard, const uint64_t protoHash,
|
||||
const int whatMatcherIndex, const sp<EventMatcherWizard>& matcherWizard,
|
||||
const int pullTagId, const int64_t timeBaseNs, const int64_t startTimeNs,
|
||||
const sp<StatsPullerManager>& pullerManager,
|
||||
const std::unordered_map<int, std::shared_ptr<Activation>>& eventActivationMap = {},
|
||||
const std::unordered_map<int, std::vector<std::shared_ptr<Activation>>>&
|
||||
@@ -92,6 +92,10 @@ public:
|
||||
void onStateChanged(int64_t eventTimeNs, int32_t atomId, const HashableDimensionKey& primaryKey,
|
||||
const FieldValue& oldState, const FieldValue& newState) override;
|
||||
|
||||
MetricType getMetricType() const override {
|
||||
return METRIC_TYPE_VALUE;
|
||||
}
|
||||
|
||||
protected:
|
||||
void onMatchedLogEventInternalLocked(
|
||||
const size_t matcherIndex, const MetricDimensionKey& eventKey,
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "state/StateManager.h"
|
||||
#include "stats_util.h"
|
||||
|
||||
using google::protobuf::MessageLite;
|
||||
using std::set;
|
||||
using std::unordered_map;
|
||||
using std::vector;
|
||||
@@ -60,6 +61,20 @@ bool hasLeafNode(const FieldMatcher& matcher) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool getMetricProtoHash(const MessageLite& metric, const int64_t id, const bool hasActivation,
|
||||
const uint64_t activationHash, uint64_t& metricHash) {
|
||||
string serializedMetric;
|
||||
if (!metric.SerializeToString(&serializedMetric)) {
|
||||
ALOGE("Unable to serialize metric %lld", (long long)id);
|
||||
return false;
|
||||
}
|
||||
metricHash = Hash64(serializedMetric);
|
||||
if (hasActivation) {
|
||||
metricHash = Hash64(to_string(metricHash).append(to_string(activationHash)));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
sp<AtomMatchingTracker> createAtomMatchingTracker(const AtomMatcher& logMatcher, const int index,
|
||||
@@ -228,19 +243,31 @@ bool handleMetricWithStateLink(const FieldMatcher& stateMatcher,
|
||||
bool handleMetricActivation(
|
||||
const StatsdConfig& config, const int64_t metricId, const int metricIndex,
|
||||
const unordered_map<int64_t, int>& metricToActivationMap,
|
||||
const unordered_map<int64_t, int>& atomMatchingTrackerMap,
|
||||
const unordered_map<int64_t, int>& atomMatchingTrackerMap, bool& hasActivation,
|
||||
unordered_map<int, vector<int>>& activationAtomTrackerToMetricMap,
|
||||
unordered_map<int, vector<int>>& deactivationAtomTrackerToMetricMap,
|
||||
vector<int>& metricsWithActivation,
|
||||
unordered_map<int, shared_ptr<Activation>>& eventActivationMap,
|
||||
unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap) {
|
||||
unordered_map<int, vector<shared_ptr<Activation>>>& eventDeactivationMap,
|
||||
uint64_t& activationHash) {
|
||||
// Check if metric has an associated activation
|
||||
auto itr = metricToActivationMap.find(metricId);
|
||||
if (itr == metricToActivationMap.end()) return true;
|
||||
if (itr == metricToActivationMap.end()) {
|
||||
hasActivation = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
hasActivation = true;
|
||||
int activationIndex = itr->second;
|
||||
const MetricActivation& metricActivation = config.metric_activation(activationIndex);
|
||||
|
||||
string serializedActivation;
|
||||
if (!metricActivation.SerializeToString(&serializedActivation)) {
|
||||
ALOGE("Unable to serialize metric activation for metric %lld", (long long)metricId);
|
||||
return false;
|
||||
}
|
||||
activationHash = Hash64(serializedActivation);
|
||||
|
||||
for (int i = 0; i < metricActivation.event_activation_size(); i++) {
|
||||
const EventActivation& activation = metricActivation.event_activation(i);
|
||||
|
||||
@@ -357,12 +384,20 @@ bool initConditions(const ConfigKey& key, const StatsdConfig& config,
|
||||
}
|
||||
|
||||
bool initStates(const StatsdConfig& config, unordered_map<int64_t, int>& stateAtomIdMap,
|
||||
unordered_map<int64_t, unordered_map<int, int64_t>>& allStateGroupMaps) {
|
||||
unordered_map<int64_t, unordered_map<int, int64_t>>& allStateGroupMaps,
|
||||
map<int64_t, uint64_t>& stateProtoHashes) {
|
||||
for (int i = 0; i < config.state_size(); i++) {
|
||||
const State& state = config.state(i);
|
||||
const int64_t stateId = state.id();
|
||||
stateAtomIdMap[stateId] = state.atom_id();
|
||||
|
||||
string serializedState;
|
||||
if (!state.SerializeToString(&serializedState)) {
|
||||
ALOGE("Unable to serialize state %lld", (long long)stateId);
|
||||
return false;
|
||||
}
|
||||
stateProtoHashes[stateId] = Hash64(serializedState);
|
||||
|
||||
const StateMap& stateMap = state.map();
|
||||
for (auto group : stateMap.group()) {
|
||||
for (auto value : group.value()) {
|
||||
@@ -457,18 +492,25 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t
|
||||
}
|
||||
}
|
||||
|
||||
bool hasActivation = false;
|
||||
unordered_map<int, shared_ptr<Activation>> eventActivationMap;
|
||||
unordered_map<int, vector<shared_ptr<Activation>>> eventDeactivationMap;
|
||||
uint64_t activationHash;
|
||||
bool success = handleMetricActivation(
|
||||
config, metric.id(), metricIndex, metricToActivationMap, atomMatchingTrackerMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap);
|
||||
hasActivation, activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap, activationHash);
|
||||
if (!success) return false;
|
||||
|
||||
sp<MetricProducer> countProducer =
|
||||
new CountMetricProducer(key, metric, conditionIndex, initialConditionCache, wizard,
|
||||
timeBaseTimeNs, currentTimeNs, eventActivationMap,
|
||||
eventDeactivationMap, slicedStateAtoms, stateGroupMap);
|
||||
uint64_t metricHash;
|
||||
if (!getMetricProtoHash(metric, metric.id(), hasActivation, activationHash, metricHash)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sp<MetricProducer> countProducer = new CountMetricProducer(
|
||||
key, metric, conditionIndex, initialConditionCache, wizard, metricHash,
|
||||
timeBaseTimeNs, currentTimeNs, eventActivationMap, eventDeactivationMap,
|
||||
slicedStateAtoms, stateGroupMap);
|
||||
allMetricProducers.push_back(countProducer);
|
||||
}
|
||||
|
||||
@@ -566,19 +608,26 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t
|
||||
}
|
||||
}
|
||||
|
||||
bool hasActivation = false;
|
||||
unordered_map<int, shared_ptr<Activation>> eventActivationMap;
|
||||
unordered_map<int, vector<shared_ptr<Activation>>> eventDeactivationMap;
|
||||
uint64_t activationHash;
|
||||
bool success = handleMetricActivation(
|
||||
config, metric.id(), metricIndex, metricToActivationMap, atomMatchingTrackerMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap);
|
||||
hasActivation, activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap, activationHash);
|
||||
if (!success) return false;
|
||||
|
||||
uint64_t metricHash;
|
||||
if (!getMetricProtoHash(metric, metric.id(), hasActivation, activationHash, metricHash)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sp<MetricProducer> durationMetric = new DurationMetricProducer(
|
||||
key, metric, conditionIndex, initialConditionCache, trackerIndices[0],
|
||||
trackerIndices[1], trackerIndices[2], nesting, wizard, internalDimensions,
|
||||
timeBaseTimeNs, currentTimeNs, eventActivationMap, eventDeactivationMap,
|
||||
slicedStateAtoms, stateGroupMap);
|
||||
trackerIndices[1], trackerIndices[2], nesting, wizard, metricHash,
|
||||
internalDimensions, timeBaseTimeNs, currentTimeNs, eventActivationMap,
|
||||
eventDeactivationMap, slicedStateAtoms, stateGroupMap);
|
||||
|
||||
allMetricProducers.push_back(durationMetric);
|
||||
}
|
||||
@@ -614,17 +663,24 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t
|
||||
}
|
||||
}
|
||||
|
||||
bool hasActivation = false;
|
||||
unordered_map<int, shared_ptr<Activation>> eventActivationMap;
|
||||
unordered_map<int, vector<shared_ptr<Activation>>> eventDeactivationMap;
|
||||
uint64_t activationHash;
|
||||
bool success = handleMetricActivation(
|
||||
config, metric.id(), metricIndex, metricToActivationMap, atomMatchingTrackerMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap);
|
||||
hasActivation, activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap, activationHash);
|
||||
if (!success) return false;
|
||||
|
||||
sp<MetricProducer> eventMetric =
|
||||
new EventMetricProducer(key, metric, conditionIndex, initialConditionCache, wizard,
|
||||
timeBaseTimeNs, eventActivationMap, eventDeactivationMap);
|
||||
uint64_t metricHash;
|
||||
if (!getMetricProtoHash(metric, metric.id(), hasActivation, activationHash, metricHash)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sp<MetricProducer> eventMetric = new EventMetricProducer(
|
||||
key, metric, conditionIndex, initialConditionCache, wizard, metricHash,
|
||||
timeBaseTimeNs, eventActivationMap, eventDeactivationMap);
|
||||
|
||||
allMetricProducers.push_back(eventMetric);
|
||||
}
|
||||
@@ -703,18 +759,26 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t
|
||||
}
|
||||
}
|
||||
|
||||
bool hasActivation = false;
|
||||
unordered_map<int, shared_ptr<Activation>> eventActivationMap;
|
||||
unordered_map<int, vector<shared_ptr<Activation>>> eventDeactivationMap;
|
||||
uint64_t activationHash;
|
||||
bool success = handleMetricActivation(
|
||||
config, metric.id(), metricIndex, metricToActivationMap, atomMatchingTrackerMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap);
|
||||
hasActivation, activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap, activationHash);
|
||||
if (!success) return false;
|
||||
|
||||
uint64_t metricHash;
|
||||
if (!getMetricProtoHash(metric, metric.id(), hasActivation, activationHash, metricHash)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sp<MetricProducer> valueProducer = new ValueMetricProducer(
|
||||
key, metric, conditionIndex, initialConditionCache, wizard, trackerIndex,
|
||||
matcherWizard, pullTagId, timeBaseTimeNs, currentTimeNs, pullerManager,
|
||||
eventActivationMap, eventDeactivationMap, slicedStateAtoms, stateGroupMap);
|
||||
key, metric, conditionIndex, initialConditionCache, wizard, metricHash,
|
||||
trackerIndex, matcherWizard, pullTagId, timeBaseTimeNs, currentTimeNs,
|
||||
pullerManager, eventActivationMap, eventDeactivationMap, slicedStateAtoms,
|
||||
stateGroupMap);
|
||||
allMetricProducers.push_back(valueProducer);
|
||||
}
|
||||
|
||||
@@ -799,18 +863,25 @@ bool initMetrics(const ConfigKey& key, const StatsdConfig& config, const int64_t
|
||||
}
|
||||
}
|
||||
|
||||
bool hasActivation = false;
|
||||
unordered_map<int, shared_ptr<Activation>> eventActivationMap;
|
||||
unordered_map<int, vector<shared_ptr<Activation>>> eventDeactivationMap;
|
||||
uint64_t activationHash;
|
||||
bool success = handleMetricActivation(
|
||||
config, metric.id(), metricIndex, metricToActivationMap, atomMatchingTrackerMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap);
|
||||
hasActivation, activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap,
|
||||
metricsWithActivation, eventActivationMap, eventDeactivationMap, activationHash);
|
||||
if (!success) return false;
|
||||
|
||||
uint64_t metricHash;
|
||||
if (!getMetricProtoHash(metric, metric.id(), hasActivation, activationHash, metricHash)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
sp<MetricProducer> gaugeProducer = new GaugeMetricProducer(
|
||||
key, metric, conditionIndex, initialConditionCache, wizard, trackerIndex,
|
||||
matcherWizard, pullTagId, triggerAtomId, atomTagId, timeBaseTimeNs, currentTimeNs,
|
||||
pullerManager, eventActivationMap, eventDeactivationMap);
|
||||
key, metric, conditionIndex, initialConditionCache, wizard, metricHash,
|
||||
trackerIndex, matcherWizard, pullTagId, triggerAtomId, atomTagId, timeBaseTimeNs,
|
||||
currentTimeNs, pullerManager, eventActivationMap, eventDeactivationMap);
|
||||
allMetricProducers.push_back(gaugeProducer);
|
||||
}
|
||||
for (int i = 0; i < config.no_report_metric_size(); ++i) {
|
||||
@@ -945,6 +1016,7 @@ bool initStatsdConfig(const ConfigKey& key, const StatsdConfig& config, const sp
|
||||
vector<sp<ConditionTracker>>& allConditionTrackers,
|
||||
unordered_map<int64_t, int>& conditionTrackerMap,
|
||||
vector<sp<MetricProducer>>& allMetricProducers,
|
||||
unordered_map<int64_t, int>& metricProducerMap,
|
||||
vector<sp<AnomalyTracker>>& allAnomalyTrackers,
|
||||
vector<sp<AlarmTracker>>& allPeriodicAlarmTrackers,
|
||||
unordered_map<int, std::vector<int>>& conditionToMetricMap,
|
||||
@@ -953,9 +1025,9 @@ bool initStatsdConfig(const ConfigKey& key, const StatsdConfig& config, const sp
|
||||
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) {
|
||||
vector<int>& metricsWithActivation, map<int64_t, uint64_t>& stateProtoHashes,
|
||||
set<int64_t>& noReportMetricIds) {
|
||||
vector<ConditionState> initialConditionCache;
|
||||
unordered_map<int64_t, int> metricProducerMap;
|
||||
unordered_map<int64_t, int> stateAtomIdMap;
|
||||
unordered_map<int64_t, unordered_map<int, int64_t>> allStateGroupMaps;
|
||||
|
||||
@@ -972,7 +1044,7 @@ bool initStatsdConfig(const ConfigKey& key, const StatsdConfig& config, const sp
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!initStates(config, stateAtomIdMap, allStateGroupMaps)) {
|
||||
if (!initStates(config, stateAtomIdMap, allStateGroupMaps, stateProtoHashes)) {
|
||||
ALOGE("initStates failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -98,8 +98,10 @@ bool initConditions(const ConfigKey& key, const StatsdConfig& config,
|
||||
// [stateAtomIdMap]: this map should contain the mapping from state ids to atom ids
|
||||
// [allStateGroupMaps]: this map should contain the mapping from states ids and state
|
||||
// values to state group ids for all states
|
||||
// [stateProtoHashes]: contains a map of state id to the hash of the State proto from the config
|
||||
bool initStates(const StatsdConfig& config, unordered_map<int64_t, int>& stateAtomIdMap,
|
||||
unordered_map<int64_t, unordered_map<int, int64_t>>& allStateGroupMaps);
|
||||
unordered_map<int64_t, unordered_map<int, int64_t>>& allStateGroupMaps,
|
||||
std::map<int64_t, uint64_t>& stateProtoHashes);
|
||||
|
||||
// Initialize MetricProducers.
|
||||
// input:
|
||||
@@ -146,6 +148,7 @@ bool initStatsdConfig(const ConfigKey& key, const StatsdConfig& config, const sp
|
||||
std::vector<sp<ConditionTracker>>& allConditionTrackers,
|
||||
std::unordered_map<int64_t, int>& conditionTrackerMap,
|
||||
std::vector<sp<MetricProducer>>& allMetricProducers,
|
||||
std::unordered_map<int64_t, int>& metricProducerMap,
|
||||
vector<sp<AnomalyTracker>>& allAnomalyTrackers,
|
||||
vector<sp<AlarmTracker>>& allPeriodicAlarmTrackers,
|
||||
std::unordered_map<int, std::vector<int>>& conditionToMetricMap,
|
||||
@@ -154,7 +157,9 @@ bool initStatsdConfig(const ConfigKey& key, const StatsdConfig& config, const sp
|
||||
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);
|
||||
vector<int>& metricsWithActivation,
|
||||
std::map<int64_t, uint64_t>& stateProtoHashes,
|
||||
std::set<int64_t>& noReportMetricIds);
|
||||
|
||||
} // namespace statsd
|
||||
} // namespace os
|
||||
|
||||
@@ -41,6 +41,7 @@ namespace statsd {
|
||||
|
||||
namespace {
|
||||
const ConfigKey kConfigKey(0, 12345);
|
||||
const uint64_t protoHash = 0x1234567890;
|
||||
|
||||
void makeLogEvent(LogEvent* logEvent, int64_t timestampNs, int atomId) {
|
||||
AStatsEvent* statsEvent = AStatsEvent_obtain();
|
||||
@@ -75,7 +76,7 @@ TEST(CountMetricProducerTest, TestFirstBucket) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
|
||||
CountMetricProducer countProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, 5, 600 * NS_PER_SEC + NS_PER_SEC / 2);
|
||||
wizard, protoHash, 5, 600 * NS_PER_SEC + NS_PER_SEC / 2);
|
||||
EXPECT_EQ(600500000000, countProducer.mCurrentBucketStartTimeNs);
|
||||
EXPECT_EQ(10, countProducer.mCurrentBucketNum);
|
||||
EXPECT_EQ(660000000005, countProducer.getCurrentBucketEndTimeNs());
|
||||
@@ -95,7 +96,7 @@ TEST(CountMetricProducerTest, TestNonDimensionalEvents) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
|
||||
CountMetricProducer countProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, bucketStartTimeNs, bucketStartTimeNs);
|
||||
wizard, protoHash, bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
// 2 events in bucket 1.
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -158,7 +159,7 @@ TEST(CountMetricProducerTest, TestEventsWithNonSlicedCondition) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
|
||||
CountMetricProducer countProducer(kConfigKey, metric, 0, {ConditionState::kUnknown}, wizard,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
protoHash, bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
countProducer.onConditionChanged(true, bucketStartTimeNs);
|
||||
|
||||
@@ -226,8 +227,8 @@ TEST(CountMetricProducerTest, TestEventsWithSlicedCondition) {
|
||||
EXPECT_CALL(*wizard, query(_, key2, _)).WillOnce(Return(ConditionState::kTrue));
|
||||
|
||||
CountMetricProducer countProducer(kConfigKey, metric, 0 /*condition tracker index*/,
|
||||
{ConditionState::kUnknown}, wizard, bucketStartTimeNs,
|
||||
bucketStartTimeNs);
|
||||
{ConditionState::kUnknown}, wizard, protoHash,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
countProducer.onMatchedLogEvent(1 /*log matcher index*/, event1);
|
||||
countProducer.flushIfNeededLocked(bucketStartTimeNs + 1);
|
||||
@@ -265,7 +266,7 @@ TEST_P(CountMetricProducerTest_PartialBucket, TestSplitInCurrentBucket) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
|
||||
CountMetricProducer countProducer(kConfigKey, metric, -1 /* no condition */, {}, wizard,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
protoHash, bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
sp<AnomalyTracker> anomalyTracker = countProducer.addAnomalyTracker(alert, alarmMonitor);
|
||||
EXPECT_TRUE(anomalyTracker != nullptr);
|
||||
@@ -332,7 +333,7 @@ TEST_P(CountMetricProducerTest_PartialBucket, TestSplitInNextBucket) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
|
||||
CountMetricProducer countProducer(kConfigKey, metric, -1 /* no condition */, {}, wizard,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
protoHash, bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
// Bucket is flushed yet.
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -397,7 +398,7 @@ TEST(CountMetricProducerTest, TestAnomalyDetectionUnSliced) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
|
||||
CountMetricProducer countProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, bucketStartTimeNs, bucketStartTimeNs);
|
||||
wizard, protoHash, bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
sp<AnomalyTracker> anomalyTracker = countProducer.addAnomalyTracker(alert, alarmMonitor);
|
||||
|
||||
@@ -459,7 +460,7 @@ TEST(CountMetricProducerTest, TestOneWeekTimeUnit) {
|
||||
int64_t fiveWeeksNs = 5 * 7 * oneDayNs;
|
||||
|
||||
CountMetricProducer countProducer(kConfigKey, metric, -1 /* meaning no condition */, {}, wizard,
|
||||
oneDayNs, fiveWeeksNs);
|
||||
protoHash, oneDayNs, fiveWeeksNs);
|
||||
|
||||
int64_t fiveWeeksOneDayNs = fiveWeeksNs + oneDayNs;
|
||||
|
||||
|
||||
@@ -45,6 +45,7 @@ namespace statsd {
|
||||
namespace {
|
||||
|
||||
const ConfigKey kConfigKey(0, 12345);
|
||||
const uint64_t protoHash = 0x1234567890;
|
||||
void makeLogEvent(LogEvent* logEvent, int64_t timestampNs, int atomId) {
|
||||
AStatsEvent* statsEvent = AStatsEvent_obtain();
|
||||
AStatsEvent_setAtomId(statsEvent, atomId);
|
||||
@@ -71,10 +72,10 @@ TEST(DurationMetricTrackerTest, TestFirstBucket) {
|
||||
|
||||
FieldMatcher dimensions;
|
||||
|
||||
DurationMetricProducer durationProducer(kConfigKey, metric, -1 /*no condition*/, {},
|
||||
1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard,
|
||||
dimensions, 5, 600 * NS_PER_SEC + NS_PER_SEC / 2);
|
||||
DurationMetricProducer durationProducer(
|
||||
kConfigKey, metric, -1 /*no condition*/, {}, 1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard, protoHash, dimensions, 5,
|
||||
600 * NS_PER_SEC + NS_PER_SEC / 2);
|
||||
|
||||
EXPECT_EQ(600500000000, durationProducer.mCurrentBucketStartTimeNs);
|
||||
EXPECT_EQ(10, durationProducer.mCurrentBucketNum);
|
||||
@@ -99,10 +100,10 @@ TEST(DurationMetricTrackerTest, TestNoCondition) {
|
||||
|
||||
FieldMatcher dimensions;
|
||||
|
||||
DurationMetricProducer durationProducer(kConfigKey, metric, -1 /*no condition*/, {},
|
||||
1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard,
|
||||
dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
DurationMetricProducer durationProducer(
|
||||
kConfigKey, metric, -1 /*no condition*/, {}, 1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard, protoHash, dimensions,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
durationProducer.onMatchedLogEvent(1 /* start index*/, event1);
|
||||
durationProducer.onMatchedLogEvent(2 /* stop index*/, event2);
|
||||
@@ -145,7 +146,7 @@ TEST(DurationMetricTrackerTest, TestNonSlicedCondition) {
|
||||
DurationMetricProducer durationProducer(
|
||||
kConfigKey, metric, 0 /* condition index */, {ConditionState::kUnknown},
|
||||
1 /* start index */, 2 /* stop index */, 3 /* stop_all index */, false /*nesting*/,
|
||||
wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
wizard, protoHash, dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
durationProducer.mCondition = ConditionState::kFalse;
|
||||
|
||||
EXPECT_FALSE(durationProducer.mCondition);
|
||||
@@ -195,7 +196,7 @@ TEST(DurationMetricTrackerTest, TestNonSlicedConditionUnknownState) {
|
||||
DurationMetricProducer durationProducer(
|
||||
kConfigKey, metric, 0 /* condition index */, {ConditionState::kUnknown},
|
||||
1 /* start index */, 2 /* stop index */, 3 /* stop_all index */, false /*nesting*/,
|
||||
wizard, dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
wizard, protoHash, dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
EXPECT_EQ(ConditionState::kUnknown, durationProducer.mCondition);
|
||||
EXPECT_FALSE(durationProducer.isConditionSliced());
|
||||
@@ -238,10 +239,10 @@ TEST_P(DurationMetricProducerTest_PartialBucket, TestSumDuration) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
FieldMatcher dimensions;
|
||||
|
||||
DurationMetricProducer durationProducer(kConfigKey, metric, -1 /* no condition */, {},
|
||||
1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard,
|
||||
dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
DurationMetricProducer durationProducer(
|
||||
kConfigKey, metric, -1 /* no condition */, {}, 1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard, protoHash, dimensions,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
int64_t startTimeNs = bucketStartTimeNs + 1 * NS_PER_SEC;
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -301,10 +302,10 @@ TEST_P(DurationMetricProducerTest_PartialBucket, TestSumDurationWithSplitInFollo
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
FieldMatcher dimensions;
|
||||
|
||||
DurationMetricProducer durationProducer(kConfigKey, metric, -1 /* no condition */, {},
|
||||
1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard,
|
||||
dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
DurationMetricProducer durationProducer(
|
||||
kConfigKey, metric, -1 /* no condition */, {}, 1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard, protoHash, dimensions,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
int64_t startTimeNs = bucketStartTimeNs + 1 * NS_PER_SEC;
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -365,10 +366,10 @@ TEST_P(DurationMetricProducerTest_PartialBucket, TestSumDurationAnomaly) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
FieldMatcher dimensions;
|
||||
|
||||
DurationMetricProducer durationProducer(kConfigKey, metric, -1 /* no condition */, {},
|
||||
1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard,
|
||||
dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
DurationMetricProducer durationProducer(
|
||||
kConfigKey, metric, -1 /* no condition */, {}, 1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard, protoHash, dimensions,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
sp<AnomalyTracker> anomalyTracker = durationProducer.addAnomalyTracker(alert, alarmMonitor);
|
||||
EXPECT_TRUE(anomalyTracker != nullptr);
|
||||
@@ -411,10 +412,10 @@ TEST_P(DurationMetricProducerTest_PartialBucket, TestMaxDuration) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
FieldMatcher dimensions;
|
||||
|
||||
DurationMetricProducer durationProducer(kConfigKey, metric, -1 /* no condition */, {},
|
||||
1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard,
|
||||
dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
DurationMetricProducer durationProducer(
|
||||
kConfigKey, metric, -1 /* no condition */, {}, 1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard, protoHash, dimensions,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
int64_t startTimeNs = bucketStartTimeNs + 1;
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -465,10 +466,10 @@ TEST_P(DurationMetricProducerTest_PartialBucket, TestMaxDurationWithSplitInNextB
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
FieldMatcher dimensions;
|
||||
|
||||
DurationMetricProducer durationProducer(kConfigKey, metric, -1 /* no condition */, {},
|
||||
1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard,
|
||||
dimensions, bucketStartTimeNs, bucketStartTimeNs);
|
||||
DurationMetricProducer durationProducer(
|
||||
kConfigKey, metric, -1 /* no condition */, {}, 1 /* start index */, 2 /* stop index */,
|
||||
3 /* stop_all index */, false /*nesting*/, wizard, protoHash, dimensions,
|
||||
bucketStartTimeNs, bucketStartTimeNs);
|
||||
|
||||
int64_t startTimeNs = bucketStartTimeNs + 1;
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
|
||||
@@ -36,9 +36,11 @@ namespace android {
|
||||
namespace os {
|
||||
namespace statsd {
|
||||
|
||||
const ConfigKey kConfigKey(0, 12345);
|
||||
|
||||
namespace {
|
||||
const ConfigKey kConfigKey(0, 12345);
|
||||
const uint64_t protoHash = 0x1234567890;
|
||||
|
||||
void makeLogEvent(LogEvent* logEvent, int32_t atomId, int64_t timestampNs, string str) {
|
||||
AStatsEvent* statsEvent = AStatsEvent_obtain();
|
||||
AStatsEvent_setAtomId(statsEvent, atomId);
|
||||
@@ -66,7 +68,7 @@ TEST(EventMetricProducerTest, TestNoCondition) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
|
||||
EventMetricProducer eventProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, bucketStartTimeNs);
|
||||
wizard, protoHash, bucketStartTimeNs);
|
||||
|
||||
eventProducer.onMatchedLogEvent(1 /*matcher index*/, event1);
|
||||
eventProducer.onMatchedLogEvent(1 /*matcher index*/, event2);
|
||||
@@ -102,7 +104,8 @@ TEST(EventMetricProducerTest, TestEventsWithNonSlicedCondition) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
|
||||
EventMetricProducer eventProducer(kConfigKey, metric, 0 /*condition index*/,
|
||||
{ConditionState::kUnknown}, wizard, bucketStartTimeNs);
|
||||
{ConditionState::kUnknown}, wizard, protoHash,
|
||||
bucketStartTimeNs);
|
||||
|
||||
eventProducer.onConditionChanged(true /*condition*/, bucketStartTimeNs);
|
||||
eventProducer.onMatchedLogEvent(1 /*matcher index*/, event1);
|
||||
@@ -157,7 +160,8 @@ TEST(EventMetricProducerTest, TestEventsWithSlicedCondition) {
|
||||
EXPECT_CALL(*wizard, query(_, key2, _)).WillOnce(Return(ConditionState::kTrue));
|
||||
|
||||
EventMetricProducer eventProducer(kConfigKey, metric, 0 /*condition index*/,
|
||||
{ConditionState::kUnknown}, wizard, bucketStartTimeNs);
|
||||
{ConditionState::kUnknown}, wizard, protoHash,
|
||||
bucketStartTimeNs);
|
||||
|
||||
eventProducer.onMatchedLogEvent(1 /*matcher index*/, event1);
|
||||
eventProducer.onMatchedLogEvent(1 /*matcher index*/, event2);
|
||||
|
||||
@@ -47,6 +47,7 @@ namespace {
|
||||
const ConfigKey kConfigKey(0, 12345);
|
||||
const int tagId = 1;
|
||||
const int64_t metricId = 123;
|
||||
const uint64_t protoHash = 0x123456789;
|
||||
const int logEventMatcherIndex = 0;
|
||||
const int64_t bucketStartTimeNs = 10 * NS_PER_SEC;
|
||||
const int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
|
||||
@@ -101,8 +102,9 @@ TEST(GaugeMetricProducerTest, TestFirstBucket) {
|
||||
// statsd started long ago.
|
||||
// The metric starts in the middle of the bucket
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, -1, -1,
|
||||
tagId, 5, 600 * NS_PER_SEC + NS_PER_SEC / 2, pullerManager);
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
-1, -1, tagId, 5, 600 * NS_PER_SEC + NS_PER_SEC / 2,
|
||||
pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
EXPECT_EQ(600500000000, gaugeProducer.mCurrentBucketStartTimeNs);
|
||||
@@ -139,8 +141,9 @@ TEST(GaugeMetricProducerTest, TestPulledEventsNoCondition) {
|
||||
}));
|
||||
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, tagId, -1,
|
||||
tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
vector<shared_ptr<LogEvent>> allData;
|
||||
@@ -213,7 +216,7 @@ TEST_P(GaugeMetricProducerTest_PartialBucket, TestPushedEvents) {
|
||||
createEventMatcherWizard(tagId, logEventMatcherIndex);
|
||||
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard,
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
-1 /* -1 means no pulling */, -1, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
@@ -306,8 +309,9 @@ TEST_P(GaugeMetricProducerTest_PartialBucket, TestPulled) {
|
||||
}));
|
||||
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, tagId, -1,
|
||||
tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
vector<shared_ptr<LogEvent>> allData;
|
||||
@@ -373,8 +377,9 @@ TEST(GaugeMetricProducerTest, TestPulledWithAppUpgradeDisabled) {
|
||||
.WillOnce(Return(false));
|
||||
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, tagId, -1,
|
||||
tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
vector<shared_ptr<LogEvent>> allData;
|
||||
@@ -426,9 +431,9 @@ TEST(GaugeMetricProducerTest, TestPulledEventsWithCondition) {
|
||||
}));
|
||||
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, 0 /*condition index*/,
|
||||
{ConditionState::kUnknown}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, tagId, -1, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager);
|
||||
{ConditionState::kUnknown}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId, -1, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
gaugeProducer.onConditionChanged(true, conditionChangeNs);
|
||||
@@ -509,9 +514,9 @@ TEST(GaugeMetricProducerTest, TestPulledEventsWithSlicedCondition) {
|
||||
}));
|
||||
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, 0 /*condition index*/,
|
||||
{ConditionState::kUnknown}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, tagId, -1, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager);
|
||||
{ConditionState::kUnknown}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId, -1, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
gaugeProducer.onSlicedConditionMayChange(true, sliceConditionChangeNs);
|
||||
@@ -554,8 +559,9 @@ TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) {
|
||||
createEventMatcherWizard(tagId, logEventMatcherIndex);
|
||||
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, tagId, -1,
|
||||
tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
tagId, -1, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
Alert alert;
|
||||
@@ -649,8 +655,8 @@ TEST(GaugeMetricProducerTest, TestPullOnTrigger) {
|
||||
|
||||
int triggerId = 5;
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
tagId, triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
@@ -724,8 +730,8 @@ TEST(GaugeMetricProducerTest, TestRemoveDimensionInOutput) {
|
||||
|
||||
int triggerId = 5;
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
tagId, triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
@@ -783,8 +789,8 @@ TEST(GaugeMetricProducerTest_BucketDrop, TestBucketDropWhenBucketTooSmall) {
|
||||
|
||||
int triggerId = 5;
|
||||
GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
tagId, triggerId, tagId, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
gaugeProducer.prepareFirstBucket();
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ namespace {
|
||||
const ConfigKey kConfigKey(0, 12345);
|
||||
const int tagId = 1;
|
||||
const int64_t metricId = 123;
|
||||
const uint64_t protoHash = 0x1234567890;
|
||||
const int logEventMatcherIndex = 0;
|
||||
const int64_t bucketStartTimeNs = 10000000000;
|
||||
const int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000LL;
|
||||
@@ -108,8 +109,8 @@ public:
|
||||
|
||||
sp<ValueMetricProducer> valueProducer =
|
||||
new ValueMetricProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer->prepareFirstBucket();
|
||||
return valueProducer;
|
||||
}
|
||||
@@ -127,7 +128,7 @@ public:
|
||||
|
||||
sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
|
||||
kConfigKey, metric, 0 /*condition index*/, {ConditionState::kUnknown}, wizard,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId, bucketStartTimeNs,
|
||||
protoHash, logEventMatcherIndex, eventMatcherWizard, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager);
|
||||
valueProducer->prepareFirstBucket();
|
||||
valueProducer->mCondition = conditionAfterFirstBucketPrepared;
|
||||
@@ -147,9 +148,9 @@ public:
|
||||
.WillRepeatedly(Return());
|
||||
|
||||
sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
|
||||
kConfigKey, metric, -1 /* no condition */, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager, {},
|
||||
{}, slicedStateAtoms, stateGroupMap);
|
||||
kConfigKey, metric, -1 /* no condition */, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager, {}, {}, slicedStateAtoms, stateGroupMap);
|
||||
valueProducer->prepareFirstBucket();
|
||||
return valueProducer;
|
||||
}
|
||||
@@ -169,8 +170,9 @@ public:
|
||||
|
||||
sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
|
||||
kConfigKey, metric, 0 /* condition tracker index */, {ConditionState::kUnknown},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager, {}, {}, slicedStateAtoms, stateGroupMap);
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager, {}, {}, slicedStateAtoms,
|
||||
stateGroupMap);
|
||||
valueProducer->prepareFirstBucket();
|
||||
valueProducer->mCondition = conditionAfterFirstBucketPrepared;
|
||||
return valueProducer;
|
||||
@@ -228,8 +230,8 @@ TEST(ValueMetricProducerTest, TestCalcPreviousBucketEndTime) {
|
||||
// statsd started long ago.
|
||||
// The metric starts in the middle of the bucket
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
startTimeBase, 22, pullerManager);
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
-1, startTimeBase, 22, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
EXPECT_EQ(startTimeBase, valueProducer.calcPreviousBucketEndTime(60 * NS_PER_SEC + 10));
|
||||
@@ -254,8 +256,8 @@ TEST(ValueMetricProducerTest, TestFirstBucket) {
|
||||
// statsd started long ago.
|
||||
// The metric starts in the middle of the bucket
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard, -1, 5,
|
||||
600 * NS_PER_SEC + NS_PER_SEC / 2, pullerManager);
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
-1, 5, 600 * NS_PER_SEC + NS_PER_SEC / 2, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
EXPECT_EQ(600500000000, valueProducer.mCurrentBucketStartTimeNs);
|
||||
@@ -414,9 +416,10 @@ TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) {
|
||||
return true;
|
||||
}));
|
||||
|
||||
sp<ValueMetricProducer> valueProducer = new ValueMetricProducer(
|
||||
kConfigKey, metric, -1 /*-1 meaning no condition*/, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, tagId, bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
sp<ValueMetricProducer> valueProducer =
|
||||
new ValueMetricProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {}, wizard,
|
||||
protoHash, logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer->prepareFirstBucket();
|
||||
|
||||
vector<shared_ptr<LogEvent>> allData;
|
||||
@@ -679,9 +682,9 @@ TEST_P(ValueMetricProducerTest_PartialBucket, TestPushedEvents) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -749,9 +752,9 @@ TEST_P(ValueMetricProducerTest_PartialBucket, TestPulledValue) {
|
||||
return true;
|
||||
}));
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
vector<shared_ptr<LogEvent>> allData;
|
||||
@@ -797,9 +800,9 @@ TEST(ValueMetricProducerTest, TestPulledWithAppUpgradeDisabled) {
|
||||
EXPECT_CALL(*pullerManager, Pull(tagId, kConfigKey, bucketStartTimeNs, _))
|
||||
.WillOnce(Return(true));
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
vector<shared_ptr<LogEvent>> allData;
|
||||
@@ -869,9 +872,9 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithoutCondition) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -911,7 +914,7 @@ TEST(ValueMetricProducerTest, TestPushedEventsWithCondition) {
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, 0, {ConditionState::kUnknown}, wizard,
|
||||
logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
protoHash, logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
valueProducer.mCondition = ConditionState::kFalse;
|
||||
@@ -978,7 +981,7 @@ TEST(ValueMetricProducerTest, TestAnomalyDetection) {
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, {},
|
||||
wizard, logEventMatcherIndex, eventMatcherWizard,
|
||||
wizard, protoHash, logEventMatcherIndex, eventMatcherWizard,
|
||||
-1 /*not pulled*/, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
@@ -1321,9 +1324,9 @@ TEST(ValueMetricProducerTest, TestPushedAggregateMin) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -1361,9 +1364,9 @@ TEST(ValueMetricProducerTest, TestPushedAggregateMax) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -1400,9 +1403,9 @@ TEST(ValueMetricProducerTest, TestPushedAggregateAvg) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -1444,9 +1447,9 @@ TEST(ValueMetricProducerTest, TestPushedAggregateSum) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -1484,9 +1487,9 @@ TEST(ValueMetricProducerTest, TestSkipZeroDiffOutput) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -1553,9 +1556,9 @@ TEST(ValueMetricProducerTest, TestSkipZeroDiffOutputMultiValue) {
|
||||
sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
|
||||
sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, -1, bucketStartTimeNs, bucketStartTimeNs,
|
||||
pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, -1,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
LogEvent event1(/*uid=*/0, /*pid=*/0);
|
||||
@@ -2089,7 +2092,7 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate) {
|
||||
EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, kConfigKey, _)).WillRepeatedly(Return());
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, 0, {ConditionState::kUnknown}, wizard,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
protoHash, logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
bucket2StartTimeNs, bucket2StartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
valueProducer.mCondition = ConditionState::kFalse;
|
||||
@@ -2922,9 +2925,9 @@ TEST(ValueMetricProducerTest, TestPullNeededFastDump) {
|
||||
return true;
|
||||
}));
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
ProtoOutputStream output;
|
||||
@@ -2956,9 +2959,9 @@ TEST(ValueMetricProducerTest, TestFastDumpWithoutCurrentBucket) {
|
||||
return true;
|
||||
}));
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
vector<shared_ptr<LogEvent>> allData;
|
||||
@@ -3005,9 +3008,9 @@ TEST(ValueMetricProducerTest, TestPullNeededNoTimeConstraints) {
|
||||
return true;
|
||||
}));
|
||||
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, logEventMatcherIndex,
|
||||
eventMatcherWizard, tagId, bucketStartTimeNs,
|
||||
bucketStartTimeNs, pullerManager);
|
||||
ValueMetricProducer valueProducer(kConfigKey, metric, -1, {}, wizard, protoHash,
|
||||
logEventMatcherIndex, eventMatcherWizard, tagId,
|
||||
bucketStartTimeNs, bucketStartTimeNs, pullerManager);
|
||||
valueProducer.prepareFirstBucket();
|
||||
|
||||
ProtoOutputStream output;
|
||||
|
||||
@@ -58,6 +58,7 @@ unordered_map<int64_t, int> oldAtomMatchingTrackerMap;
|
||||
vector<sp<ConditionTracker>> oldConditionTrackers;
|
||||
unordered_map<int64_t, int> oldConditionTrackerMap;
|
||||
vector<sp<MetricProducer>> oldMetricProducers;
|
||||
unordered_map<int64_t, int> oldMetricProducerMap;
|
||||
std::vector<sp<AnomalyTracker>> oldAnomalyTrackers;
|
||||
std::vector<sp<AlarmTracker>> oldAlarmTrackers;
|
||||
unordered_map<int, std::vector<int>> conditionToMetricMap;
|
||||
@@ -67,6 +68,7 @@ unordered_map<int, std::vector<int>> activationAtomTrackerToMetricMap;
|
||||
unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
|
||||
unordered_map<int64_t, int> alertTrackerMap;
|
||||
vector<int> metricsWithActivation;
|
||||
map<int64_t, uint64_t> oldStateHashes;
|
||||
std::set<int64_t> noReportMetricIds;
|
||||
|
||||
class ConfigUpdateTest : public ::testing::Test {
|
||||
@@ -81,6 +83,7 @@ public:
|
||||
oldConditionTrackers.clear();
|
||||
oldConditionTrackerMap.clear();
|
||||
oldMetricProducers.clear();
|
||||
oldMetricProducerMap.clear();
|
||||
oldAnomalyTrackers.clear();
|
||||
oldAlarmTrackers.clear();
|
||||
conditionToMetricMap.clear();
|
||||
@@ -90,6 +93,7 @@ public:
|
||||
deactivationAtomTrackerToMetricMap.clear();
|
||||
alertTrackerMap.clear();
|
||||
metricsWithActivation.clear();
|
||||
oldStateHashes.clear();
|
||||
noReportMetricIds.clear();
|
||||
}
|
||||
};
|
||||
@@ -98,10 +102,11 @@ bool initConfig(const StatsdConfig& config) {
|
||||
return initStatsdConfig(
|
||||
key, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseNs, timeBaseNs, allTagIds, oldAtomMatchingTrackers, oldAtomMatchingTrackerMap,
|
||||
oldConditionTrackers, oldConditionTrackerMap, oldMetricProducers, oldAnomalyTrackers,
|
||||
oldAlarmTrackers, conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap, alertTrackerMap,
|
||||
metricsWithActivation, noReportMetricIds);
|
||||
oldConditionTrackers, oldConditionTrackerMap, oldMetricProducers, oldMetricProducerMap,
|
||||
oldAnomalyTrackers, oldAlarmTrackers, conditionToMetricMap, trackerToMetricMap,
|
||||
trackerToConditionMap, activationAtomTrackerToMetricMap,
|
||||
deactivationAtomTrackerToMetricMap, alertTrackerMap, metricsWithActivation,
|
||||
oldStateHashes, noReportMetricIds);
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
|
||||
#include "src/metrics/parsing_utils/metrics_manager_util.h"
|
||||
|
||||
#include <gmock/gmock.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <private/android_filesystem_config.h>
|
||||
#include <stdio.h>
|
||||
@@ -388,6 +389,7 @@ TEST(MetricsManagerTest, TestInitialConditions) {
|
||||
vector<sp<ConditionTracker>> allConditionTrackers;
|
||||
unordered_map<int64_t, int> conditionTrackerMap;
|
||||
vector<sp<MetricProducer>> allMetricProducers;
|
||||
unordered_map<int64_t, int> metricProducerMap;
|
||||
std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
|
||||
std::vector<sp<AlarmTracker>> allAlarmTrackers;
|
||||
unordered_map<int, std::vector<int>> conditionToMetricMap;
|
||||
@@ -397,15 +399,17 @@ TEST(MetricsManagerTest, TestInitialConditions) {
|
||||
unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
|
||||
unordered_map<int64_t, int> alertTrackerMap;
|
||||
vector<int> metricsWithActivation;
|
||||
map<int64_t, uint64_t> stateProtoHashes;
|
||||
std::set<int64_t> noReportMetricIds;
|
||||
|
||||
EXPECT_TRUE(initStatsdConfig(
|
||||
kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseSec, timeBaseSec, allTagIds, allAtomMatchingTrackers, atomMatchingTrackerMap,
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, allAnomalyTrackers,
|
||||
allAlarmTrackers, conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap, alertTrackerMap,
|
||||
metricsWithActivation, noReportMetricIds));
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, metricProducerMap,
|
||||
allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap, trackerToMetricMap,
|
||||
trackerToConditionMap, activationAtomTrackerToMetricMap,
|
||||
deactivationAtomTrackerToMetricMap, alertTrackerMap, metricsWithActivation,
|
||||
stateProtoHashes, noReportMetricIds));
|
||||
ASSERT_EQ(4u, allMetricProducers.size());
|
||||
ASSERT_EQ(5u, allConditionTrackers.size());
|
||||
|
||||
@@ -438,6 +442,7 @@ TEST(MetricsManagerTest, TestGoodConfig) {
|
||||
vector<sp<ConditionTracker>> allConditionTrackers;
|
||||
unordered_map<int64_t, int> conditionTrackerMap;
|
||||
vector<sp<MetricProducer>> allMetricProducers;
|
||||
unordered_map<int64_t, int> metricProducerMap;
|
||||
std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
|
||||
std::vector<sp<AlarmTracker>> allAlarmTrackers;
|
||||
unordered_map<int, std::vector<int>> conditionToMetricMap;
|
||||
@@ -447,16 +452,19 @@ TEST(MetricsManagerTest, TestGoodConfig) {
|
||||
unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
|
||||
unordered_map<int64_t, int> alertTrackerMap;
|
||||
vector<int> metricsWithActivation;
|
||||
map<int64_t, uint64_t> stateProtoHashes;
|
||||
std::set<int64_t> noReportMetricIds;
|
||||
|
||||
EXPECT_TRUE(initStatsdConfig(
|
||||
kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseSec, timeBaseSec, allTagIds, allAtomMatchingTrackers, atomMatchingTrackerMap,
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, allAnomalyTrackers,
|
||||
allAlarmTrackers, conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap, alertTrackerMap,
|
||||
metricsWithActivation, noReportMetricIds));
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, metricProducerMap,
|
||||
allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap, trackerToMetricMap,
|
||||
trackerToConditionMap, activationAtomTrackerToMetricMap,
|
||||
deactivationAtomTrackerToMetricMap, alertTrackerMap, metricsWithActivation,
|
||||
stateProtoHashes, noReportMetricIds));
|
||||
ASSERT_EQ(1u, allMetricProducers.size());
|
||||
EXPECT_THAT(metricProducerMap, UnorderedElementsAre(Pair(config.count_metric(0).id(), 0)));
|
||||
ASSERT_EQ(1u, allAnomalyTrackers.size());
|
||||
ASSERT_EQ(1u, noReportMetricIds.size());
|
||||
ASSERT_EQ(1u, alertTrackerMap.size());
|
||||
@@ -476,6 +484,7 @@ TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
|
||||
vector<sp<ConditionTracker>> allConditionTrackers;
|
||||
unordered_map<int64_t, int> conditionTrackerMap;
|
||||
vector<sp<MetricProducer>> allMetricProducers;
|
||||
unordered_map<int64_t, int> metricProducerMap;
|
||||
std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
|
||||
std::vector<sp<AlarmTracker>> allAlarmTrackers;
|
||||
unordered_map<int, std::vector<int>> conditionToMetricMap;
|
||||
@@ -485,15 +494,17 @@ TEST(MetricsManagerTest, TestDimensionMetricsWithMultiTags) {
|
||||
unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
|
||||
unordered_map<int64_t, int> alertTrackerMap;
|
||||
vector<int> metricsWithActivation;
|
||||
map<int64_t, uint64_t> stateProtoHashes;
|
||||
std::set<int64_t> noReportMetricIds;
|
||||
|
||||
EXPECT_FALSE(initStatsdConfig(
|
||||
kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseSec, timeBaseSec, allTagIds, allAtomMatchingTrackers, atomMatchingTrackerMap,
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, allAnomalyTrackers,
|
||||
allAlarmTrackers, conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap, alertTrackerMap,
|
||||
metricsWithActivation, noReportMetricIds));
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, metricProducerMap,
|
||||
allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap, trackerToMetricMap,
|
||||
trackerToConditionMap, activationAtomTrackerToMetricMap,
|
||||
deactivationAtomTrackerToMetricMap, alertTrackerMap, metricsWithActivation,
|
||||
stateProtoHashes, noReportMetricIds));
|
||||
}
|
||||
|
||||
TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
|
||||
@@ -508,6 +519,7 @@ TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
|
||||
vector<sp<ConditionTracker>> allConditionTrackers;
|
||||
unordered_map<int64_t, int> conditionTrackerMap;
|
||||
vector<sp<MetricProducer>> allMetricProducers;
|
||||
unordered_map<int64_t, int> metricProducerMap;
|
||||
std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
|
||||
std::vector<sp<AlarmTracker>> allAlarmTrackers;
|
||||
unordered_map<int, std::vector<int>> conditionToMetricMap;
|
||||
@@ -517,15 +529,17 @@ TEST(MetricsManagerTest, TestCircleLogMatcherDependency) {
|
||||
unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
|
||||
unordered_map<int64_t, int> alertTrackerMap;
|
||||
vector<int> metricsWithActivation;
|
||||
map<int64_t, uint64_t> stateProtoHashes;
|
||||
std::set<int64_t> noReportMetricIds;
|
||||
|
||||
EXPECT_FALSE(initStatsdConfig(
|
||||
kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseSec, timeBaseSec, allTagIds, allAtomMatchingTrackers, atomMatchingTrackerMap,
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, allAnomalyTrackers,
|
||||
allAlarmTrackers, conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap, alertTrackerMap,
|
||||
metricsWithActivation, noReportMetricIds));
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, metricProducerMap,
|
||||
allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap, trackerToMetricMap,
|
||||
trackerToConditionMap, activationAtomTrackerToMetricMap,
|
||||
deactivationAtomTrackerToMetricMap, alertTrackerMap, metricsWithActivation,
|
||||
stateProtoHashes, noReportMetricIds));
|
||||
}
|
||||
|
||||
TEST(MetricsManagerTest, TestMissingMatchers) {
|
||||
@@ -540,6 +554,7 @@ TEST(MetricsManagerTest, TestMissingMatchers) {
|
||||
vector<sp<ConditionTracker>> allConditionTrackers;
|
||||
unordered_map<int64_t, int> conditionTrackerMap;
|
||||
vector<sp<MetricProducer>> allMetricProducers;
|
||||
unordered_map<int64_t, int> metricProducerMap;
|
||||
std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
|
||||
std::vector<sp<AlarmTracker>> allAlarmTrackers;
|
||||
unordered_map<int, std::vector<int>> conditionToMetricMap;
|
||||
@@ -549,14 +564,16 @@ TEST(MetricsManagerTest, TestMissingMatchers) {
|
||||
unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
|
||||
unordered_map<int64_t, int> alertTrackerMap;
|
||||
vector<int> metricsWithActivation;
|
||||
map<int64_t, uint64_t> stateProtoHashes;
|
||||
std::set<int64_t> noReportMetricIds;
|
||||
EXPECT_FALSE(initStatsdConfig(
|
||||
kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseSec, timeBaseSec, allTagIds, allAtomMatchingTrackers, atomMatchingTrackerMap,
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, allAnomalyTrackers,
|
||||
allAlarmTrackers, conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap, alertTrackerMap,
|
||||
metricsWithActivation, noReportMetricIds));
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, metricProducerMap,
|
||||
allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap, trackerToMetricMap,
|
||||
trackerToConditionMap, activationAtomTrackerToMetricMap,
|
||||
deactivationAtomTrackerToMetricMap, alertTrackerMap, metricsWithActivation,
|
||||
stateProtoHashes, noReportMetricIds));
|
||||
}
|
||||
|
||||
TEST(MetricsManagerTest, TestMissingPredicate) {
|
||||
@@ -571,6 +588,7 @@ TEST(MetricsManagerTest, TestMissingPredicate) {
|
||||
vector<sp<ConditionTracker>> allConditionTrackers;
|
||||
unordered_map<int64_t, int> conditionTrackerMap;
|
||||
vector<sp<MetricProducer>> allMetricProducers;
|
||||
unordered_map<int64_t, int> metricProducerMap;
|
||||
std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
|
||||
std::vector<sp<AlarmTracker>> allAlarmTrackers;
|
||||
unordered_map<int, std::vector<int>> conditionToMetricMap;
|
||||
@@ -580,14 +598,16 @@ TEST(MetricsManagerTest, TestMissingPredicate) {
|
||||
unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
|
||||
unordered_map<int64_t, int> alertTrackerMap;
|
||||
vector<int> metricsWithActivation;
|
||||
map<int64_t, uint64_t> stateProtoHashes;
|
||||
std::set<int64_t> noReportMetricIds;
|
||||
EXPECT_FALSE(initStatsdConfig(
|
||||
kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseSec, timeBaseSec, allTagIds, allAtomMatchingTrackers, atomMatchingTrackerMap,
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, allAnomalyTrackers,
|
||||
allAlarmTrackers, conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap, alertTrackerMap,
|
||||
metricsWithActivation, noReportMetricIds));
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, metricProducerMap,
|
||||
allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap, trackerToMetricMap,
|
||||
trackerToConditionMap, activationAtomTrackerToMetricMap,
|
||||
deactivationAtomTrackerToMetricMap, alertTrackerMap, metricsWithActivation,
|
||||
stateProtoHashes, noReportMetricIds));
|
||||
}
|
||||
|
||||
TEST(MetricsManagerTest, TestCirclePredicateDependency) {
|
||||
@@ -602,6 +622,7 @@ TEST(MetricsManagerTest, TestCirclePredicateDependency) {
|
||||
vector<sp<ConditionTracker>> allConditionTrackers;
|
||||
unordered_map<int64_t, int> conditionTrackerMap;
|
||||
vector<sp<MetricProducer>> allMetricProducers;
|
||||
unordered_map<int64_t, int> metricProducerMap;
|
||||
std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
|
||||
std::vector<sp<AlarmTracker>> allAlarmTrackers;
|
||||
unordered_map<int, std::vector<int>> conditionToMetricMap;
|
||||
@@ -611,15 +632,17 @@ TEST(MetricsManagerTest, TestCirclePredicateDependency) {
|
||||
unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
|
||||
unordered_map<int64_t, int> alertTrackerMap;
|
||||
vector<int> metricsWithActivation;
|
||||
map<int64_t, uint64_t> stateProtoHashes;
|
||||
std::set<int64_t> noReportMetricIds;
|
||||
|
||||
EXPECT_FALSE(initStatsdConfig(
|
||||
kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseSec, timeBaseSec, allTagIds, allAtomMatchingTrackers, atomMatchingTrackerMap,
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, allAnomalyTrackers,
|
||||
allAlarmTrackers, conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap, alertTrackerMap,
|
||||
metricsWithActivation, noReportMetricIds));
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, metricProducerMap,
|
||||
allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap, trackerToMetricMap,
|
||||
trackerToConditionMap, activationAtomTrackerToMetricMap,
|
||||
deactivationAtomTrackerToMetricMap, alertTrackerMap, metricsWithActivation,
|
||||
stateProtoHashes, noReportMetricIds));
|
||||
}
|
||||
|
||||
TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
|
||||
@@ -634,6 +657,7 @@ TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
|
||||
vector<sp<ConditionTracker>> allConditionTrackers;
|
||||
unordered_map<int64_t, int> conditionTrackerMap;
|
||||
vector<sp<MetricProducer>> allMetricProducers;
|
||||
unordered_map<int64_t, int> metricProducerMap;
|
||||
std::vector<sp<AnomalyTracker>> allAnomalyTrackers;
|
||||
std::vector<sp<AlarmTracker>> allAlarmTrackers;
|
||||
unordered_map<int, std::vector<int>> conditionToMetricMap;
|
||||
@@ -643,15 +667,17 @@ TEST(MetricsManagerTest, testAlertWithUnknownMetric) {
|
||||
unordered_map<int, std::vector<int>> deactivationAtomTrackerToMetricMap;
|
||||
unordered_map<int64_t, int> alertTrackerMap;
|
||||
vector<int> metricsWithActivation;
|
||||
map<int64_t, uint64_t> stateProtoHashes;
|
||||
std::set<int64_t> noReportMetricIds;
|
||||
|
||||
EXPECT_FALSE(initStatsdConfig(
|
||||
kConfigKey, config, uidMap, pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor,
|
||||
timeBaseSec, timeBaseSec, allTagIds, allAtomMatchingTrackers, atomMatchingTrackerMap,
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, allAnomalyTrackers,
|
||||
allAlarmTrackers, conditionToMetricMap, trackerToMetricMap, trackerToConditionMap,
|
||||
activationAtomTrackerToMetricMap, deactivationAtomTrackerToMetricMap, alertTrackerMap,
|
||||
metricsWithActivation, noReportMetricIds));
|
||||
allConditionTrackers, conditionTrackerMap, allMetricProducers, metricProducerMap,
|
||||
allAnomalyTrackers, allAlarmTrackers, conditionToMetricMap, trackerToMetricMap,
|
||||
trackerToConditionMap, activationAtomTrackerToMetricMap,
|
||||
deactivationAtomTrackerToMetricMap, alertTrackerMap, metricsWithActivation,
|
||||
stateProtoHashes, noReportMetricIds));
|
||||
}
|
||||
|
||||
TEST(MetricsManagerTest, TestCreateAtomMatchingTrackerInvalidMatcher) {
|
||||
|
||||
Reference in New Issue
Block a user