// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package cobalt;

import "observation.proto";

// An Observation is a piece of data sent from a Cobalt client to the Cobalt
// server as input to a Report.
//
// Observations are associated with a specific Metric. They are built on a
// Fuchsia client based on the Events logged for that Metric. Observations are
// associated with a specific Report. They are built for the purpose of
// generating that Report. They are transmitted from the Fuchsia client to
// the Cobalt server where they are aggregated and analyzed in order to generate
// the Report.
//
// Observations may store their data using special privacy-preserving encodings.
// The specification of how to do this is part of the definition of a Report.
// Observations are built for a particular Report and so use an encoding
// appropriate for that Report.
//
// There are different types of Observations that are appropriate for different
// types of Metrics and different types of Reports.
//
// An Observation is always transmitted and stored along with
// some ObservationMetadata that describes, among other things, which Metric
// and which Report it is for and on which day the Observation was formed.
//
// Observations are transmitted from the client to the server encrypted, inside
// the |ciphertext| field of an EncryptedMessage. Many encrypted Observations
// are transmitted together inside of an ObservationBatch.
message Observation2 {
  // Next observation_type ID: 6
  // Next general ID: 1002;

  // An Observation has one of the following types.
  oneof observation_type {
    IntegerEventObservation numeric_event = 1;
    HistogramObservation histogram = 2;
    BasicRapporObservation basic_rappor = 3;
    RapporObservation string_rappor = 4;
    ForculusObservation forculus = 5;
    UniqueActivesObservation unique_actives = 6;
    CustomObservation custom = 1000;
  }

  // A quasi-unique identifier for this observation. This is randomly generated
  // on the client and used on the server as part of a fully-unique identifier.
  // This field allows the operation of sending an Observation to the Cobalt
  // server to be idempotent: If the same Observation is transmitted twice then
  // the server will store the observation only once.
  bytes random_id = 1001;
}

// Observations of type IntegerEventObservation contain an event type specified
// by its index, a component specified by its hash, and an integer value.
// This type of Observation is used in the following cases:
//
// (a) A Metric of type EVENT_COUT and a Report of type
//     EVENT_COMPONENT_OCCURRENCE_COUNT.
//     In this case the Observation is *immediate* meaning it is generated
//     directly from a single Event as soon as the Event is logged. The |value|
//     field contains the count. Note that the |period_duration_micros| from the
//     Event is not used. It's purpose is to compute event *rates* which are not
//     relevant to the EVENT_COMPONENT_OCCURRENCE_COUNT Report type.
//
// (b) A Metric of type ELAPSED_TIME and a Report of type
//     NUMERIC_AGGREGATION , INT_RANGE_HISTOGRAM or
//     NUMERIC_PERF_RAW_DUMP. In this case the Observation again is
//     immediate. The |value| field contains the duration in microseconds.
//
// (c) A Metric of type FrameRateMetric and a Report of type
//     NUMERIC_AGGREGATION, INT_RANGE_HISTOGRAM or
//     NUMERIC_PERF_RAW_DUMP. In this case the Observation again is
//     immediate. The |value| field contains round(fps * 1000).
//
// (d) A Metric of type MemoryUseMetric and a Report of type
//     NUMERIC_AGGREGATION , INT_RANGE_HISTOGRAM or
//     NUMERIC_PERF_RAW_DUMP. In this case the Observation again is
//     immediate. The |value| field contains the number of bytes.
message IntegerEventObservation {
  // The index of the event type that occurred.
  uint32 event_code = 1;

  // A hash of the component name. If component_name is empty then this field
  // will be empty. Otherwise this field will contain the 32-byte SHA256
  // hash of component_name.
  bytes component_name_hash = 2;

  int64 value = 3;
}

// A pair consisting of a bucket index and a count. Each bucket is
// an integer range. The definition of the buckets and their indices
// is given in the MetricDefinition.
message HistogramBucket {
  // The index of one of the buckets.
  uint32 index = 1;
  // The count for that bucket.
  uint64 count = 2;
};

// Observations of type HistogramObservation contain an event type specified
// by its index, a component specified by its hash, and a histogram of
// integer-range buckets. This type of Observation is used in the
// following case:
//
// A MetricDefinition of type INT_HISTOGRAM and a Report of type
// INT_RANGE_HISTOGRAM. In this case the Observation is *immediate* meaning
// it is generated directly from a single INT_HISTOGRAM Event as soon as
// the Event is logged.
message HistogramObservation {
  // The index of the event that occurred.
  uint32 event_code = 1;

  // A hash of the component name. If component_name is empty then this field
  // will be empty. Otherwise this field will contain the 32-byte SHA256
  // hash of component_name.
  bytes component_name_hash = 2;

  // The set of bucket indices and their corresponding counts.
  repeated HistogramBucket buckets = 3;
};

// Observations of type UniqueActivesObservation are used when a
// MetricDefinition of type EVENT_OCCURRED is reported with a
// ReportDefinition of type UNIQUE_N_DAY_ACTIVES. An Observation
// of this type is created by aggregating Events on-device over
// a rolling window of 1, 7, or 30 days.
//
// A UniqueActivesObservation is generated each day for each event code of the
// associated MetricDefinition, for each window size in the associated
// ReportDefinition. A UniqueActivesObservation generated for a given day, event
// code, and window size encodes the occurrence or non-occurrence of at least
// one Event with that event code during the window of that size ending on that
// day.
message UniqueActivesObservation {
  // A BasicRapporObservation encoding a single bit representing the occurrence
  // or non-occurrence of |event_code| during the window associated with this
  // Observation.
  BasicRapporObservation basic_rappor_obs = 1;
  // The size in days of the rolling window associated with this Observation.
  uint32 window_size = 2;
  // The event code associated with this Observation.
  uint32 event_code = 3;
};

// A value for a single dimension of a Cobalt custom metric. Both CustomEvent
// (the object logged to the Cobalt client on the device) and CustomObservation
// (transmitted from the Cobalt client device to the server) contain a
// CustomDimension values.
message CustomDimensionValue {
  oneof data {
    // A human-readable, UTF8 string. Maps to a proto string.
    string string_value = 1;

    // An integer. Maps to a proto int64.
    int64 int_value = 2;

    // An uninterpreted sequence of bytes. Maps to proto bytes.
    bytes blob_value = 3;

    // The index of an enumerated value, specified in the metric configuration.
    // Usually used for the index of an enum value defined in the associated
    // .proto file.
    uint32 index_value = 4;

    // A double-precision floating point value. Maps to a proto double.
    double double_value = 5;
  }
}

// Observations of this type contain a custom number of parts each with a
// custom name and a custom type.
//
// This type of Observation is used in the following case:
//
// A MetricDefinition of type CUSTOM and Report of type
// CUSTOM_RAW_DUMP. In this case the Observation is *immediate* meaning it is
// generated directly from a single CUSTOM Event as soon as the Event is
// logged. The Event contains a list of (name, value) pairs where the names
// are the names of the CUSTOM parts and the values are of the appropriate
// type defined in the CUSTOM. A CustomObservation directly stores those
// pairs.
message CustomObservation {
  // The keys are the names of the metric dimensions to which each
  // CustomDimensionValue is associated.
  map<string, CustomDimensionValue> values = 1;
}
