from google.api import label_pb2 as _label_pb2
from google.api import launch_stage_pb2 as _launch_stage_pb2
from google.protobuf import duration_pb2 as _duration_pb2
from google.protobuf.internal import containers as _containers
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
DESCRIPTOR: _descriptor.FileDescriptor

class MetricDescriptor(_message.Message):
    __slots__ = ('name', 'type', 'labels', 'metric_kind', 'value_type', 'unit', 'description', 'display_name', 'metadata', 'launch_stage', 'monitored_resource_types')

    class MetricKind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
        __slots__ = ()
        METRIC_KIND_UNSPECIFIED: _ClassVar[MetricDescriptor.MetricKind]
        GAUGE: _ClassVar[MetricDescriptor.MetricKind]
        DELTA: _ClassVar[MetricDescriptor.MetricKind]
        CUMULATIVE: _ClassVar[MetricDescriptor.MetricKind]
    METRIC_KIND_UNSPECIFIED: MetricDescriptor.MetricKind
    GAUGE: MetricDescriptor.MetricKind
    DELTA: MetricDescriptor.MetricKind
    CUMULATIVE: MetricDescriptor.MetricKind

    class ValueType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
        __slots__ = ()
        VALUE_TYPE_UNSPECIFIED: _ClassVar[MetricDescriptor.ValueType]
        BOOL: _ClassVar[MetricDescriptor.ValueType]
        INT64: _ClassVar[MetricDescriptor.ValueType]
        DOUBLE: _ClassVar[MetricDescriptor.ValueType]
        STRING: _ClassVar[MetricDescriptor.ValueType]
        DISTRIBUTION: _ClassVar[MetricDescriptor.ValueType]
        MONEY: _ClassVar[MetricDescriptor.ValueType]
    VALUE_TYPE_UNSPECIFIED: MetricDescriptor.ValueType
    BOOL: MetricDescriptor.ValueType
    INT64: MetricDescriptor.ValueType
    DOUBLE: MetricDescriptor.ValueType
    STRING: MetricDescriptor.ValueType
    DISTRIBUTION: MetricDescriptor.ValueType
    MONEY: MetricDescriptor.ValueType

    class MetricDescriptorMetadata(_message.Message):
        __slots__ = ('launch_stage', 'sample_period', 'ingest_delay', 'time_series_resource_hierarchy_level')

        class TimeSeriesResourceHierarchyLevel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
            __slots__ = ()
            TIME_SERIES_RESOURCE_HIERARCHY_LEVEL_UNSPECIFIED: _ClassVar[MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel]
            PROJECT: _ClassVar[MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel]
            ORGANIZATION: _ClassVar[MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel]
            FOLDER: _ClassVar[MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel]
        TIME_SERIES_RESOURCE_HIERARCHY_LEVEL_UNSPECIFIED: MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel
        PROJECT: MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel
        ORGANIZATION: MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel
        FOLDER: MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel
        LAUNCH_STAGE_FIELD_NUMBER: _ClassVar[int]
        SAMPLE_PERIOD_FIELD_NUMBER: _ClassVar[int]
        INGEST_DELAY_FIELD_NUMBER: _ClassVar[int]
        TIME_SERIES_RESOURCE_HIERARCHY_LEVEL_FIELD_NUMBER: _ClassVar[int]
        launch_stage: _launch_stage_pb2.LaunchStage
        sample_period: _duration_pb2.Duration
        ingest_delay: _duration_pb2.Duration
        time_series_resource_hierarchy_level: _containers.RepeatedScalarFieldContainer[MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel]

        def __init__(self, launch_stage: _Optional[_Union[_launch_stage_pb2.LaunchStage, str]]=..., sample_period: _Optional[_Union[_duration_pb2.Duration, _Mapping]]=..., ingest_delay: _Optional[_Union[_duration_pb2.Duration, _Mapping]]=..., time_series_resource_hierarchy_level: _Optional[_Iterable[_Union[MetricDescriptor.MetricDescriptorMetadata.TimeSeriesResourceHierarchyLevel, str]]]=...) -> None:
            ...
    NAME_FIELD_NUMBER: _ClassVar[int]
    TYPE_FIELD_NUMBER: _ClassVar[int]
    LABELS_FIELD_NUMBER: _ClassVar[int]
    METRIC_KIND_FIELD_NUMBER: _ClassVar[int]
    VALUE_TYPE_FIELD_NUMBER: _ClassVar[int]
    UNIT_FIELD_NUMBER: _ClassVar[int]
    DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
    DISPLAY_NAME_FIELD_NUMBER: _ClassVar[int]
    METADATA_FIELD_NUMBER: _ClassVar[int]
    LAUNCH_STAGE_FIELD_NUMBER: _ClassVar[int]
    MONITORED_RESOURCE_TYPES_FIELD_NUMBER: _ClassVar[int]
    name: str
    type: str
    labels: _containers.RepeatedCompositeFieldContainer[_label_pb2.LabelDescriptor]
    metric_kind: MetricDescriptor.MetricKind
    value_type: MetricDescriptor.ValueType
    unit: str
    description: str
    display_name: str
    metadata: MetricDescriptor.MetricDescriptorMetadata
    launch_stage: _launch_stage_pb2.LaunchStage
    monitored_resource_types: _containers.RepeatedScalarFieldContainer[str]

    def __init__(self, name: _Optional[str]=..., type: _Optional[str]=..., labels: _Optional[_Iterable[_Union[_label_pb2.LabelDescriptor, _Mapping]]]=..., metric_kind: _Optional[_Union[MetricDescriptor.MetricKind, str]]=..., value_type: _Optional[_Union[MetricDescriptor.ValueType, str]]=..., unit: _Optional[str]=..., description: _Optional[str]=..., display_name: _Optional[str]=..., metadata: _Optional[_Union[MetricDescriptor.MetricDescriptorMetadata, _Mapping]]=..., launch_stage: _Optional[_Union[_launch_stage_pb2.LaunchStage, str]]=..., monitored_resource_types: _Optional[_Iterable[str]]=...) -> None:
        ...

class Metric(_message.Message):
    __slots__ = ('type', 'labels')

    class LabelsEntry(_message.Message):
        __slots__ = ('key', 'value')
        KEY_FIELD_NUMBER: _ClassVar[int]
        VALUE_FIELD_NUMBER: _ClassVar[int]
        key: str
        value: str

        def __init__(self, key: _Optional[str]=..., value: _Optional[str]=...) -> None:
            ...
    TYPE_FIELD_NUMBER: _ClassVar[int]
    LABELS_FIELD_NUMBER: _ClassVar[int]
    type: str
    labels: _containers.ScalarMap[str, str]

    def __init__(self, type: _Optional[str]=..., labels: _Optional[_Mapping[str, str]]=...) -> None:
        ...