/*
 * 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";

import "frameworks/base/cmds/statsd/src/perfetto/perfetto_config.proto";

enum Position {
  POSITION_UNKNOWN = 0;

  FIRST = 1;

  LAST = 2;

  ANY = 3;
}

enum TimeUnit {
  TIME_UNIT_UNSPECIFIED = 0;
  ONE_MINUTE = 1;
  FIVE_MINUTES = 2;
  TEN_MINUTES = 3;
  THIRTY_MINUTES = 4;
  ONE_HOUR = 5;
  THREE_HOURS = 6;
  SIX_HOURS = 7;
  TWELVE_HOURS = 8;
  ONE_DAY = 9;
  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;
  }
}

message MessageMatcher {
  repeated FieldValueMatcher field_value_matcher = 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 = FALSE];

  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 MetricConditionLink {
  optional int64 condition = 1;

  optional FieldMatcher fields_in_what = 2;

  optional FieldMatcher fields_in_condition = 3;
}

message FieldFilter {
  optional bool include_all = 1 [default = false];
  optional FieldMatcher fields = 2;
}

message EventMetric {
  optional int64 id = 1;

  optional int64 what = 2;

  optional int64 condition = 3;

  repeated MetricConditionLink links = 4;
}

message CountMetric {
  optional int64 id = 1;

  optional int64 what = 2;

  optional int64 condition = 3;

  optional FieldMatcher dimensions_in_what = 4;

  optional FieldMatcher dimensions_in_condition = 7;

  optional TimeUnit bucket = 5;

  repeated MetricConditionLink links = 6;
}

message DurationMetric {
  optional int64 id = 1;

  optional int64 what = 2;

  optional int64 condition = 3;

  repeated MetricConditionLink links = 4;

  enum AggregationType {
    SUM = 1;

    MAX_SPARSE = 2;
  }
  optional AggregationType aggregation_type = 5 [default = SUM];

  optional FieldMatcher dimensions_in_what = 6;

  optional FieldMatcher dimensions_in_condition = 8;

  optional TimeUnit bucket = 7;
}

message GaugeMetric {
  optional int64 id = 1;

  optional int64 what = 2;

  optional FieldFilter gauge_fields_filter = 3;

  optional int64 condition = 4;

  optional FieldMatcher dimensions_in_what = 5;

  optional FieldMatcher dimensions_in_condition = 8;

  optional TimeUnit bucket = 6;

  repeated MetricConditionLink links = 7;

  enum SamplingType {
    RANDOM_ONE_SAMPLE = 1;
    ALL_CONDITION_CHANGES = 2;
  }
  optional SamplingType sampling_type = 9 [default = RANDOM_ONE_SAMPLE] ;
}

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;

  optional FieldMatcher dimensions_in_condition = 9;

  optional TimeUnit bucket = 6;

  repeated MetricConditionLink links = 7;

  enum AggregationType {
    SUM = 1;
  }
  optional AggregationType aggregation_type = 8 [default = SUM];
}

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;
}

message PerfettoDetails {
  optional perfetto.protos.TraceConfig trace_config = 1;
}

message BroadcastSubscriberDetails {
  optional int64 subscriber_id = 1;
}

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;
  }
}

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;
}
