/* * 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.os"; option java_outer_classname = "StatsLog"; import "frameworks/proto_logging/stats/atoms.proto"; import "packages/modules/StatsD/statsd/src/guardrail/stats_log_enums.proto"; message DimensionsValue { optional int32 field = 1; oneof value { string value_str = 2; int32 value_int = 3; int64 value_long = 4; bool value_bool = 5; float value_float = 6; DimensionsValueTuple value_tuple = 7; uint64 value_str_hash = 8; } } message DimensionsValueTuple { repeated DimensionsValue dimensions_value = 1; } message StateValue { optional int32 atom_id = 1; oneof contents { int64 group_id = 2; int32 value = 3; } } message AggregatedAtomInfo { optional Atom atom = 1; repeated int64 elapsed_timestamp_nanos = 2; } message EventMetricData { optional int64 elapsed_timestamp_nanos = 1; optional Atom atom = 2; optional int64 wall_clock_timestamp_nanos = 3 [deprecated = true]; optional AggregatedAtomInfo aggregated_atom_info = 4; } message CountBucketInfo { optional int64 start_bucket_elapsed_nanos = 1; optional int64 end_bucket_elapsed_nanos = 2; optional int64 count = 3; optional int64 bucket_num = 4; optional int64 start_bucket_elapsed_millis = 5; optional int64 end_bucket_elapsed_millis = 6; optional int64 condition_true_nanos = 7; } message CountMetricData { optional DimensionsValue dimensions_in_what = 1; repeated StateValue slice_by_state = 6; repeated CountBucketInfo bucket_info = 3; repeated DimensionsValue dimension_leaf_values_in_what = 4; optional DimensionsValue dimensions_in_condition = 2 [deprecated = true]; repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true]; } message DurationBucketInfo { optional int64 start_bucket_elapsed_nanos = 1; optional int64 end_bucket_elapsed_nanos = 2; optional int64 duration_nanos = 3; optional int64 bucket_num = 4; optional int64 start_bucket_elapsed_millis = 5; optional int64 end_bucket_elapsed_millis = 6; optional int64 condition_true_nanos = 7; } message DurationMetricData { optional DimensionsValue dimensions_in_what = 1; repeated StateValue slice_by_state = 6; repeated DurationBucketInfo bucket_info = 3; repeated DimensionsValue dimension_leaf_values_in_what = 4; optional DimensionsValue dimensions_in_condition = 2 [deprecated = true]; repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true]; } message Histogram { // Counts for histogram bins. // Encoding is as follows: // * n >= 0 represents the actual count // * n == -1 should not be used // * n <= -2 represents -n consecutive bins with count of 0 repeated sint32 count = 1; } message ValueBucketInfo { optional int64 start_bucket_elapsed_nanos = 1; optional int64 end_bucket_elapsed_nanos = 2; optional int64 value = 3 [deprecated = true]; oneof single_value { int64 value_long = 7 [deprecated = true]; double value_double = 8 [deprecated = true]; } message Value { optional int32 index = 1; oneof value { int64 value_long = 2; double value_double = 3; Histogram histogram = 5; } optional int32 sample_size = 4; } repeated Value values = 9; optional int64 bucket_num = 4; optional int64 start_bucket_elapsed_millis = 5; optional int64 end_bucket_elapsed_millis = 6; optional int64 condition_true_nanos = 10; optional int64 condition_correction_nanos = 11; } message ValueMetricData { optional DimensionsValue dimensions_in_what = 1; repeated StateValue slice_by_state = 6; repeated ValueBucketInfo bucket_info = 3; repeated DimensionsValue dimension_leaf_values_in_what = 4; optional DimensionsValue dimensions_in_condition = 2 [deprecated = true]; repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true]; } message KllBucketInfo { optional int64 start_bucket_elapsed_nanos = 1; optional int64 end_bucket_elapsed_nanos = 2; message KllSketch { optional int32 index = 1; optional bytes kll_sketch = 2; } repeated KllSketch sketches = 3; optional int64 bucket_num = 4; optional int64 start_bucket_elapsed_millis = 5; optional int64 end_bucket_elapsed_millis = 6; optional int64 condition_true_nanos = 7; } message KllMetricData { optional DimensionsValue dimensions_in_what = 1; repeated StateValue slice_by_state = 6; repeated KllBucketInfo bucket_info = 3; repeated DimensionsValue dimension_leaf_values_in_what = 4; reserved 2, 5; } message GaugeBucketInfo { optional int64 start_bucket_elapsed_nanos = 1; optional int64 end_bucket_elapsed_nanos = 2; repeated Atom atom = 3; repeated int64 elapsed_timestamp_nanos = 4; repeated int64 wall_clock_timestamp_nanos = 5 [deprecated = true]; optional int64 bucket_num = 6; optional int64 start_bucket_elapsed_millis = 7; optional int64 end_bucket_elapsed_millis = 8; repeated AggregatedAtomInfo aggregated_atom_info = 9; } message GaugeMetricData { optional DimensionsValue dimensions_in_what = 1; // Currently unsupported repeated StateValue slice_by_state = 6; repeated GaugeBucketInfo bucket_info = 3; repeated DimensionsValue dimension_leaf_values_in_what = 4; optional DimensionsValue dimensions_in_condition = 2 [deprecated = true]; repeated DimensionsValue dimension_leaf_values_in_condition = 5 [deprecated = true]; } message StatsLogReport { optional int64 metric_id = 1; // Deprecated. reserved 2, 3; message DropEvent { optional BucketDropReason drop_reason = 1; optional int64 drop_time_millis = 2; } message SkippedBuckets { optional int64 start_bucket_elapsed_nanos = 1; optional int64 end_bucket_elapsed_nanos = 2; optional int64 start_bucket_elapsed_millis = 3; optional int64 end_bucket_elapsed_millis = 4; // The number of drop events is capped by StatsdStats::kMaxLoggedBucketDropEvents. // The current maximum is 10 drop events. repeated DropEvent drop_event = 5; } message EventMetricDataWrapper { repeated EventMetricData data = 1; } message CountMetricDataWrapper { repeated CountMetricData data = 1; } message DurationMetricDataWrapper { repeated DurationMetricData data = 1; } message ValueMetricDataWrapper { repeated ValueMetricData data = 1; repeated SkippedBuckets skipped = 2; } message GaugeMetricDataWrapper { repeated GaugeMetricData data = 1; repeated SkippedBuckets skipped = 2; } message KllMetricDataWrapper { repeated KllMetricData data = 1; repeated SkippedBuckets skipped = 2; } oneof data { EventMetricDataWrapper event_metrics = 4; CountMetricDataWrapper count_metrics = 5; DurationMetricDataWrapper duration_metrics = 6; ValueMetricDataWrapper value_metrics = 7; GaugeMetricDataWrapper gauge_metrics = 8; KllMetricDataWrapper kll_metrics = 16; } optional int64 time_base_elapsed_nano_seconds = 9; optional int64 bucket_size_nano_seconds = 10; optional DimensionsValue dimensions_path_in_what = 11; optional DimensionsValue dimensions_path_in_condition = 12 [deprecated = true]; optional bool is_active = 14; optional bool dimension_guardrail_hit = 17; optional int64 estimated_data_bytes = 18; repeated DataCorruptedReason data_corrupted_reason = 19; // Do not use. reserved 13, 15; } message UidMapping { message PackageInfoSnapshot { message PackageInfo { optional string name = 1; optional int64 version = 2; optional int32 uid = 3; optional bool deleted = 4; optional uint64 name_hash = 5; optional string version_string = 6; optional uint64 version_string_hash = 7; optional string installer = 8; optional uint64 installer_hash = 9; optional uint32 installer_index = 10; optional bytes truncated_certificate_hash = 11; } optional int64 elapsed_timestamp_nanos = 1; repeated PackageInfo package_info = 2; } repeated PackageInfoSnapshot snapshots = 1; message Change { optional bool deletion = 1; optional int64 elapsed_timestamp_nanos = 2; optional string app = 3; optional int32 uid = 4; optional int64 new_version = 5; optional int64 prev_version = 6; optional uint64 app_hash = 7; optional string new_version_string = 8; optional string prev_version_string = 9; optional uint64 new_version_string_hash = 10; optional uint64 prev_version_string_hash = 11; } repeated Change changes = 2; // Populated when StatsdConfig.hash_strings_in_metric_reports = true repeated uint64 installer_hash = 3; // Populated when StatsdConfig.hash_strings_in_metric_reports = false repeated string installer_name = 4; } message ConfigMetricsReport { repeated StatsLogReport metrics = 1; optional UidMapping uid_map = 2; optional int64 last_report_elapsed_nanos = 3; optional int64 current_report_elapsed_nanos = 4; optional int64 last_report_wall_clock_nanos = 5; optional int64 current_report_wall_clock_nanos = 6; message Annotation { optional int64 field_int64 = 1; optional int32 field_int32 = 2; } repeated Annotation annotation = 7; optional DumpReportReason dump_report_reason = 8; repeated string strings = 9; reserved 10; repeated DataCorruptedReason data_corrupted_reason = 11; optional int64 estimated_data_bytes = 12; } message ConfigMetricsReportList { message ConfigKey { optional int32 uid = 1; optional int64 id = 2; } optional ConfigKey config_key = 1; repeated ConfigMetricsReport reports = 2; optional int32 report_number = 3; optional int32 statsd_stats_id = 4; reserved 10 to 13, 101; } message StatsdStatsReport { optional int32 stats_begin_time_sec = 1; optional int32 stats_end_time_sec = 2; message InvalidConfigReason { optional InvalidConfigReasonEnum reason = 1; optional int64 metric_id = 2; optional int64 state_id = 3; optional int64 alert_id = 4; optional int64 alarm_id = 5; optional int64 subscription_id = 6; repeated int64 matcher_id = 7; repeated int64 condition_id = 8; } message MatcherStats { optional int64 id = 1; optional int32 matched_times = 2; } message ConditionStats { optional int64 id = 1; optional int32 max_tuple_counts = 2; } message MetricStats { optional int64 id = 1; optional int32 max_tuple_counts = 2; } message AlertStats { optional int64 id = 1; optional int32 alerted_times = 2; } message ConfigStats { optional int32 uid = 1; optional int64 id = 2; optional int32 creation_time_sec = 3; optional int32 deletion_time_sec = 4; optional int32 reset_time_sec = 19; optional int32 metric_count = 5; optional int32 condition_count = 6; optional int32 matcher_count = 7; optional int32 alert_count = 8; optional bool is_valid = 9; optional InvalidConfigReason invalid_config_reason = 24; repeated int32 broadcast_sent_time_sec = 10; repeated int32 data_drop_time_sec = 11; repeated int64 data_drop_bytes = 21; repeated int32 dump_report_time_sec = 12; repeated int32 dump_report_data_size = 20; repeated MatcherStats matcher_stats = 13; repeated ConditionStats condition_stats = 14; repeated MetricStats metric_stats = 15; repeated AlertStats alert_stats = 16; repeated MetricStats metric_dimension_in_condition_stats = 17 [deprecated = true]; message Annotation { optional int64 field_int64 = 1; optional int32 field_int32 = 2; } repeated Annotation annotation = 18; repeated int32 activation_time_sec = 22; repeated int32 deactivation_time_sec = 23; repeated RestrictedMetricStats restricted_metric_stats = 25; optional bool device_info_table_creation_failed = 26; optional int32 restricted_db_corrupted_count = 27; repeated int64 restricted_flush_latency = 28; repeated int64 restricted_db_size_time_sec = 29; repeated int64 restricted_db_size_bytes = 30; repeated int32 dump_report_number = 31; optional int32 db_deletion_stat_failed = 32; optional int32 db_deletion_size_exceeded_limit = 33; optional int32 db_deletion_config_invalid = 34; optional int32 db_deletion_too_old = 35; optional int32 db_deletion_config_removed = 36; optional int32 db_deletion_config_updated = 37; optional int32 config_metadata_provider_promotion_failed = 38; } repeated ConfigStats config_stats = 3; message AtomStats { optional int32 tag = 1; optional int32 count = 2; optional int32 error_count = 3; optional int32 dropped_count = 4; optional int32 skip_count = 5; } repeated AtomStats atom_stats = 7; message UidMapStats { optional int32 changes = 1; optional int32 bytes_used = 2; optional int32 dropped_changes = 3; optional int32 deleted_apps = 4; } optional UidMapStats uidmap_stats = 8; message AnomalyAlarmStats { optional int32 alarms_registered = 1; } optional AnomalyAlarmStats anomaly_alarm_stats = 9; message PulledAtomStats { optional int32 atom_id = 1; optional int64 total_pull = 2; optional int64 total_pull_from_cache = 3; optional int64 min_pull_interval_sec = 4; optional int64 average_pull_time_nanos = 5; optional int64 max_pull_time_nanos = 6; optional int64 average_pull_delay_nanos = 7; optional int64 max_pull_delay_nanos = 8; optional int64 data_error = 9; optional int64 pull_timeout = 10; optional int64 pull_exceed_max_delay = 11; optional int64 pull_failed = 12; optional int64 stats_companion_pull_failed = 13 [deprecated = true]; optional int64 stats_companion_pull_binder_transaction_failed = 14 [deprecated = true]; optional int64 empty_data = 15; optional int64 registered_count = 16; optional int64 unregistered_count = 17; optional int32 atom_error_count = 18; optional int64 binder_call_failed = 19; optional int64 failed_uid_provider_not_found = 20; optional int64 puller_not_found = 21; message PullTimeoutMetadata { optional int64 pull_timeout_uptime_millis = 1; optional int64 pull_timeout_elapsed_millis = 2; } repeated PullTimeoutMetadata pull_atom_metadata = 22; optional int32 subscription_pull_count = 23; } repeated PulledAtomStats pulled_atom_stats = 10; message AtomMetricStats { optional int64 metric_id = 1; optional int64 hard_dimension_limit_reached = 2; optional int64 late_log_event_skipped = 3; optional int64 skipped_forward_buckets = 4; optional int64 bad_value_type = 5; optional int64 condition_change_in_next_bucket = 6; optional int64 invalidated_bucket = 7; optional int64 bucket_dropped = 8; optional int64 min_bucket_boundary_delay_ns = 9; optional int64 max_bucket_boundary_delay_ns = 10; optional int64 bucket_unknown_condition = 11; optional int64 bucket_count = 12; reserved 13 to 15; } repeated AtomMetricStats atom_metric_stats = 17; message LoggerErrorStats { optional int32 logger_disconnection_sec = 1; optional int32 error_code = 2; } repeated LoggerErrorStats logger_error_stats = 11; message PeriodicAlarmStats { optional int32 alarms_registered = 1; } optional PeriodicAlarmStats periodic_alarm_stats = 12; message SkippedLogEventStats { optional int32 tag = 1; optional int64 elapsed_timestamp_nanos = 2; } repeated SkippedLogEventStats skipped_log_event_stats = 13; repeated int64 log_loss_stats = 14; repeated int32 system_restart_sec = 15; message LogLossStats { optional int32 detected_time_sec = 1; optional int32 count = 2; optional int32 last_error = 3; optional int32 last_tag = 4; optional int32 uid = 5; optional int32 pid = 6; } repeated LogLossStats detected_log_loss = 16; message EventQueueOverflow { optional int32 count = 1; optional int64 max_queue_history_ns = 2; optional int64 min_queue_history_ns = 3; } optional EventQueueOverflow queue_overflow = 18; message ActivationBroadcastGuardrail { optional int32 uid = 1; repeated int32 guardrail_met_sec = 2; } repeated ActivationBroadcastGuardrail activation_guardrail_stats = 19; message RestrictedMetricStats { optional int64 restricted_metric_id = 1; optional int64 insert_error = 2; optional int64 table_creation_error = 3; optional int64 table_deletion_error = 4; repeated int64 flush_latency_ns = 5; optional int64 category_changed_count = 6; } message RestrictedMetricQueryStats { optional int32 calling_uid = 1; optional int64 config_id = 2; optional int32 config_uid = 3; optional string config_package = 4; optional InvalidQueryReason invalid_query_reason = 5; optional int64 query_wall_time_ns = 6; optional bool has_error = 7; optional string query_error = 8; optional int64 query_latency_ns = 9; } repeated RestrictedMetricQueryStats restricted_metric_query_stats = 20; optional uint32 shard_offset = 21; optional int32 statsd_stats_id = 22; message SubscriptionStats { message PerSubscriptionStats { optional int32 id = 1; optional int32 pushed_atom_count = 2; optional int32 pulled_atom_count = 3; optional int32 start_time_sec = 4; optional int32 end_time_sec = 5; optional int32 flush_count = 6; } repeated PerSubscriptionStats per_subscription_stats = 1; optional int32 pull_thread_wakeup_count = 2; } optional SubscriptionStats subscription_stats = 23; message SocketLossStats { message LossStatsPerUid { message AtomIdLossStats { optional int32 atom_id = 1; optional int32 error = 2; optional int32 count = 3; } optional int32 uid = 1; optional int64 first_timestamp_nanos = 2; optional int64 last_timestamp_nanos = 3; repeated AtomIdLossStats atom_id_loss_stats = 4; } repeated LossStatsPerUid loss_stats_per_uid = 1; // tracks overflow of stats container on the libstatssocket side per logging application message LossStatsOverflowCounters { optional int32 uid = 1; optional int32 count = 2; } repeated LossStatsOverflowCounters loss_stats_overflow_counters = 2; } optional SocketLossStats socket_loss_stats = 24; message EventQueueStats { optional int32 max_size_observed = 1; optional int64 max_size_observed_elapsed_nanos = 2; } optional EventQueueStats event_queue_stats = 25; // Tracks info about reads from the socket. message SocketReadStats { // This is a histogram of sizes of the batched reads. The bins are as follows: // [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, // 100-199, 200-299, 300-399, 400-499, 500-599, 600-699, 700-799, 800-899, 900-999, // 1000-1199, 1200-1399, 1400-1599, 1600-1799, 1800-1999, 2000+] repeated int64 batched_read_size = 1; message LargeBatchReadStats { optional int64 last_read_time_elapsed_ns = 1; optional int64 curr_read_time_elapsed_ns = 2; optional int64 min_atom_time_elapsed_ns = 3; optional int64 max_atom_time_elapsed_ns = 4; optional int64 total_atoms_read = 5; message BatchedAtomReadStats { optional int32 atom_id = 1; optional int32 count = 2; } repeated BatchedAtomReadStats atom_stats = 6; } repeated LargeBatchReadStats large_batch_read_stats = 2; } optional SocketReadStats socket_read_stats = 26; } message AlertTriggerDetails { message MetricValue { optional int64 metric_id = 1; optional DimensionsValue dimension_in_what = 2; optional DimensionsValue dimension_in_condition = 3 [deprecated = true]; optional int64 value = 4; } oneof value { MetricValue trigger_metric = 1; EventMetricData trigger_event = 2; } optional UidMapping.PackageInfoSnapshot package_info = 3; }