# frozen_string_literal: true
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: google/api/metric.proto

require 'google/protobuf'

require 'google/api/label_pb'
require 'google/api/launch_stage_pb'
require 'google/protobuf/duration_pb'


descriptor_data = "\n\x17google/api/metric.proto\x12\ngoogle.api\x1a\x16google/api/label.proto\x1a\x1dgoogle/api/launch_stage.proto\x1a\x1egoogle/protobuf/duration.proto\"\x9f\x06\n\x10MetricDescriptor\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x08 \x01(\t\x12+\n\x06labels\x18\x02 \x03(\x0b\x32\x1b.google.api.LabelDescriptor\x12<\n\x0bmetric_kind\x18\x03 \x01(\x0e\x32\'.google.api.MetricDescriptor.MetricKind\x12:\n\nvalue_type\x18\x04 \x01(\x0e\x32&.google.api.MetricDescriptor.ValueType\x12\x0c\n\x04unit\x18\x05 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x06 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x07 \x01(\t\x12G\n\x08metadata\x18\n \x01(\x0b\x32\x35.google.api.MetricDescriptor.MetricDescriptorMetadata\x12-\n\x0claunch_stage\x18\x0c \x01(\x0e\x32\x17.google.api.LaunchStage\x12 \n\x18monitored_resource_types\x18\r \x03(\t\x1a\xb0\x01\n\x18MetricDescriptorMetadata\x12\x31\n\x0claunch_stage\x18\x01 \x01(\x0e\x32\x17.google.api.LaunchStageB\x02\x18\x01\x12\x30\n\rsample_period\x18\x02 \x01(\x0b\x32\x19.google.protobuf.Duration\x12/\n\x0cingest_delay\x18\x03 \x01(\x0b\x32\x19.google.protobuf.Duration\"O\n\nMetricKind\x12\x1b\n\x17METRIC_KIND_UNSPECIFIED\x10\x00\x12\t\n\x05GAUGE\x10\x01\x12\t\n\x05\x44\x45LTA\x10\x02\x12\x0e\n\nCUMULATIVE\x10\x03\"q\n\tValueType\x12\x1a\n\x16VALUE_TYPE_UNSPECIFIED\x10\x00\x12\x08\n\x04\x42OOL\x10\x01\x12\t\n\x05INT64\x10\x02\x12\n\n\x06\x44OUBLE\x10\x03\x12\n\n\x06STRING\x10\x04\x12\x10\n\x0c\x44ISTRIBUTION\x10\x05\x12\t\n\x05MONEY\x10\x06\"u\n\x06Metric\x12\x0c\n\x04type\x18\x03 \x01(\t\x12.\n\x06labels\x18\x02 \x03(\x0b\x32\x1e.google.api.Metric.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42_\n\x0e\x63om.google.apiB\x0bMetricProtoP\x01Z7google.golang.org/genproto/googleapis/api/metric;metric\xa2\x02\x04GAPIb\x06proto3"

pool = Google::Protobuf::DescriptorPool.generated_pool

begin
  pool.add_serialized_file(descriptor_data)
rescue TypeError
  # Compatibility code: will be removed in the next major version.
  require 'google/protobuf/descriptor_pb'
  parsed = Google::Protobuf::FileDescriptorProto.decode(descriptor_data)
  parsed.clear_dependency
  serialized = parsed.class.encode(parsed)
  file = pool.add_serialized_file(serialized)
  warn "Warning: Protobuf detected an import path issue while loading generated file #{__FILE__}"
  imports = [
    ["google.api.LabelDescriptor", "google/api/label.proto"],
    ["google.protobuf.Duration", "google/protobuf/duration.proto"],
  ]
  imports.each do |type_name, expected_filename|
    import_file = pool.lookup(type_name).file_descriptor
    if import_file.name != expected_filename
      warn "- #{file.name} imports #{expected_filename}, but that import was loaded as #{import_file.name}"
    end
  end
  warn "Each proto file must use a consistent fully-qualified name."
  warn "This will become an error in the next major version."
end

module Google
  module Api
    MetricDescriptor = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.api.MetricDescriptor").msgclass
    MetricDescriptor::MetricDescriptorMetadata = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.api.MetricDescriptor.MetricDescriptorMetadata").msgclass
    MetricDescriptor::MetricKind = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.api.MetricDescriptor.MetricKind").enummodule
    MetricDescriptor::ValueType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.api.MetricDescriptor.ValueType").enummodule
    Metric = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("google.api.Metric").msgclass
  end
end

#### Source proto file: google/api/metric.proto ####
#
# // Copyright 2024 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";
# import "google/api/launch_stage.proto";
# import "google/protobuf/duration.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.
#   // For information on setting the start time and end time based on
#   // the MetricKind, see [TimeInterval][google.monitoring.v3.TimeInterval].
#   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;
#   }
#
#   // Additional annotations that can be used to guide the usage of a metric.
#   message MetricDescriptorMetadata {
#     // Deprecated. Must use the
#     // [MetricDescriptor.launch_stage][google.api.MetricDescriptor.launch_stage]
#     // instead.
#     LaunchStage launch_stage = 1 [deprecated = true];
#
#     // The sampling period of metric data points. For metrics which are written
#     // periodically, consecutive data points are stored at this time interval,
#     // excluding data loss due to errors. Metrics with a higher granularity have
#     // a smaller sampling period.
#     google.protobuf.Duration sample_period = 2;
#
#     // The delay of data points caused by ingestion. Data points older than this
#     // age are guaranteed to be ingested and available to be read, excluding
#     // data loss due to errors.
#     google.protobuf.Duration ingest_delay = 3;
#   }
#
#   // 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 metric types have the DNS name
#   // `custom.googleapis.com` or `external.googleapis.com`. Metric types should
#   // use a natural hierarchical grouping. For example:
#   //
#   //     "custom.googleapis.com/invoice/paid/amount"
#   //     "external.googleapis.com/prometheus/up"
#   //     "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 units in which the metric value is reported. It is only applicable
#   // if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The `unit`
#   // defines the representation of the stored metric values.
#   //
#   // Different systems might scale the values to be more easily displayed (so a
#   // value of `0.02kBy` _might_ be displayed as `20By`, and a value of
#   // `3523kBy` _might_ be displayed as `3.5MBy`). However, if the `unit` is
#   // `kBy`, then the value of the metric is always in thousands of bytes, no
#   // matter how it might be displayed.
#   //
#   // If you want a custom metric to record the exact number of CPU-seconds used
#   // by a job, you can create an `INT64 CUMULATIVE` metric whose `unit` is
#   // `s{CPU}` (or equivalently `1s{CPU}` or just `s`). If the job uses 12,005
#   // CPU-seconds, then the value is written as `12005`.
#   //
#   // Alternatively, if you want a custom metric to record data in a more
#   // granular way, you can create a `DOUBLE CUMULATIVE` metric whose `unit` is
#   // `ks{CPU}`, and then write the value `12.005` (which is `12005/1000`),
#   // or use `Kis{CPU}` and write `11.723` (which is `12005/1024`).
#   //
#   // The supported units are a subset of [The Unified Code for Units of
#   // Measure](https://unitsofmeasure.org/ucum.html) standard:
#   //
#   // **Basic units (UNIT)**
#   //
#   // * `bit`   bit
#   // * `By`    byte
#   // * `s`     second
#   // * `min`   minute
#   // * `h`     hour
#   // * `d`     day
#   // * `1`     dimensionless
#   //
#   // **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)
#   // * `Pi`    pebi    (2^50)
#   //
#   // **Grammar**
#   //
#   // The grammar also includes these connectors:
#   //
#   // * `/`    division or ratio (as an infix operator). For examples,
#   //          `kBy/{email}` or `MiBy/10ms` (although you should almost never
#   //          have `/s` in a metric `unit`; rates should always be computed at
#   //          query time from the underlying cumulative or delta value).
#   // * `.`    multiplication or composition (as an infix operator). For
#   //          examples, `GBy.d` or `k{watt}.h`.
#   //
#   // 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`. If the annotation
#   //    is used alone, then the unit is equivalent to `1`. For examples,
#   //    `{request}/s == 1/s`, `By{transmitted}/s == By/s`.
#   // * `NAME` is a sequence of non-blank printable ASCII characters not
#   //    containing `{` or `}`.
#   // * `1` represents a unitary [dimensionless
#   //    unit](https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such
#   //    as in `1/s`. It is typically used when none of the basic units are
#   //    appropriate. For example, "new users per day" can be represented as
#   //    `1/d` or `{new-users}/d` (and a metric value `5` would mean "5 new
#   //    users). Alternatively, "thousands of page views per day" would be
#   //    represented as `1000/d` or `k1/d` or `k{page_views}/d` (and a metric
#   //    value of `5.3` would mean "5300 page views per day").
#   // * `%` represents dimensionless value of 1/100, and annotates values giving
#   //    a percentage (so the metric values are typically in the range of 0..100,
#   //    and a metric value `3` means "3 percent").
#   // * `10^2.%` indicates a metric contains a ratio, typically in the range
#   //    0..1, that will be multiplied by 100 and displayed as a percentage
#   //    (so a metric value `0.03` means "3 percent").
#   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;
#
#   // Optional. Metadata which can be used to guide usage of the metric.
#   MetricDescriptorMetadata metadata = 10;
#
#   // Optional. The launch stage of the metric definition.
#   LaunchStage launch_stage = 12;
#
#   // Read-only. If present, then a [time
#   // series][google.monitoring.v3.TimeSeries], which is identified partially by
#   // a metric type and a
#   // [MonitoredResourceDescriptor][google.api.MonitoredResourceDescriptor], that
#   // is associated with this metric type can only be associated with one of the
#   // monitored resource types listed here.
#   repeated string monitored_resource_types = 13;
# }
#
# // 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;
# }
