// Copyright 2016 Google Inc.
//
// 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 = "proto3";

package google.api.servicecontrol.v1;

import "google/api/annotations.proto";
import "google/api/servicecontrol/v1/distribution.proto";
import "google/protobuf/timestamp.proto";

option cc_enable_arenas = true;
option go_package = "google.golang.org/genproto/googleapis/api/servicecontrol/v1;servicecontrol";
option java_multiple_files = true;
option java_outer_classname = "MetricValueSetProto";
option java_package = "com.google.api.servicecontrol.v1";


// Represents a single metric value.
message MetricValue {
  // The labels describing the metric value.
  // See comments on [google.api.servicecontrol.v1.Operation.labels][google.api.servicecontrol.v1.Operation.labels] for
  // the overriding relationship.
  map<string, string> labels = 1;

  // The start of the time period over which this metric value's measurement
  // applies. The time period has different semantics for different metric
  // types (cumulative, delta, and gauge). See the metric definition
  // documentation in the service configuration for details.
  google.protobuf.Timestamp start_time = 2;

  // The end of the time period over which this metric value's measurement
  // applies.
  google.protobuf.Timestamp end_time = 3;

  // The value. The type of value used in the request must
  // agree with the metric definition in the service configuration, otherwise
  // the MetricValue is rejected.
  oneof value {
    // A boolean value.
    bool bool_value = 4;

    // A signed 64-bit integer value.
    int64 int64_value = 5;

    // A double precision floating point value.
    double double_value = 6;

    // A text string value.
    string string_value = 7;

    // A distribution value.
    Distribution distribution_value = 8;
  }
}

// Represents a set of metric values in the same metric.
// Each metric value in the set should have a unique combination of start time,
// end time, and label values.
message MetricValueSet {
  // The metric name defined in the service configuration.
  string metric_name = 1;

  // The values in this metric.
  repeated MetricValue metric_values = 2;
}
