import { ServiceType } from "@protobuf-ts/runtime-rpc";
import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
import type { IBinaryWriter } from "@protobuf-ts/runtime";
import type { BinaryReadOptions } from "@protobuf-ts/runtime";
import type { IBinaryReader } from "@protobuf-ts/runtime";
import type { PartialMessage } from "@protobuf-ts/runtime";
import { MessageType } from "@protobuf-ts/runtime";
import { Timestamp } from "../../protobuf/timestamp";
import { Distribution_BucketOptions } from "../../api/distribution";
import { MetricDescriptor } from "../../api/metric";
/**
 * Describes a logs-based metric. The value of the metric is the number of log
 * entries that match a logs filter in a given time interval.
 *
 * Logs-based metrics can also be used to extract values from logs and create a
 * distribution of the values. The distribution records the statistics of the
 * extracted values along with an optional histogram of the values as specified
 * by the bucket options.
 *
 * @generated from protobuf message google.logging.v2.LogMetric
 */
export interface LogMetric {
    /**
     * Required. The client-assigned metric identifier.
     * Examples: `"error_count"`, `"nginx/requests"`.
     *
     * Metric identifiers are limited to 100 characters and can include only the
     * following characters: `A-Z`, `a-z`, `0-9`, and the special characters
     * `_-.,+!*',()%/`. The forward-slash character (`/`) denotes a hierarchy of
     * name pieces, and it cannot be the first character of the name.
     *
     * This field is the `[METRIC_ID]` part of a metric resource name in the
     * format "projects/[PROJECT_ID]/metrics/[METRIC_ID]". Example: If the
     * resource name of a metric is
     * `"projects/my-project/metrics/nginx%2Frequests"`, this field's value is
     * `"nginx/requests"`.
     *
     * @generated from protobuf field: string name = 1;
     */
    name: string;
    /**
     * Optional. A description of this metric, which is used in documentation.
     * The maximum length of the description is 8000 characters.
     *
     * @generated from protobuf field: string description = 2;
     */
    description: string;
    /**
     * Required. An [advanced logs
     * filter](https://cloud.google.com/logging/docs/view/advanced_filters) which
     * is used to match log entries. Example:
     *
     *     "resource.type=gae_app AND severity>=ERROR"
     *
     * The maximum length of the filter is 20000 characters.
     *
     * @generated from protobuf field: string filter = 3;
     */
    filter: string;
    /**
     * Optional. If set to True, then this metric is disabled and it does not
     * generate any points.
     *
     * @generated from protobuf field: bool disabled = 12;
     */
    disabled: boolean;
    /**
     * Optional. The metric descriptor associated with the logs-based metric.
     * If unspecified, it uses a default metric descriptor with a DELTA metric
     * kind, INT64 value type, with no labels and a unit of "1". Such a metric
     * counts the number of log entries matching the `filter` expression.
     *
     * The `name`, `type`, and `description` fields in the `metric_descriptor`
     * are output only, and is constructed using the `name` and `description`
     * field in the LogMetric.
     *
     * To create a logs-based metric that records a distribution of log values, a
     * DELTA metric kind with a DISTRIBUTION value type must be used along with
     * a `value_extractor` expression in the LogMetric.
     *
     * Each label in the metric descriptor must have a matching label
     * name as the key and an extractor expression as the value in the
     * `label_extractors` map.
     *
     * The `metric_kind` and `value_type` fields in the `metric_descriptor` cannot
     * be updated once initially configured. New labels can be added in the
     * `metric_descriptor`, but existing labels cannot be modified except for
     * their description.
     *
     * @generated from protobuf field: google.api.MetricDescriptor metric_descriptor = 5;
     */
    metricDescriptor?: MetricDescriptor;
    /**
     * Optional. A `value_extractor` is required when using a distribution
     * logs-based metric to extract the values to record from a log entry.
     * Two functions are supported for value extraction: `EXTRACT(field)` or
     * `REGEXP_EXTRACT(field, regex)`. The argument are:
     *   1. field: The name of the log entry field from which the value is to be
     *      extracted.
     *   2. regex: A regular expression using the Google RE2 syntax
     *      (https://github.com/google/re2/wiki/Syntax) with a single capture
     *      group to extract data from the specified log entry field. The value
     *      of the field is converted to a string before applying the regex.
     *      It is an error to specify a regex that does not include exactly one
     *      capture group.
     *
     * The result of the extraction must be convertible to a double type, as the
     * distribution always records double values. If either the extraction or
     * the conversion to double fails, then those values are not recorded in the
     * distribution.
     *
     * Example: `REGEXP_EXTRACT(jsonPayload.request, ".*quantity=(\d+).*")`
     *
     * @generated from protobuf field: string value_extractor = 6;
     */
    valueExtractor: string;
    /**
     * Optional. A map from a label key string to an extractor expression which is
     * used to extract data from a log entry field and assign as the label value.
     * Each label key specified in the LabelDescriptor must have an associated
     * extractor expression in this map. The syntax of the extractor expression
     * is the same as for the `value_extractor` field.
     *
     * The extracted value is converted to the type defined in the label
     * descriptor. If the either the extraction or the type conversion fails,
     * the label will have a default value. The default value for a string
     * label is an empty string, for an integer label its 0, and for a boolean
     * label its `false`.
     *
     * Note that there are upper bounds on the maximum number of labels and the
     * number of active time series that are allowed in a project.
     *
     * @generated from protobuf field: map<string, string> label_extractors = 7;
     */
    labelExtractors: {
        [key: string]: string;
    };
    /**
     * Optional. The `bucket_options` are required when the logs-based metric is
     * using a DISTRIBUTION value type and it describes the bucket boundaries
     * used to create a histogram of the extracted values.
     *
     * @generated from protobuf field: google.api.Distribution.BucketOptions bucket_options = 8;
     */
    bucketOptions?: Distribution_BucketOptions;
    /**
     * Output only. The creation timestamp of the metric.
     *
     * This field may not be present for older metrics.
     *
     * @generated from protobuf field: google.protobuf.Timestamp create_time = 9;
     */
    createTime?: Timestamp;
    /**
     * Output only. The last update timestamp of the metric.
     *
     * This field may not be present for older metrics.
     *
     * @generated from protobuf field: google.protobuf.Timestamp update_time = 10;
     */
    updateTime?: Timestamp;
    /**
     * Deprecated. The API version that created or updated this metric.
     * The v2 format is used by default and cannot be changed.
     *
     * @deprecated
     * @generated from protobuf field: google.logging.v2.LogMetric.ApiVersion version = 4 [deprecated = true];
     */
    version: LogMetric_ApiVersion;
}
/**
 * Logging API version.
 *
 * @generated from protobuf enum google.logging.v2.LogMetric.ApiVersion
 */
export declare enum LogMetric_ApiVersion {
    /**
     * Logging API v2.
     *
     * @generated from protobuf enum value: V2 = 0;
     */
    V2 = 0,
    /**
     * Logging API v1.
     *
     * @generated from protobuf enum value: V1 = 1;
     */
    V1 = 1
}
/**
 * The parameters to ListLogMetrics.
 *
 * @generated from protobuf message google.logging.v2.ListLogMetricsRequest
 */
export interface ListLogMetricsRequest {
    /**
     * Required. The name of the project containing the metrics:
     *
     *     "projects/[PROJECT_ID]"
     *
     * @generated from protobuf field: string parent = 1;
     */
    parent: string;
    /**
     * Optional. If present, then retrieve the next batch of results from the
     * preceding call to this method. `pageToken` must be the value of
     * `nextPageToken` from the previous response. The values of other method
     * parameters should be identical to those in the previous call.
     *
     * @generated from protobuf field: string page_token = 2;
     */
    pageToken: string;
    /**
     * Optional. The maximum number of results to return from this request.
     * Non-positive values are ignored. The presence of `nextPageToken` in the
     * response indicates that more results might be available.
     *
     * @generated from protobuf field: int32 page_size = 3;
     */
    pageSize: number;
}
/**
 * Result returned from ListLogMetrics.
 *
 * @generated from protobuf message google.logging.v2.ListLogMetricsResponse
 */
export interface ListLogMetricsResponse {
    /**
     * A list of logs-based metrics.
     *
     * @generated from protobuf field: repeated google.logging.v2.LogMetric metrics = 1;
     */
    metrics: LogMetric[];
    /**
     * If there might be more results than appear in this response, then
     * `nextPageToken` is included. To get the next set of results, call this
     * method again using the value of `nextPageToken` as `pageToken`.
     *
     * @generated from protobuf field: string next_page_token = 2;
     */
    nextPageToken: string;
}
/**
 * The parameters to GetLogMetric.
 *
 * @generated from protobuf message google.logging.v2.GetLogMetricRequest
 */
export interface GetLogMetricRequest {
    /**
     * Required. The resource name of the desired metric:
     *
     *     "projects/[PROJECT_ID]/metrics/[METRIC_ID]"
     *
     * @generated from protobuf field: string metric_name = 1;
     */
    metricName: string;
}
/**
 * The parameters to CreateLogMetric.
 *
 * @generated from protobuf message google.logging.v2.CreateLogMetricRequest
 */
export interface CreateLogMetricRequest {
    /**
     * Required. The resource name of the project in which to create the metric:
     *
     *     "projects/[PROJECT_ID]"
     *
     * The new metric must be provided in the request.
     *
     * @generated from protobuf field: string parent = 1;
     */
    parent: string;
    /**
     * Required. The new logs-based metric, which must not have an identifier that
     * already exists.
     *
     * @generated from protobuf field: google.logging.v2.LogMetric metric = 2;
     */
    metric?: LogMetric;
}
/**
 * The parameters to UpdateLogMetric.
 *
 * @generated from protobuf message google.logging.v2.UpdateLogMetricRequest
 */
export interface UpdateLogMetricRequest {
    /**
     * Required. The resource name of the metric to update:
     *
     *     "projects/[PROJECT_ID]/metrics/[METRIC_ID]"
     *
     * The updated metric must be provided in the request and it's
     * `name` field must be the same as `[METRIC_ID]` If the metric
     * does not exist in `[PROJECT_ID]`, then a new metric is created.
     *
     * @generated from protobuf field: string metric_name = 1;
     */
    metricName: string;
    /**
     * Required. The updated metric.
     *
     * @generated from protobuf field: google.logging.v2.LogMetric metric = 2;
     */
    metric?: LogMetric;
}
/**
 * The parameters to DeleteLogMetric.
 *
 * @generated from protobuf message google.logging.v2.DeleteLogMetricRequest
 */
export interface DeleteLogMetricRequest {
    /**
     * Required. The resource name of the metric to delete:
     *
     *     "projects/[PROJECT_ID]/metrics/[METRIC_ID]"
     *
     * @generated from protobuf field: string metric_name = 1;
     */
    metricName: string;
}
declare class LogMetric$Type extends MessageType<LogMetric> {
    constructor();
    create(value?: PartialMessage<LogMetric>): LogMetric;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: LogMetric): LogMetric;
    private binaryReadMap7;
    internalBinaryWrite(message: LogMetric, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.logging.v2.LogMetric
 */
export declare const LogMetric: LogMetric$Type;
declare class ListLogMetricsRequest$Type extends MessageType<ListLogMetricsRequest> {
    constructor();
    create(value?: PartialMessage<ListLogMetricsRequest>): ListLogMetricsRequest;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListLogMetricsRequest): ListLogMetricsRequest;
    internalBinaryWrite(message: ListLogMetricsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.logging.v2.ListLogMetricsRequest
 */
export declare const ListLogMetricsRequest: ListLogMetricsRequest$Type;
declare class ListLogMetricsResponse$Type extends MessageType<ListLogMetricsResponse> {
    constructor();
    create(value?: PartialMessage<ListLogMetricsResponse>): ListLogMetricsResponse;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ListLogMetricsResponse): ListLogMetricsResponse;
    internalBinaryWrite(message: ListLogMetricsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.logging.v2.ListLogMetricsResponse
 */
export declare const ListLogMetricsResponse: ListLogMetricsResponse$Type;
declare class GetLogMetricRequest$Type extends MessageType<GetLogMetricRequest> {
    constructor();
    create(value?: PartialMessage<GetLogMetricRequest>): GetLogMetricRequest;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: GetLogMetricRequest): GetLogMetricRequest;
    internalBinaryWrite(message: GetLogMetricRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.logging.v2.GetLogMetricRequest
 */
export declare const GetLogMetricRequest: GetLogMetricRequest$Type;
declare class CreateLogMetricRequest$Type extends MessageType<CreateLogMetricRequest> {
    constructor();
    create(value?: PartialMessage<CreateLogMetricRequest>): CreateLogMetricRequest;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: CreateLogMetricRequest): CreateLogMetricRequest;
    internalBinaryWrite(message: CreateLogMetricRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.logging.v2.CreateLogMetricRequest
 */
export declare const CreateLogMetricRequest: CreateLogMetricRequest$Type;
declare class UpdateLogMetricRequest$Type extends MessageType<UpdateLogMetricRequest> {
    constructor();
    create(value?: PartialMessage<UpdateLogMetricRequest>): UpdateLogMetricRequest;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: UpdateLogMetricRequest): UpdateLogMetricRequest;
    internalBinaryWrite(message: UpdateLogMetricRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.logging.v2.UpdateLogMetricRequest
 */
export declare const UpdateLogMetricRequest: UpdateLogMetricRequest$Type;
declare class DeleteLogMetricRequest$Type extends MessageType<DeleteLogMetricRequest> {
    constructor();
    create(value?: PartialMessage<DeleteLogMetricRequest>): DeleteLogMetricRequest;
    internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: DeleteLogMetricRequest): DeleteLogMetricRequest;
    internalBinaryWrite(message: DeleteLogMetricRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
}
/**
 * @generated MessageType for protobuf message google.logging.v2.DeleteLogMetricRequest
 */
export declare const DeleteLogMetricRequest: DeleteLogMetricRequest$Type;
/**
 * @generated ServiceType for protobuf service google.logging.v2.MetricsServiceV2
 */
export declare const MetricsServiceV2: ServiceType;
export {};
