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.os"; 22option java_outer_classname = "StatsLog"; 23 24import "frameworks/proto_logging/stats/atoms.proto"; 25import "packages/modules/StatsD/statsd/src/guardrail/stats_log_enums.proto"; 26 27message DimensionsValue { 28 optional int32 field = 1; 29 30 oneof value { 31 string value_str = 2; 32 int32 value_int = 3; 33 int64 value_long = 4; 34 bool value_bool = 5; 35 float value_float = 6; 36 DimensionsValueTuple value_tuple = 7; 37 uint64 value_str_hash = 8; 38 } 39} 40 41message DimensionsValueTuple { 42 repeated DimensionsValue dimensions_value = 1; 43} 44 45message StateValue { 46 optional int32 atom_id = 1; 47 48 oneof contents { 49 int64 group_id = 2; 50 int32 value = 3; 51 } 52} 53 54message AggregatedStateInfo { 55 repeated StateValue slice_by_state = 1; 56 57 repeated int64 elapsed_timestamp_nanos = 2; 58} 59 60message AggregatedAtomInfo { 61 optional Atom atom = 1; 62 63 repeated int64 elapsed_timestamp_nanos = 2; 64 65 repeated AggregatedStateInfo state_info = 3; // Only used when metrics have slice_by_state 66} 67 68message EventMetricData { 69 optional int64 elapsed_timestamp_nanos = 1; 70 71 optional Atom atom = 2; 72 73 optional int64 wall_clock_timestamp_nanos = 3 [deprecated = true]; 74 75 optional AggregatedAtomInfo aggregated_atom_info = 4; 76 77 repeated StateValue slice_by_state = 5; 78} 79 80message CountBucketInfo { 81 optional int64 start_bucket_elapsed_nanos = 1; 82 83 optional int64 end_bucket_elapsed_nanos = 2; 84 85 optional int64 count = 3; 86 87 optional int64 bucket_num = 4; 88 89 optional int64 start_bucket_elapsed_millis = 5; 90 91 optional int64 end_bucket_elapsed_millis = 6; 92 93 optional int64 condition_true_nanos = 7; 94} 95 96message CountMetricData { 97 optional DimensionsValue dimensions_in_what = 1; 98 99 repeated StateValue slice_by_state = 6; 100 101 repeated CountBucketInfo bucket_info = 3; 102 103 repeated DimensionsValue dimension_leaf_values_in_what = 4; 104 105 optional DimensionsValue dimensions_in_condition = 2 [deprecated = true]; 106 107 repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true]; 108} 109 110message DurationBucketInfo { 111 optional int64 start_bucket_elapsed_nanos = 1; 112 113 optional int64 end_bucket_elapsed_nanos = 2; 114 115 optional int64 duration_nanos = 3; 116 117 optional int64 bucket_num = 4; 118 119 optional int64 start_bucket_elapsed_millis = 5; 120 121 optional int64 end_bucket_elapsed_millis = 6; 122 123 optional int64 condition_true_nanos = 7; 124} 125 126message DurationMetricData { 127 optional DimensionsValue dimensions_in_what = 1; 128 129 repeated StateValue slice_by_state = 6; 130 131 repeated DurationBucketInfo bucket_info = 3; 132 133 repeated DimensionsValue dimension_leaf_values_in_what = 4; 134 135 optional DimensionsValue dimensions_in_condition = 2 [deprecated = true]; 136 137 repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true]; 138} 139 140message Histogram { 141 // Counts for histogram bins. 142 // Encoding is as follows: 143 // * n >= 0 represents the actual count 144 // * n == -1 should not be used 145 // * n <= -2 represents -n consecutive bins with count of 0 146 repeated sint32 count = 1; 147} 148 149message ValueBucketInfo { 150 optional int64 start_bucket_elapsed_nanos = 1; 151 152 optional int64 end_bucket_elapsed_nanos = 2; 153 154 optional int64 value = 3 [deprecated = true]; 155 156 oneof single_value { 157 int64 value_long = 7 [deprecated = true]; 158 159 double value_double = 8 [deprecated = true]; 160 } 161 162 message Value { 163 optional int32 index = 1; 164 oneof value { 165 int64 value_long = 2; 166 double value_double = 3; 167 Histogram histogram = 5; 168 } 169 optional int32 sample_size = 4; 170 reserved 6; 171 } 172 173 repeated Value values = 9; 174 175 optional int64 bucket_num = 4; 176 177 optional int64 start_bucket_elapsed_millis = 5; 178 179 optional int64 end_bucket_elapsed_millis = 6; 180 181 optional int64 condition_true_nanos = 10; 182 183 optional int64 condition_correction_nanos = 11; 184} 185 186message ValueMetricData { 187 optional DimensionsValue dimensions_in_what = 1; 188 189 repeated StateValue slice_by_state = 6; 190 191 repeated ValueBucketInfo bucket_info = 3; 192 193 repeated DimensionsValue dimension_leaf_values_in_what = 4; 194 195 optional DimensionsValue dimensions_in_condition = 2 [deprecated = true]; 196 197 repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true]; 198} 199 200message KllBucketInfo { 201 optional int64 start_bucket_elapsed_nanos = 1; 202 203 optional int64 end_bucket_elapsed_nanos = 2; 204 205 message KllSketch { 206 optional int32 index = 1; 207 optional bytes kll_sketch = 2; 208 } 209 210 repeated KllSketch sketches = 3; 211 212 optional int64 bucket_num = 4; 213 214 optional int64 start_bucket_elapsed_millis = 5; 215 216 optional int64 end_bucket_elapsed_millis = 6; 217 218 optional int64 condition_true_nanos = 7; 219} 220 221message KllMetricData { 222 optional DimensionsValue dimensions_in_what = 1; 223 224 repeated StateValue slice_by_state = 6; 225 226 repeated KllBucketInfo bucket_info = 3; 227 228 repeated DimensionsValue dimension_leaf_values_in_what = 4; 229 230 reserved 2, 5; 231} 232 233message GaugeBucketInfo { 234 optional int64 start_bucket_elapsed_nanos = 1; 235 236 optional int64 end_bucket_elapsed_nanos = 2; 237 238 repeated Atom atom = 3; 239 240 repeated int64 elapsed_timestamp_nanos = 4; 241 242 repeated int64 wall_clock_timestamp_nanos = 5 [deprecated = true]; 243 244 optional int64 bucket_num = 6; 245 246 optional int64 start_bucket_elapsed_millis = 7; 247 248 optional int64 end_bucket_elapsed_millis = 8; 249 250 repeated AggregatedAtomInfo aggregated_atom_info = 9; 251} 252 253message GaugeMetricData { 254 optional DimensionsValue dimensions_in_what = 1; 255 256 repeated StateValue slice_by_state = 6; 257 258 repeated GaugeBucketInfo bucket_info = 3; 259 260 repeated DimensionsValue dimension_leaf_values_in_what = 4; 261 262 optional DimensionsValue dimensions_in_condition = 2 [deprecated = true]; 263 264 repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true]; 265} 266 267message StatsLogReport { 268 optional int64 metric_id = 1; 269 270 // Deprecated. 271 reserved 2, 3; 272 273 message DropEvent { 274 optional BucketDropReason drop_reason = 1; 275 276 optional int64 drop_time_millis = 2; 277 } 278 279 message SkippedBuckets { 280 optional int64 start_bucket_elapsed_nanos = 1; 281 282 optional int64 end_bucket_elapsed_nanos = 2; 283 284 optional int64 start_bucket_elapsed_millis = 3; 285 286 optional int64 end_bucket_elapsed_millis = 4; 287 288 // The number of drop events is capped by StatsdStats::kMaxLoggedBucketDropEvents. 289 // The current maximum is 10 drop events. 290 repeated DropEvent drop_event = 5; 291 } 292 293 message EventMetricDataWrapper { 294 repeated EventMetricData data = 1; 295 } 296 297 message CountMetricDataWrapper { 298 repeated CountMetricData data = 1; 299 } 300 301 message DurationMetricDataWrapper { 302 repeated DurationMetricData data = 1; 303 } 304 305 message ValueMetricDataWrapper { 306 repeated ValueMetricData data = 1; 307 repeated SkippedBuckets skipped = 2; 308 } 309 310 message GaugeMetricDataWrapper { 311 repeated GaugeMetricData data = 1; 312 repeated SkippedBuckets skipped = 2; 313 } 314 315 message KllMetricDataWrapper { 316 repeated KllMetricData data = 1; 317 repeated SkippedBuckets skipped = 2; 318 } 319 320 oneof data { 321 EventMetricDataWrapper event_metrics = 4; 322 CountMetricDataWrapper count_metrics = 5; 323 DurationMetricDataWrapper duration_metrics = 6; 324 ValueMetricDataWrapper value_metrics = 7; 325 GaugeMetricDataWrapper gauge_metrics = 8; 326 KllMetricDataWrapper kll_metrics = 16; 327 } 328 329 optional int64 time_base_elapsed_nano_seconds = 9; 330 331 optional int64 bucket_size_nano_seconds = 10; 332 333 optional DimensionsValue dimensions_path_in_what = 11; 334 335 optional DimensionsValue dimensions_path_in_condition = 12 [deprecated = true]; 336 337 optional bool is_active = 14; 338 339 optional bool dimension_guardrail_hit = 17; 340 341 optional int64 estimated_data_bytes = 18; 342 343 repeated DataCorruptedReason data_corrupted_reason = 19; 344 345 // Do not use. 346 reserved 13, 15; 347} 348 349message UidMapping { 350 message PackageInfoSnapshot { 351 message PackageInfo { 352 optional string name = 1; 353 354 optional int64 version = 2; 355 356 optional int32 uid = 3; 357 358 optional bool deleted = 4; 359 360 optional uint64 name_hash = 5; 361 362 optional string version_string = 6; 363 364 optional uint64 version_string_hash = 7; 365 366 optional string installer = 8; 367 368 optional uint64 installer_hash = 9; 369 370 optional uint32 installer_index = 10; 371 372 optional bytes truncated_certificate_hash = 11; 373 } 374 optional int64 elapsed_timestamp_nanos = 1; 375 376 repeated PackageInfo package_info = 2; 377 } 378 repeated PackageInfoSnapshot snapshots = 1; 379 380 message Change { 381 optional bool deletion = 1; 382 383 optional int64 elapsed_timestamp_nanos = 2; 384 optional string app = 3; 385 optional int32 uid = 4; 386 387 optional int64 new_version = 5; 388 optional int64 prev_version = 6; 389 optional uint64 app_hash = 7; 390 optional string new_version_string = 8; 391 optional string prev_version_string = 9; 392 optional uint64 new_version_string_hash = 10; 393 optional uint64 prev_version_string_hash = 11; 394 } 395 repeated Change changes = 2; 396 397 // Populated when StatsdConfig.hash_strings_in_metric_reports = true 398 repeated uint64 installer_hash = 3; 399 400 // Populated when StatsdConfig.hash_strings_in_metric_reports = false 401 repeated string installer_name = 4; 402} 403 404message ConfigMetricsReport { 405 repeated StatsLogReport metrics = 1; 406 407 optional UidMapping uid_map = 2; 408 409 optional int64 last_report_elapsed_nanos = 3; 410 411 optional int64 current_report_elapsed_nanos = 4; 412 413 optional int64 last_report_wall_clock_nanos = 5; 414 415 optional int64 current_report_wall_clock_nanos = 6; 416 417 message Annotation { 418 optional int64 field_int64 = 1; 419 optional int32 field_int32 = 2; 420 } 421 repeated Annotation annotation = 7; 422 423 optional DumpReportReason dump_report_reason = 8; 424 425 repeated string strings = 9; 426 427 reserved 10; 428 429 repeated DataCorruptedReason data_corrupted_reason = 11; 430 431 optional int64 estimated_data_bytes = 12; 432} 433 434message ConfigMetricsReportList { 435 message ConfigKey { 436 optional int32 uid = 1; 437 optional int64 id = 2; 438 } 439 optional ConfigKey config_key = 1; 440 441 repeated ConfigMetricsReport reports = 2; 442 443 optional int32 report_number = 3; 444 445 optional int32 statsd_stats_id = 4; 446 447 reserved 10 to 13, 101; 448} 449 450message StatsdStatsReport { 451 optional int32 stats_begin_time_sec = 1; 452 453 optional int32 stats_end_time_sec = 2; 454 455 message InvalidConfigReason { 456 optional InvalidConfigReasonEnum reason = 1; 457 optional int64 metric_id = 2; 458 optional int64 state_id = 3; 459 optional int64 alert_id = 4; 460 optional int64 alarm_id = 5; 461 optional int64 subscription_id = 6; 462 repeated int64 matcher_id = 7; 463 repeated int64 condition_id = 8; 464 } 465 466 message CounterStats { 467 optional CounterType counter_type = 1; 468 optional int32 count = 2; 469 } 470 471 message MatcherStats { 472 optional int64 id = 1; 473 optional int32 matched_times = 2; 474 } 475 476 message ConditionStats { 477 optional int64 id = 1; 478 optional int32 max_tuple_counts = 2; 479 } 480 481 message MetricStats { 482 optional int64 id = 1; 483 optional int32 max_tuple_counts = 2; 484 } 485 486 message AlertStats { 487 optional int64 id = 1; 488 optional int32 alerted_times = 2; 489 } 490 491 message ConfigStats { 492 optional int32 uid = 1; 493 optional int64 id = 2; 494 optional int32 creation_time_sec = 3; 495 optional int32 deletion_time_sec = 4; 496 optional int32 reset_time_sec = 19; 497 optional int32 metric_count = 5; 498 optional int32 condition_count = 6; 499 optional int32 matcher_count = 7; 500 optional int32 alert_count = 8; 501 optional bool is_valid = 9; 502 optional InvalidConfigReason invalid_config_reason = 24; 503 repeated int32 broadcast_sent_time_sec = 10; 504 repeated int32 data_drop_time_sec = 11; 505 repeated int64 data_drop_bytes = 21; 506 repeated int32 dump_report_time_sec = 12; 507 repeated int32 dump_report_data_size = 20; 508 repeated MatcherStats matcher_stats = 13; 509 repeated ConditionStats condition_stats = 14; 510 repeated MetricStats metric_stats = 15; 511 repeated AlertStats alert_stats = 16; 512 repeated MetricStats metric_dimension_in_condition_stats = 17 [deprecated = true]; 513 message Annotation { 514 optional int64 field_int64 = 1; 515 optional int32 field_int32 = 2; 516 } 517 repeated Annotation annotation = 18; 518 repeated int32 activation_time_sec = 22; 519 repeated int32 deactivation_time_sec = 23; 520 repeated RestrictedMetricStats restricted_metric_stats = 25; 521 optional bool device_info_table_creation_failed = 26; 522 optional int32 restricted_db_corrupted_count = 27; 523 repeated int64 restricted_flush_latency = 28; 524 repeated int64 restricted_db_size_time_sec = 29; 525 repeated int64 restricted_db_size_bytes = 30; 526 repeated int32 dump_report_number = 31; 527 optional int32 db_deletion_stat_failed = 32; 528 optional int32 db_deletion_size_exceeded_limit = 33; 529 optional int32 db_deletion_config_invalid = 34; 530 optional int32 db_deletion_too_old = 35; 531 optional int32 db_deletion_config_removed = 36; 532 optional int32 db_deletion_config_updated = 37; 533 optional int32 config_metadata_provider_promotion_failed = 38; 534 } 535 536 repeated ConfigStats config_stats = 3; 537 538 message AtomStats { 539 optional int32 tag = 1; 540 optional int32 count = 2; 541 optional int32 error_count = 3; 542 optional int32 dropped_count = 4; 543 optional int32 skip_count = 5; 544 optional int32 peak_rate = 6; 545 } 546 547 repeated AtomStats atom_stats = 7; 548 549 message UidMapStats { 550 optional int32 changes = 1; 551 optional int32 bytes_used = 2; 552 optional int32 dropped_changes = 3; 553 optional int32 deleted_apps = 4; 554 } 555 optional UidMapStats uidmap_stats = 8; 556 557 message AnomalyAlarmStats { 558 optional int32 alarms_registered = 1; 559 } 560 optional AnomalyAlarmStats anomaly_alarm_stats = 9; 561 562 message PulledAtomStats { 563 optional int32 atom_id = 1; 564 optional int64 total_pull = 2; 565 optional int64 total_pull_from_cache = 3; 566 optional int64 min_pull_interval_sec = 4; 567 optional int64 average_pull_time_nanos = 5; 568 optional int64 max_pull_time_nanos = 6; 569 optional int64 average_pull_delay_nanos = 7; 570 optional int64 max_pull_delay_nanos = 8; 571 optional int64 data_error = 9; 572 optional int64 pull_timeout = 10; 573 optional int64 pull_exceed_max_delay = 11; 574 optional int64 pull_failed = 12; 575 optional int64 stats_companion_pull_failed = 13 [deprecated = true]; 576 optional int64 stats_companion_pull_binder_transaction_failed = 14 [deprecated = true]; 577 optional int64 empty_data = 15; 578 optional int64 registered_count = 16; 579 optional int64 unregistered_count = 17; 580 optional int32 atom_error_count = 18; 581 optional int64 binder_call_failed = 19; 582 optional int64 failed_uid_provider_not_found = 20; 583 optional int64 puller_not_found = 21; 584 message PullTimeoutMetadata { 585 optional int64 pull_timeout_uptime_millis = 1; 586 optional int64 pull_timeout_elapsed_millis = 2; 587 } 588 repeated PullTimeoutMetadata pull_atom_metadata = 22; 589 optional int32 subscription_pull_count = 23; 590 } 591 repeated PulledAtomStats pulled_atom_stats = 10; 592 593 message AtomMetricStats { 594 optional int64 metric_id = 1; 595 optional int64 hard_dimension_limit_reached = 2; 596 optional int64 late_log_event_skipped = 3; 597 optional int64 skipped_forward_buckets = 4; 598 optional int64 bad_value_type = 5; 599 optional int64 condition_change_in_next_bucket = 6; 600 optional int64 invalidated_bucket = 7; 601 optional int64 bucket_dropped = 8; 602 optional int64 min_bucket_boundary_delay_ns = 9; 603 optional int64 max_bucket_boundary_delay_ns = 10; 604 optional int64 bucket_unknown_condition = 11; 605 optional int64 bucket_count = 12; 606 reserved 13 to 15; 607 } 608 repeated AtomMetricStats atom_metric_stats = 17; 609 610 message LoggerErrorStats { 611 optional int32 logger_disconnection_sec = 1; 612 optional int32 error_code = 2; 613 } 614 repeated LoggerErrorStats logger_error_stats = 11; 615 616 message PeriodicAlarmStats { 617 optional int32 alarms_registered = 1; 618 } 619 optional PeriodicAlarmStats periodic_alarm_stats = 12; 620 621 message SkippedLogEventStats { 622 optional int32 tag = 1; 623 optional int64 elapsed_timestamp_nanos = 2; 624 } 625 repeated SkippedLogEventStats skipped_log_event_stats = 13; 626 627 repeated int64 log_loss_stats = 14; 628 629 repeated int32 system_restart_sec = 15; 630 631 message LogLossStats { 632 optional int32 detected_time_sec = 1; 633 optional int32 count = 2; 634 optional int32 last_error = 3; 635 optional int32 last_tag = 4; 636 optional int32 uid = 5; 637 optional int32 pid = 6; 638 } 639 repeated LogLossStats detected_log_loss = 16; 640 641 message EventQueueOverflow { 642 optional int32 count = 1; 643 optional int64 max_queue_history_ns = 2; 644 optional int64 min_queue_history_ns = 3; 645 } 646 647 optional EventQueueOverflow queue_overflow = 18; 648 649 message ActivationBroadcastGuardrail { 650 optional int32 uid = 1; 651 repeated int32 guardrail_met_sec = 2; 652 } 653 654 repeated ActivationBroadcastGuardrail activation_guardrail_stats = 19; 655 656 message RestrictedMetricStats { 657 optional int64 restricted_metric_id = 1; 658 optional int64 insert_error = 2; 659 optional int64 table_creation_error = 3; 660 optional int64 table_deletion_error = 4; 661 repeated int64 flush_latency_ns = 5; 662 optional int64 category_changed_count = 6; 663 } 664 665 message RestrictedMetricQueryStats { 666 optional int32 calling_uid = 1; 667 optional int64 config_id = 2; 668 optional int32 config_uid = 3; 669 optional string config_package = 4; 670 optional InvalidQueryReason invalid_query_reason = 5; 671 optional int64 query_wall_time_ns = 6; 672 optional bool has_error = 7; 673 optional string query_error = 8; 674 optional int64 query_latency_ns = 9; 675 } 676 repeated RestrictedMetricQueryStats restricted_metric_query_stats = 20; 677 optional uint32 shard_offset = 21; 678 optional int32 statsd_stats_id = 22; 679 680 message SubscriptionStats { 681 message PerSubscriptionStats { 682 optional int32 id = 1; 683 optional int32 pushed_atom_count = 2; 684 optional int32 pulled_atom_count = 3; 685 optional int32 start_time_sec = 4; 686 optional int32 end_time_sec = 5; 687 optional int32 flush_count = 6; 688 } 689 repeated PerSubscriptionStats per_subscription_stats = 1; 690 optional int32 pull_thread_wakeup_count = 2; 691 } 692 693 optional SubscriptionStats subscription_stats = 23; 694 695 message SocketLossStats { 696 message LossStatsPerUid { 697 message AtomIdLossStats { 698 optional int32 atom_id = 1; 699 optional int32 error = 2; 700 optional int32 count = 3; 701 } 702 optional int32 uid = 1; 703 optional int64 first_timestamp_nanos = 2; 704 optional int64 last_timestamp_nanos = 3; 705 repeated AtomIdLossStats atom_id_loss_stats = 4; 706 } 707 708 repeated LossStatsPerUid loss_stats_per_uid = 1; 709 710 // tracks overflow of stats container on the libstatssocket side per logging application 711 message LossStatsOverflowCounters { 712 optional int32 uid = 1; 713 optional int32 count = 2; 714 } 715 716 repeated LossStatsOverflowCounters loss_stats_overflow_counters = 2; 717 } 718 719 optional SocketLossStats socket_loss_stats = 24; 720 721 message EventQueueStats { 722 optional int32 max_size_observed = 1; 723 optional int64 max_size_observed_elapsed_nanos = 2; 724 } 725 726 optional EventQueueStats event_queue_stats = 25; 727 728 // Tracks info about reads from the socket. 729 message SocketReadStats { 730 // This is a histogram of sizes of the batched reads. The bins are as follows: 731 // [0, 1, 2, 3, 4, 5-9, 10-19, 20-29, 30-39, 40-49, 50-59, 60-69, 70-79, 80-89, 90-99, 732 // 100-199, 200-299, 300-399, 400-499, 500-599, 600-699, 700-799, 800-899, 900-999, 733 // 1000-1199, 1200-1399, 1400-1599, 1600-1799, 1800-1999, 2000+] 734 repeated int64 batched_read_size = 1; 735 736 message LargeBatchReadStats { 737 optional int64 last_read_time_elapsed_ns = 1; 738 optional int64 curr_read_time_elapsed_ns = 2; 739 optional int64 min_atom_time_elapsed_ns = 3; 740 optional int64 max_atom_time_elapsed_ns = 4; 741 optional int64 total_atoms_read = 5; 742 743 message BatchedAtomReadStats { 744 optional int32 atom_id = 1; 745 optional int32 count = 2; 746 } 747 repeated BatchedAtomReadStats atom_stats = 6; 748 } 749 repeated LargeBatchReadStats large_batch_read_stats = 2; 750 } 751 752 optional SocketReadStats socket_read_stats = 26; 753 754 message ErrorStats { 755 repeated CounterStats counters = 1; 756 } 757 758 optional ErrorStats error_stats = 27; 759} 760 761message AlertTriggerDetails { 762 message MetricValue { 763 optional int64 metric_id = 1; 764 optional DimensionsValue dimension_in_what = 2; 765 optional DimensionsValue dimension_in_condition = 3 [deprecated = true]; 766 optional int64 value = 4; 767 } 768 oneof value { 769 MetricValue trigger_metric = 1; 770 EventMetricData trigger_event = 2; 771 } 772 optional UidMapping.PackageInfoSnapshot package_info = 3; 773} 774