/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ syntax = "proto2"; package android.os.statsd; option java_package = "com.android.internal.os"; option java_outer_classname = "StatsdConfigProto"; enum Position { POSITION_UNKNOWN = 0; FIRST = 1; LAST = 2; ANY = 3; ALL = 4; } enum TimeUnit { TIME_UNIT_UNSPECIFIED = 0; ONE_MINUTE = 1; // WILL BE GUARDRAILED TO 5 MINS UNLESS UID = SHELL OR ROOT FIVE_MINUTES = 2; TEN_MINUTES = 3; THIRTY_MINUTES = 4; ONE_HOUR = 5; THREE_HOURS = 6; SIX_HOURS = 7; TWELVE_HOURS = 8; ONE_DAY = 9; ONE_WEEK = 10; CTS = 1000; } message FieldMatcher { optional int32 field = 1; optional Position position = 2; repeated FieldMatcher child = 3; } message FieldValueMatcher { optional int32 field = 1; optional Position position = 2; oneof value_matcher { bool eq_bool = 3; string eq_string = 4; int64 eq_int = 5; int64 lt_int = 6; int64 gt_int = 7; float lt_float = 8; float gt_float = 9; int64 lte_int = 10; int64 gte_int = 11; MessageMatcher matches_tuple = 12; StringListMatcher eq_any_string = 13; StringListMatcher neq_any_string = 14; } } message MessageMatcher { repeated FieldValueMatcher field_value_matcher = 1; } message StringListMatcher { repeated string str_value = 1; } enum LogicalOperation { LOGICAL_OPERATION_UNSPECIFIED = 0; AND = 1; OR = 2; NOT = 3; NAND = 4; NOR = 5; } message SimpleAtomMatcher { optional int32 atom_id = 1; repeated FieldValueMatcher field_value_matcher = 2; } message AtomMatcher { optional int64 id = 1; message Combination { optional LogicalOperation operation = 1; repeated int64 matcher = 2; } oneof contents { SimpleAtomMatcher simple_atom_matcher = 2; Combination combination = 3; } } message SimplePredicate { optional int64 start = 1; optional int64 stop = 2; optional bool count_nesting = 3 [default = true]; optional int64 stop_all = 4; enum InitialValue { UNKNOWN = 0; FALSE = 1; } optional InitialValue initial_value = 5 [default = UNKNOWN]; optional FieldMatcher dimensions = 6; } message Predicate { optional int64 id = 1; message Combination { optional LogicalOperation operation = 1; repeated int64 predicate = 2; } oneof contents { SimplePredicate simple_predicate = 2; Combination combination = 3; } } message StateMap { message StateGroup { optional int64 group_id = 1; repeated int32 value = 2; } repeated StateGroup group = 1; } message State { optional int64 id = 1; optional int32 atom_id = 2; optional StateMap map = 3; } message MetricConditionLink { optional int64 condition = 1; optional FieldMatcher fields_in_what = 2; optional FieldMatcher fields_in_condition = 3; } message MetricStateLink { optional int32 state_atom_id = 1; optional FieldMatcher fields_in_what = 2; optional FieldMatcher fields_in_state = 3; } message FieldFilter { optional bool include_all = 1 [default = false]; optional FieldMatcher fields = 2; } message UploadThreshold { oneof value_comparison { int64 lt_int = 1; int64 gt_int = 2; float lt_float = 3; float gt_float = 4; int64 lte_int = 5; int64 gte_int = 6; } } message EventMetric { optional int64 id = 1; optional int64 what = 2; optional int64 condition = 3; repeated MetricConditionLink links = 4; reserved 100; reserved 101; } message CountMetric { optional int64 id = 1; optional int64 what = 2; optional int64 condition = 3; optional FieldMatcher dimensions_in_what = 4; repeated int64 slice_by_state = 8; optional TimeUnit bucket = 5; repeated MetricConditionLink links = 6; repeated MetricStateLink state_link = 9; optional UploadThreshold threshold = 10; optional bool split_bucket_for_app_upgrade = 11 [default = true]; optional FieldMatcher dimensions_in_condition = 7 [deprecated = true]; reserved 100; reserved 101; } message DurationMetric { optional int64 id = 1; optional int64 what = 2; optional int64 condition = 3; repeated int64 slice_by_state = 9; repeated MetricConditionLink links = 4; repeated MetricStateLink state_link = 10; enum AggregationType { SUM = 1; MAX_SPARSE = 2; } optional AggregationType aggregation_type = 5 [default = SUM]; optional FieldMatcher dimensions_in_what = 6; optional TimeUnit bucket = 7; optional UploadThreshold threshold = 11; optional bool split_bucket_for_app_upgrade = 12 [default = true]; optional FieldMatcher dimensions_in_condition = 8 [deprecated = true]; reserved 100; reserved 101; } message GaugeMetric { optional int64 id = 1; optional int64 what = 2; optional int64 trigger_event = 12; optional FieldFilter gauge_fields_filter = 3; optional int64 condition = 4; optional FieldMatcher dimensions_in_what = 5; optional FieldMatcher dimensions_in_condition = 8 [deprecated = true]; optional TimeUnit bucket = 6; repeated MetricConditionLink links = 7; enum SamplingType { RANDOM_ONE_SAMPLE = 1; ALL_CONDITION_CHANGES = 2 [deprecated = true]; CONDITION_CHANGE_TO_TRUE = 3; FIRST_N_SAMPLES = 4; } optional SamplingType sampling_type = 9 [default = RANDOM_ONE_SAMPLE] ; optional int64 min_bucket_size_nanos = 10; optional int64 max_num_gauge_atoms_per_bucket = 11 [default = 10]; optional int32 max_pull_delay_sec = 13 [default = 30]; optional bool split_bucket_for_app_upgrade = 14 [default = true]; reserved 100; reserved 101; } message ValueMetric { optional int64 id = 1; optional int64 what = 2; optional FieldMatcher value_field = 3; optional int64 condition = 4; optional FieldMatcher dimensions_in_what = 5; repeated int64 slice_by_state = 18; optional TimeUnit bucket = 6; repeated MetricConditionLink links = 7; repeated MetricStateLink state_link = 19; optional UploadThreshold threshold = 20; enum AggregationType { SUM = 1; MIN = 2; MAX = 3; AVG = 4; } optional AggregationType aggregation_type = 8 [default = SUM]; optional int64 min_bucket_size_nanos = 10; optional bool use_absolute_value_on_reset = 11 [default = false]; optional bool use_diff = 12; optional bool use_zero_default_base = 15 [default = false]; enum ValueDirection { UNKNOWN = 0; INCREASING = 1; DECREASING = 2; ANY = 3; } optional ValueDirection value_direction = 13 [default = INCREASING]; optional bool skip_zero_diff_output = 14 [default = true]; optional int32 max_pull_delay_sec = 16 [default = 30]; optional bool split_bucket_for_app_upgrade = 17 [default = true]; optional FieldMatcher dimensions_in_condition = 9 [deprecated = true]; reserved 100; reserved 101; } message Alert { optional int64 id = 1; optional int64 metric_id = 2; optional int32 num_buckets = 3; optional int32 refractory_period_secs = 4; optional double trigger_if_sum_gt = 5; } message Alarm { optional int64 id = 1; optional int64 offset_millis = 2; optional int64 period_millis = 3; } message IncidentdDetails { repeated int32 section = 1; enum Destination { AUTOMATIC = 0; EXPLICIT = 1; } optional Destination dest = 2; // Package name of the incident report receiver. optional string receiver_pkg = 3; // Class name of the incident report receiver. optional string receiver_cls = 4; optional string alert_description = 5; } message PerfettoDetails { // The |trace_config| field is a proto-encoded message of type // perfetto.protos.TraceConfig defined in // //external/perfetto/protos/perfetto/config/. On device, // statsd doesn't need to deserialize the message as it's just // passed binary-encoded to the perfetto cmdline client. optional bytes trace_config = 1; } message BroadcastSubscriberDetails { optional int64 subscriber_id = 1; repeated string cookie = 2; } message Subscription { optional int64 id = 1; enum RuleType { RULE_TYPE_UNSPECIFIED = 0; ALARM = 1; ALERT = 2; } optional RuleType rule_type = 2; optional int64 rule_id = 3; oneof subscriber_information { IncidentdDetails incidentd_details = 4; PerfettoDetails perfetto_details = 5; BroadcastSubscriberDetails broadcast_subscriber_details = 6; } optional float probability_of_informing = 7 [default = 1.1]; // This was used for perfprofd historically. reserved 8; } enum ActivationType { ACTIVATION_TYPE_UNKNOWN = 0; ACTIVATE_IMMEDIATELY = 1; ACTIVATE_ON_BOOT = 2; } message EventActivation { optional int64 atom_matcher_id = 1; optional int64 ttl_seconds = 2; optional int64 deactivation_atom_matcher_id = 3; optional ActivationType activation_type = 4; } message MetricActivation { optional int64 metric_id = 1; optional ActivationType activation_type = 3 [deprecated = true]; repeated EventActivation event_activation = 2; } message PullAtomPackages { optional int32 atom_id = 1; repeated string packages = 2; } message StatsdConfig { optional int64 id = 1; repeated EventMetric event_metric = 2; repeated CountMetric count_metric = 3; repeated ValueMetric value_metric = 4; repeated GaugeMetric gauge_metric = 5; repeated DurationMetric duration_metric = 6; repeated AtomMatcher atom_matcher = 7; repeated Predicate predicate = 8; repeated Alert alert = 9; repeated Alarm alarm = 10; repeated Subscription subscription = 11; repeated string allowed_log_source = 12; repeated int64 no_report_metric = 13; message Annotation { optional int64 field_int64 = 1; optional int32 field_int32 = 2; } repeated Annotation annotation = 14; optional int64 ttl_in_seconds = 15; optional bool hash_strings_in_metric_report = 16 [default = true]; repeated MetricActivation metric_activation = 17; optional bool version_strings_in_metric_report = 18; optional bool installer_in_metric_report = 19; optional bool persist_locally = 20 [default = false]; repeated State state = 21; repeated string default_pull_packages = 22; repeated PullAtomPackages pull_atom_packages = 23; repeated int32 whitelisted_atom_ids = 24; // Field number 1000 is reserved for later use. reserved 1000; }