• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17syntax = "proto2";
18
19package android.os.statsd;
20
21option java_package = "com.android.internal.os";
22option java_outer_classname = "StatsdConfigProto";
23
24enum Position {
25  POSITION_UNKNOWN = 0;
26
27  FIRST = 1;
28
29  LAST = 2;
30
31  ANY = 3;
32
33  ALL = 4;
34}
35
36enum TimeUnit {
37  TIME_UNIT_UNSPECIFIED = 0;
38  ONE_MINUTE = 1;
39  FIVE_MINUTES = 2;
40  TEN_MINUTES = 3;
41  THIRTY_MINUTES = 4;
42  ONE_HOUR = 5;
43  THREE_HOURS = 6;
44  SIX_HOURS = 7;
45  TWELVE_HOURS = 8;
46  ONE_DAY = 9;
47  CTS = 1000;
48}
49
50message FieldMatcher {
51  optional int32 field = 1;
52
53  optional Position position = 2;
54
55  repeated FieldMatcher child = 3;
56}
57
58message FieldValueMatcher {
59  optional int32 field = 1;
60
61  optional Position position = 2;
62
63  oneof value_matcher {
64    bool eq_bool = 3;
65    string eq_string = 4;
66    int64 eq_int = 5;
67
68    int64 lt_int = 6;
69    int64 gt_int = 7;
70    float lt_float = 8;
71    float gt_float = 9;
72
73    int64 lte_int = 10;
74    int64 gte_int = 11;
75
76    MessageMatcher matches_tuple = 12;
77
78    StringListMatcher eq_any_string = 13;
79    StringListMatcher neq_any_string = 14;
80  }
81}
82
83message MessageMatcher {
84  repeated FieldValueMatcher field_value_matcher = 1;
85}
86
87message StringListMatcher {
88    repeated string str_value = 1;
89}
90
91enum LogicalOperation {
92  LOGICAL_OPERATION_UNSPECIFIED = 0;
93  AND = 1;
94  OR = 2;
95  NOT = 3;
96  NAND = 4;
97  NOR = 5;
98}
99
100message SimpleAtomMatcher {
101  optional int32 atom_id = 1;
102
103  repeated FieldValueMatcher field_value_matcher = 2;
104}
105
106message AtomMatcher {
107  optional int64 id = 1;
108
109  message Combination {
110    optional LogicalOperation operation = 1;
111
112    repeated int64 matcher = 2;
113  }
114  oneof contents {
115    SimpleAtomMatcher simple_atom_matcher = 2;
116    Combination combination = 3;
117  }
118}
119
120message SimplePredicate {
121  optional int64 start = 1;
122
123  optional int64 stop = 2;
124
125  optional bool count_nesting = 3 [default = true];
126
127  optional int64 stop_all = 4;
128
129  enum InitialValue {
130    UNKNOWN = 0;
131    FALSE = 1;
132  }
133  optional InitialValue initial_value = 5 [default = FALSE];
134
135  optional FieldMatcher dimensions = 6;
136}
137
138message Predicate {
139  optional int64 id = 1;
140
141  message Combination {
142    optional LogicalOperation operation = 1;
143
144    repeated int64 predicate = 2;
145  }
146
147  oneof contents {
148    SimplePredicate simple_predicate = 2;
149    Combination combination = 3;
150  }
151}
152
153message MetricConditionLink {
154  optional int64 condition = 1;
155
156  optional FieldMatcher fields_in_what = 2;
157
158  optional FieldMatcher fields_in_condition = 3;
159}
160
161message FieldFilter {
162  optional bool include_all = 1 [default = false];
163  optional FieldMatcher fields = 2;
164}
165
166message EventMetric {
167  optional int64 id = 1;
168
169  optional int64 what = 2;
170
171  optional int64 condition = 3;
172
173  repeated MetricConditionLink links = 4;
174}
175
176message CountMetric {
177  optional int64 id = 1;
178
179  optional int64 what = 2;
180
181  optional int64 condition = 3;
182
183  optional FieldMatcher dimensions_in_what = 4;
184
185  optional FieldMatcher dimensions_in_condition = 7;
186
187  optional TimeUnit bucket = 5;
188
189  repeated MetricConditionLink links = 6;
190}
191
192message DurationMetric {
193  optional int64 id = 1;
194
195  optional int64 what = 2;
196
197  optional int64 condition = 3;
198
199  repeated MetricConditionLink links = 4;
200
201  enum AggregationType {
202    SUM = 1;
203
204    MAX_SPARSE = 2;
205  }
206  optional AggregationType aggregation_type = 5 [default = SUM];
207
208  optional FieldMatcher dimensions_in_what = 6;
209
210  optional FieldMatcher dimensions_in_condition = 8;
211
212  optional TimeUnit bucket = 7;
213}
214
215message GaugeMetric {
216  optional int64 id = 1;
217
218  optional int64 what = 2;
219
220  optional int64 trigger_event = 12;
221
222  optional FieldFilter gauge_fields_filter = 3;
223
224  optional int64 condition = 4;
225
226  optional FieldMatcher dimensions_in_what = 5;
227
228  optional FieldMatcher dimensions_in_condition = 8;
229
230  optional TimeUnit bucket = 6;
231
232  repeated MetricConditionLink links = 7;
233
234  enum SamplingType {
235    RANDOM_ONE_SAMPLE = 1;
236    ALL_CONDITION_CHANGES = 2 [deprecated = true];
237    CONDITION_CHANGE_TO_TRUE = 3;
238    FIRST_N_SAMPLES = 4;
239  }
240  optional SamplingType sampling_type = 9 [default = RANDOM_ONE_SAMPLE] ;
241
242  optional int64 min_bucket_size_nanos = 10;
243
244  optional int64 max_num_gauge_atoms_per_bucket = 11 [default = 10];
245
246  optional int32 max_pull_delay_sec = 13 [default = 10];
247
248  optional bool split_bucket_for_app_upgrade = 14 [default = true];
249}
250
251message ValueMetric {
252  optional int64 id = 1;
253
254  optional int64 what = 2;
255
256  optional FieldMatcher value_field = 3;
257
258  optional int64 condition = 4;
259
260  optional FieldMatcher dimensions_in_what = 5;
261
262  optional FieldMatcher dimensions_in_condition = 9;
263
264  optional TimeUnit bucket = 6;
265
266  repeated MetricConditionLink links = 7;
267
268  enum AggregationType {
269    SUM = 1;
270    MIN = 2;
271    MAX = 3;
272    AVG = 4;
273  }
274  optional AggregationType aggregation_type = 8 [default = SUM];
275
276  optional int64 min_bucket_size_nanos = 10;
277
278  optional bool use_absolute_value_on_reset = 11 [default = false];
279
280  optional bool use_diff = 12;
281
282  optional bool use_zero_default_base = 15 [default = false];
283
284  enum ValueDirection {
285      UNKNOWN = 0;
286      INCREASING = 1;
287      DECREASING = 2;
288      ANY = 3;
289  }
290  optional ValueDirection value_direction = 13 [default = INCREASING];
291
292  optional bool skip_zero_diff_output = 14 [default = true];
293
294  optional int32 max_pull_delay_sec = 16 [default = 10];
295
296  optional bool split_bucket_for_app_upgrade = 17 [default = true];
297}
298
299message Alert {
300  optional int64 id = 1;
301
302  optional int64 metric_id = 2;
303
304  optional int32 num_buckets = 3;
305
306  optional int32 refractory_period_secs = 4;
307
308  optional double trigger_if_sum_gt = 5;
309}
310
311message Alarm {
312  optional int64 id = 1;
313
314  optional int64 offset_millis = 2;
315
316  optional int64 period_millis = 3;
317}
318
319message IncidentdDetails {
320  repeated int32 section = 1;
321
322  enum Destination {
323    AUTOMATIC = 0;
324    EXPLICIT = 1;
325  }
326  optional Destination dest = 2;
327
328  // Package name of the incident report receiver.
329  optional string receiver_pkg = 3;
330
331  // Class name of the incident report receiver.
332  optional string receiver_cls = 4;
333
334  optional string alert_description = 5;
335}
336
337message PerfettoDetails {
338  // The |trace_config| field is a proto-encoded message of type
339  // perfetto.protos.TraceConfig defined in
340  // //external/perfetto/protos/perfetto/config/. On device,
341  // statsd doesn't need to deserialize the message as it's just
342  // passed binary-encoded to the perfetto cmdline client.
343  optional bytes trace_config = 1;
344}
345
346message PerfprofdDetails {
347  // The |perfprofd_config| field is a proto-encoded message of type
348  // android.perfprofd.ProfilingConfig defined in
349  // //system/extras/perfprofd/. On device, statsd doesn't need to
350  // deserialize the message as it's just passed binary-encoded to
351  // the perfprofd service.
352  optional bytes perfprofd_config = 1;
353}
354
355message BroadcastSubscriberDetails {
356  optional int64 subscriber_id = 1;
357  repeated string cookie = 2;
358}
359
360message Subscription {
361  optional int64 id = 1;
362
363  enum RuleType {
364    RULE_TYPE_UNSPECIFIED = 0;
365    ALARM = 1;
366    ALERT = 2;
367  }
368  optional RuleType rule_type = 2;
369
370  optional int64 rule_id = 3;
371
372  oneof subscriber_information {
373    IncidentdDetails incidentd_details = 4;
374    PerfettoDetails perfetto_details = 5;
375    BroadcastSubscriberDetails broadcast_subscriber_details = 6;
376    PerfprofdDetails perfprofd_details = 8;
377  }
378
379  optional float probability_of_informing = 7 [default = 1.1];
380}
381
382enum ActivationType {
383  ACTIVATION_TYPE_UNKNOWN = 0;
384  ACTIVATE_IMMEDIATELY = 1;
385  ACTIVATE_ON_BOOT = 2;
386}
387
388message EventActivation {
389  optional int64 atom_matcher_id = 1;
390  optional int64 ttl_seconds = 2;
391  optional int64 deactivation_atom_matcher_id = 3;
392  optional ActivationType activation_type = 4;
393}
394
395message MetricActivation {
396  optional int64 metric_id = 1;
397
398  optional ActivationType activation_type = 3 [deprecated = true];
399
400  repeated EventActivation event_activation = 2;
401}
402
403message StatsdConfig {
404  optional int64 id = 1;
405
406  repeated EventMetric event_metric = 2;
407
408  repeated CountMetric count_metric = 3;
409
410  repeated ValueMetric value_metric = 4;
411
412  repeated GaugeMetric gauge_metric = 5;
413
414  repeated DurationMetric duration_metric = 6;
415
416  repeated AtomMatcher atom_matcher = 7;
417
418  repeated Predicate predicate = 8;
419
420  repeated Alert alert = 9;
421
422  repeated Alarm alarm = 10;
423
424  repeated Subscription subscription = 11;
425
426  repeated string allowed_log_source = 12;
427
428  repeated int64 no_report_metric = 13;
429
430  message Annotation {
431    optional int64 field_int64 = 1;
432    optional int32 field_int32 = 2;
433  }
434  repeated Annotation annotation = 14;
435
436  optional int64 ttl_in_seconds = 15;
437
438  optional bool hash_strings_in_metric_report = 16 [default = true];
439
440  repeated MetricActivation metric_activation = 17;
441
442  optional bool version_strings_in_metric_report = 18;
443
444  optional bool installer_in_metric_report = 19;
445
446  optional bool persist_locally = 20 [default = false];
447
448  // Field number 1000 is reserved for later use.
449  reserved 1000;
450}
451