metric.proto 6.47 KB
Newer Older
Luca Arrotta's avatar
Luca Arrotta committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
// Copyright 2018 Google LLC.
//
// 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;

import "google/api/label.proto";

option go_package = "google.golang.org/genproto/googleapis/api/metric;metric";
option java_multiple_files = true;
option java_outer_classname = "MetricProto";
option java_package = "com.google.api";
option objc_class_prefix = "GAPI";


// Defines a metric type and its schema. Once a metric descriptor is created,
// deleting or altering it stops data collection and makes the metric type's
// existing data unusable.
message MetricDescriptor {
  // The kind of measurement. It describes how the data is reported.
  enum MetricKind {
    // Do not use this default value.
    METRIC_KIND_UNSPECIFIED = 0;

    // An instantaneous measurement of a value.
    GAUGE = 1;

    // The change in a value during a time interval.
    DELTA = 2;

    // A value accumulated over a time interval.  Cumulative
    // measurements in a time series should have the same start time
    // and increasing end times, until an event resets the cumulative
    // value to zero and sets a new start time for the following
    // points.
    CUMULATIVE = 3;
  }

  // The value type of a metric.
  enum ValueType {
    // Do not use this default value.
    VALUE_TYPE_UNSPECIFIED = 0;

    // The value is a boolean.
    // This value type can be used only if the metric kind is `GAUGE`.
    BOOL = 1;

    // The value is a signed 64-bit integer.
    INT64 = 2;

    // The value is a double precision floating point number.
    DOUBLE = 3;

    // The value is a text string.
    // This value type can be used only if the metric kind is `GAUGE`.
    STRING = 4;

    // The value is a [`Distribution`][google.api.Distribution].
    DISTRIBUTION = 5;

    // The value is money.
    MONEY = 6;
  }

  // The resource name of the metric descriptor.
  string name = 1;

  // The metric type, including its DNS name prefix. The type is not
  // URL-encoded.  All user-defined custom metric types have the DNS name
  // `custom.googleapis.com`.  Metric types should use a natural hierarchical
  // grouping. For example:
  //
  //     "custom.googleapis.com/invoice/paid/amount"
  //     "appengine.googleapis.com/http/server/response_latencies"
  string type = 8;

  // The set of labels that can be used to describe a specific
  // instance of this metric type. For example, the
  // `appengine.googleapis.com/http/server/response_latencies` metric
  // type has a label for the HTTP response code, `response_code`, so
  // you can look at latencies for successful responses or just
  // for responses that failed.
  repeated LabelDescriptor labels = 2;

  // Whether the metric records instantaneous values, changes to a value, etc.
  // Some combinations of `metric_kind` and `value_type` might not be supported.
  MetricKind metric_kind = 3;

  // Whether the measurement is an integer, a floating-point number, etc.
  // Some combinations of `metric_kind` and `value_type` might not be supported.
  ValueType value_type = 4;

  // The unit in which the metric value is reported. It is only applicable
  // if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The
  // supported units are a subset of [The Unified Code for Units of
  // Measure](http://unitsofmeasure.org/ucum.html) standard:
  //
  // **Basic units (UNIT)**
  //
  // * `bit`   bit
  // * `By`    byte
  // * `s`     second
  // * `min`   minute
  // * `h`     hour
  // * `d`     day
  //
  // **Prefixes (PREFIX)**
  //
  // * `k`     kilo    (10**3)
  // * `M`     mega    (10**6)
  // * `G`     giga    (10**9)
  // * `T`     tera    (10**12)
  // * `P`     peta    (10**15)
  // * `E`     exa     (10**18)
  // * `Z`     zetta   (10**21)
  // * `Y`     yotta   (10**24)
  // * `m`     milli   (10**-3)
  // * `u`     micro   (10**-6)
  // * `n`     nano    (10**-9)
  // * `p`     pico    (10**-12)
  // * `f`     femto   (10**-15)
  // * `a`     atto    (10**-18)
  // * `z`     zepto   (10**-21)
  // * `y`     yocto   (10**-24)
  // * `Ki`    kibi    (2**10)
  // * `Mi`    mebi    (2**20)
  // * `Gi`    gibi    (2**30)
  // * `Ti`    tebi    (2**40)
  //
  // **Grammar**
  //
  // The grammar also includes these connectors:
  //
  // * `/`    division (as an infix operator, e.g. `1/s`).
  // * `.`    multiplication (as an infix operator, e.g. `GBy.d`)
  //
  // The grammar for a unit is as follows:
  //
  //     Expression = Component { "." Component } { "/" Component } ;
  //
  //     Component = ( [ PREFIX ] UNIT | "%" ) [ Annotation ]
  //               | Annotation
  //               | "1"
  //               ;
  //
  //     Annotation = "{" NAME "}" ;
  //
  // Notes:
  //
  // * `Annotation` is just a comment if it follows a `UNIT` and is
  //    equivalent to `1` if it is used alone. For examples,
  //    `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.
  // * `NAME` is a sequence of non-blank printable ASCII characters not
  //    containing '{' or '}'.
  // * `1` represents dimensionless value 1, such as in `1/s`.
  // * `%` represents dimensionless value 1/100, and annotates values giving
  //    a percentage.
  string unit = 5;

  // A detailed description of the metric, which can be used in documentation.
  string description = 6;

  // A concise name for the metric, which can be displayed in user interfaces.
  // Use sentence case without an ending period, for example "Request count".
  // This field is optional but it is recommended to be set for any metrics
  // associated with user-visible concepts, such as Quota.
  string display_name = 7;
}

// A specific metric, identified by specifying values for all of the
// labels of a [`MetricDescriptor`][google.api.MetricDescriptor].
message Metric {
  // An existing metric type, see [google.api.MetricDescriptor][google.api.MetricDescriptor].
  // For example, `custom.googleapis.com/invoice/paid/amount`.
  string type = 3;

  // The set of label values that uniquely identify this metric. All
  // labels listed in the `MetricDescriptor` must be assigned values.
  map<string, string> labels = 2;
}