import { BaseAPIRequestFactory } from "../../datadog-api-client-common/baseapi";
import { Configuration } from "../../datadog-api-client-common/configuration";
import { RequestContext, ResponseContext } from "../../datadog-api-client-common/http/http";
import { IntakePayloadAccepted } from "../models/IntakePayloadAccepted";
import { MetricAllTagsResponse } from "../models/MetricAllTagsResponse";
import { MetricAssetsResponse } from "../models/MetricAssetsResponse";
import { MetricBulkTagConfigCreateRequest } from "../models/MetricBulkTagConfigCreateRequest";
import { MetricBulkTagConfigDeleteRequest } from "../models/MetricBulkTagConfigDeleteRequest";
import { MetricBulkTagConfigResponse } from "../models/MetricBulkTagConfigResponse";
import { MetricContentEncoding } from "../models/MetricContentEncoding";
import { MetricEstimateResponse } from "../models/MetricEstimateResponse";
import { MetricPayload } from "../models/MetricPayload";
import { MetricsAndMetricTagConfigurations } from "../models/MetricsAndMetricTagConfigurations";
import { MetricsAndMetricTagConfigurationsResponse } from "../models/MetricsAndMetricTagConfigurationsResponse";
import { MetricSuggestedTagsAndAggregationsResponse } from "../models/MetricSuggestedTagsAndAggregationsResponse";
import { MetricTagConfigurationCreateRequest } from "../models/MetricTagConfigurationCreateRequest";
import { MetricTagConfigurationMetricTypeCategory } from "../models/MetricTagConfigurationMetricTypeCategory";
import { MetricTagConfigurationResponse } from "../models/MetricTagConfigurationResponse";
import { MetricTagConfigurationUpdateRequest } from "../models/MetricTagConfigurationUpdateRequest";
import { MetricVolumesResponse } from "../models/MetricVolumesResponse";
import { ScalarFormulaQueryRequest } from "../models/ScalarFormulaQueryRequest";
import { ScalarFormulaQueryResponse } from "../models/ScalarFormulaQueryResponse";
import { TimeseriesFormulaQueryRequest } from "../models/TimeseriesFormulaQueryRequest";
import { TimeseriesFormulaQueryResponse } from "../models/TimeseriesFormulaQueryResponse";
export declare class MetricsApiRequestFactory extends BaseAPIRequestFactory {
    createBulkTagsMetricsConfiguration(body: MetricBulkTagConfigCreateRequest, _options?: Configuration): Promise<RequestContext>;
    createTagConfiguration(metricName: string, body: MetricTagConfigurationCreateRequest, _options?: Configuration): Promise<RequestContext>;
    deleteBulkTagsMetricsConfiguration(body: MetricBulkTagConfigDeleteRequest, _options?: Configuration): Promise<RequestContext>;
    deleteTagConfiguration(metricName: string, _options?: Configuration): Promise<RequestContext>;
    estimateMetricsOutputSeries(metricName: string, filterGroups?: string, filterHoursAgo?: number, filterNumAggregations?: number, filterPct?: boolean, filterTimespanH?: number, _options?: Configuration): Promise<RequestContext>;
    listActiveMetricConfigurations(metricName: string, windowSeconds?: number, _options?: Configuration): Promise<RequestContext>;
    listMetricAssets(metricName: string, _options?: Configuration): Promise<RequestContext>;
    listTagConfigurationByName(metricName: string, _options?: Configuration): Promise<RequestContext>;
    listTagConfigurations(filterConfigured?: boolean, filterTagsConfigured?: string, filterMetricType?: MetricTagConfigurationMetricTypeCategory, filterIncludePercentiles?: boolean, filterQueried?: boolean, filterTags?: string, filterRelatedAssets?: boolean, windowSeconds?: number, pageSize?: number, pageCursor?: string, _options?: Configuration): Promise<RequestContext>;
    listTagsByMetricName(metricName: string, _options?: Configuration): Promise<RequestContext>;
    listVolumesByMetricName(metricName: string, _options?: Configuration): Promise<RequestContext>;
    queryScalarData(body: ScalarFormulaQueryRequest, _options?: Configuration): Promise<RequestContext>;
    queryTimeseriesData(body: TimeseriesFormulaQueryRequest, _options?: Configuration): Promise<RequestContext>;
    submitMetrics(body: MetricPayload, contentEncoding?: MetricContentEncoding, _options?: Configuration): Promise<RequestContext>;
    updateTagConfiguration(metricName: string, body: MetricTagConfigurationUpdateRequest, _options?: Configuration): Promise<RequestContext>;
}
export declare class MetricsApiResponseProcessor {
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to createBulkTagsMetricsConfiguration
     * @throws ApiException if the response code was not in [200, 299]
     */
    createBulkTagsMetricsConfiguration(response: ResponseContext): Promise<MetricBulkTagConfigResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to createTagConfiguration
     * @throws ApiException if the response code was not in [200, 299]
     */
    createTagConfiguration(response: ResponseContext): Promise<MetricTagConfigurationResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to deleteBulkTagsMetricsConfiguration
     * @throws ApiException if the response code was not in [200, 299]
     */
    deleteBulkTagsMetricsConfiguration(response: ResponseContext): Promise<MetricBulkTagConfigResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to deleteTagConfiguration
     * @throws ApiException if the response code was not in [200, 299]
     */
    deleteTagConfiguration(response: ResponseContext): Promise<void>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to estimateMetricsOutputSeries
     * @throws ApiException if the response code was not in [200, 299]
     */
    estimateMetricsOutputSeries(response: ResponseContext): Promise<MetricEstimateResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to listActiveMetricConfigurations
     * @throws ApiException if the response code was not in [200, 299]
     */
    listActiveMetricConfigurations(response: ResponseContext): Promise<MetricSuggestedTagsAndAggregationsResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to listMetricAssets
     * @throws ApiException if the response code was not in [200, 299]
     */
    listMetricAssets(response: ResponseContext): Promise<MetricAssetsResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to listTagConfigurationByName
     * @throws ApiException if the response code was not in [200, 299]
     */
    listTagConfigurationByName(response: ResponseContext): Promise<MetricTagConfigurationResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to listTagConfigurations
     * @throws ApiException if the response code was not in [200, 299]
     */
    listTagConfigurations(response: ResponseContext): Promise<MetricsAndMetricTagConfigurationsResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to listTagsByMetricName
     * @throws ApiException if the response code was not in [200, 299]
     */
    listTagsByMetricName(response: ResponseContext): Promise<MetricAllTagsResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to listVolumesByMetricName
     * @throws ApiException if the response code was not in [200, 299]
     */
    listVolumesByMetricName(response: ResponseContext): Promise<MetricVolumesResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to queryScalarData
     * @throws ApiException if the response code was not in [200, 299]
     */
    queryScalarData(response: ResponseContext): Promise<ScalarFormulaQueryResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to queryTimeseriesData
     * @throws ApiException if the response code was not in [200, 299]
     */
    queryTimeseriesData(response: ResponseContext): Promise<TimeseriesFormulaQueryResponse>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to submitMetrics
     * @throws ApiException if the response code was not in [200, 299]
     */
    submitMetrics(response: ResponseContext): Promise<IntakePayloadAccepted>;
    /**
     * Unwraps the actual response sent by the server from the response context and deserializes the response content
     * to the expected objects
     *
     * @params response Response returned by the server for a request to updateTagConfiguration
     * @throws ApiException if the response code was not in [200, 299]
     */
    updateTagConfiguration(response: ResponseContext): Promise<MetricTagConfigurationResponse>;
}
export interface MetricsApiCreateBulkTagsMetricsConfigurationRequest {
    /**
     * @type MetricBulkTagConfigCreateRequest
     */
    body: MetricBulkTagConfigCreateRequest;
}
export interface MetricsApiCreateTagConfigurationRequest {
    /**
     * The name of the metric.
     * @type string
     */
    metricName: string;
    /**
     * @type MetricTagConfigurationCreateRequest
     */
    body: MetricTagConfigurationCreateRequest;
}
export interface MetricsApiDeleteBulkTagsMetricsConfigurationRequest {
    /**
     * @type MetricBulkTagConfigDeleteRequest
     */
    body: MetricBulkTagConfigDeleteRequest;
}
export interface MetricsApiDeleteTagConfigurationRequest {
    /**
     * The name of the metric.
     * @type string
     */
    metricName: string;
}
export interface MetricsApiEstimateMetricsOutputSeriesRequest {
    /**
     * The name of the metric.
     * @type string
     */
    metricName: string;
    /**
     * Filtered tag keys that the metric is configured to query with.
     * @type string
     */
    filterGroups?: string;
    /**
     * The number of hours of look back (from now) to estimate cardinality with. If unspecified, it defaults to 0 hours.
     * @type number
     */
    filterHoursAgo?: number;
    /**
     * Deprecated. Number of aggregations has no impact on volume.
     * @type number
     */
    filterNumAggregations?: number;
    /**
     * A boolean, for distribution metrics only, to estimate cardinality if the metric includes additional percentile aggregators.
     * @type boolean
     */
    filterPct?: boolean;
    /**
     * A window, in hours, from the look back to estimate cardinality with. The minimum and default is 1 hour.
     * @type number
     */
    filterTimespanH?: number;
}
export interface MetricsApiListActiveMetricConfigurationsRequest {
    /**
     * The name of the metric.
     * @type string
     */
    metricName: string;
    /**
     * The number of seconds of look back (from now).
     * Default value is 604,800 (1 week), minimum value is 7200 (2 hours), maximum value is 2,630,000 (1 month).
     * @type number
     */
    windowSeconds?: number;
}
export interface MetricsApiListMetricAssetsRequest {
    /**
     * The name of the metric.
     * @type string
     */
    metricName: string;
}
export interface MetricsApiListTagConfigurationByNameRequest {
    /**
     * The name of the metric.
     * @type string
     */
    metricName: string;
}
export interface MetricsApiListTagConfigurationsRequest {
    /**
     * Filter custom metrics that have configured tags.
     * @type boolean
     */
    filterConfigured?: boolean;
    /**
     * Filter tag configurations by configured tags.
     * @type string
     */
    filterTagsConfigured?: string;
    /**
     * Filter metrics by metric type.
     * @type MetricTagConfigurationMetricTypeCategory
     */
    filterMetricType?: MetricTagConfigurationMetricTypeCategory;
    /**
     * Filter distributions with additional percentile
     * aggregations enabled or disabled.
     * @type boolean
     */
    filterIncludePercentiles?: boolean;
    /**
     * (Preview) Filter custom metrics that have or have not been queried in the specified window[seconds].
     * If no window is provided or the window is less than 2 hours, a default of 2 hours will be applied.
     * @type boolean
     */
    filterQueried?: boolean;
    /**
     * Filter metrics that have been submitted with the given tags. Supports boolean and wildcard expressions.
     * Can only be combined with the filter[queried] filter.
     * @type string
     */
    filterTags?: string;
    /**
     * (Preview) Filter metrics that are used in dashboards, monitors, notebooks, SLOs.
     * @type boolean
     */
    filterRelatedAssets?: boolean;
    /**
     * The number of seconds of look back (from now) to apply to a filter[tag] or filter[queried] query.
     * Default value is 3600 (1 hour), maximum value is 2,592,000 (30 days).
     * @type number
     */
    windowSeconds?: number;
    /**
     * Maximum number of results returned.
     * @type number
     */
    pageSize?: number;
    /**
     * String to query the next page of results.
     * This key is provided with each valid response from the API in `meta.pagination.next_cursor`.
     * Once the `meta.pagination.next_cursor` key is null, all pages have been retrieved.
     * @type string
     */
    pageCursor?: string;
}
export interface MetricsApiListTagsByMetricNameRequest {
    /**
     * The name of the metric.
     * @type string
     */
    metricName: string;
}
export interface MetricsApiListVolumesByMetricNameRequest {
    /**
     * The name of the metric.
     * @type string
     */
    metricName: string;
}
export interface MetricsApiQueryScalarDataRequest {
    /**
     * @type ScalarFormulaQueryRequest
     */
    body: ScalarFormulaQueryRequest;
}
export interface MetricsApiQueryTimeseriesDataRequest {
    /**
     * @type TimeseriesFormulaQueryRequest
     */
    body: TimeseriesFormulaQueryRequest;
}
export interface MetricsApiSubmitMetricsRequest {
    /**
     * @type MetricPayload
     */
    body: MetricPayload;
    /**
     * HTTP header used to compress the media-type.
     * @type MetricContentEncoding
     */
    contentEncoding?: MetricContentEncoding;
}
export interface MetricsApiUpdateTagConfigurationRequest {
    /**
     * The name of the metric.
     * @type string
     */
    metricName: string;
    /**
     * @type MetricTagConfigurationUpdateRequest
     */
    body: MetricTagConfigurationUpdateRequest;
}
export declare class MetricsApi {
    private requestFactory;
    private responseProcessor;
    private configuration;
    constructor(configuration: Configuration, requestFactory?: MetricsApiRequestFactory, responseProcessor?: MetricsApiResponseProcessor);
    /**
     * Create and define a list of queryable tag keys for a set of existing count, gauge, rate, and distribution metrics.
     * Metrics are selected by passing a metric name prefix. Use the Delete method of this API path to remove tag configurations.
     * Results can be sent to a set of account email addresses, just like the same operation in the Datadog web app.
     * If multiple calls include the same metric, the last configuration applied (not by submit order) is used, do not
     * expect deterministic ordering of concurrent calls. The `exclude_tags_mode` value will set all metrics that match the prefix to
     * the same exclusion state, metric tag configurations do not support mixed inclusion and exclusion for tags on the same metric.
     * Can only be used with application keys of users with the `Manage Tags for Metrics` permission.
     * @param param The request object
     */
    createBulkTagsMetricsConfiguration(param: MetricsApiCreateBulkTagsMetricsConfigurationRequest, options?: Configuration): Promise<MetricBulkTagConfigResponse>;
    /**
     * Create and define a list of queryable tag keys for an existing count/gauge/rate/distribution metric.
     * Optionally, include percentile aggregations on any distribution metric. By setting `exclude_tags_mode`
     * to true, the behavior is changed from an allow-list to a deny-list, and tags in the defined list are
     * not queryable. Can only be used with application keys of users with the `Manage Tags for Metrics`
     * permission.
     * @param param The request object
     */
    createTagConfiguration(param: MetricsApiCreateTagConfigurationRequest, options?: Configuration): Promise<MetricTagConfigurationResponse>;
    /**
     * Delete all custom lists of queryable tag keys for a set of existing count, gauge, rate, and distribution metrics.
     * Metrics are selected by passing a metric name prefix.
     * Results can be sent to a set of account email addresses, just like the same operation in the Datadog web app.
     * Can only be used with application keys of users with the `Manage Tags for Metrics` permission.
     * @param param The request object
     */
    deleteBulkTagsMetricsConfiguration(param: MetricsApiDeleteBulkTagsMetricsConfigurationRequest, options?: Configuration): Promise<MetricBulkTagConfigResponse>;
    /**
     * Deletes a metric's tag configuration. Can only be used with application
     * keys from users with the `Manage Tags for Metrics` permission.
     * @param param The request object
     */
    deleteTagConfiguration(param: MetricsApiDeleteTagConfigurationRequest, options?: Configuration): Promise<void>;
    /**
     * Returns the estimated cardinality for a metric with a given tag, percentile and number of aggregations configuration using Metrics without Limits&trade;.
     * @param param The request object
     */
    estimateMetricsOutputSeries(param: MetricsApiEstimateMetricsOutputSeriesRequest, options?: Configuration): Promise<MetricEstimateResponse>;
    /**
     * List tags and aggregations that are actively queried on dashboards, notebooks, monitors, the Metrics Explorer, and using the API for a given metric name.
     * @param param The request object
     */
    listActiveMetricConfigurations(param: MetricsApiListActiveMetricConfigurationsRequest, options?: Configuration): Promise<MetricSuggestedTagsAndAggregationsResponse>;
    /**
     * Returns dashboards, monitors, notebooks, and SLOs that a metric is stored in, if any.  Updated every 24 hours.
     * @param param The request object
     */
    listMetricAssets(param: MetricsApiListMetricAssetsRequest, options?: Configuration): Promise<MetricAssetsResponse>;
    /**
     * Returns the tag configuration for the given metric name.
     * @param param The request object
     */
    listTagConfigurationByName(param: MetricsApiListTagConfigurationByNameRequest, options?: Configuration): Promise<MetricTagConfigurationResponse>;
    /**
     * Returns all metrics that can be configured in the Metrics Summary page or with Metrics without Limits™ (matching additional filters if specified).
     * Optionally, paginate by using the `page[cursor]` and/or `page[size]` query parameters.
     * To fetch the first page, pass in a query parameter with either a valid `page[size]` or an empty cursor like `page[cursor]=`. To fetch the next page, pass in the `next_cursor` value from the response as the new `page[cursor]` value.
     * Once the `meta.pagination.next_cursor` value is null, all pages have been retrieved.
     * @param param The request object
     */
    listTagConfigurations(param?: MetricsApiListTagConfigurationsRequest, options?: Configuration): Promise<MetricsAndMetricTagConfigurationsResponse>;
    /**
     * Provide a paginated version of listTagConfigurations returning a generator with all the items.
     */
    listTagConfigurationsWithPagination(param?: MetricsApiListTagConfigurationsRequest, options?: Configuration): AsyncGenerator<MetricsAndMetricTagConfigurations>;
    /**
     * View indexed tag key-value pairs for a given metric name over the previous hour.
     * @param param The request object
     */
    listTagsByMetricName(param: MetricsApiListTagsByMetricNameRequest, options?: Configuration): Promise<MetricAllTagsResponse>;
    /**
     * View distinct metrics volumes for the given metric name.
     *
     * Custom metrics generated in-app from other products will return `null` for ingested volumes.
     * @param param The request object
     */
    listVolumesByMetricName(param: MetricsApiListVolumesByMetricNameRequest, options?: Configuration): Promise<MetricVolumesResponse>;
    /**
     * Query scalar values (as seen on Query Value, Table, and Toplist widgets).
     * Multiple data sources are supported with the ability to
     * process the data using formulas and functions.
     * @param param The request object
     */
    queryScalarData(param: MetricsApiQueryScalarDataRequest, options?: Configuration): Promise<ScalarFormulaQueryResponse>;
    /**
     * Query timeseries data across various data sources and
     * process the data by applying formulas and functions.
     * @param param The request object
     */
    queryTimeseriesData(param: MetricsApiQueryTimeseriesDataRequest, options?: Configuration): Promise<TimeseriesFormulaQueryResponse>;
    /**
     * The metrics end-point allows you to post time-series data that can be graphed on Datadog’s dashboards.
     * The maximum payload size is 500 kilobytes (512000 bytes). Compressed payloads must have a decompressed size of less than 5 megabytes (5242880 bytes).
     *
     * If you’re submitting metrics directly to the Datadog API without using DogStatsD, expect:
     *
     * - 64 bits for the timestamp
     * - 64 bits for the value
     * - 20 bytes for the metric names
     * - 50 bytes for the timeseries
     * - The full payload is approximately 100 bytes.
     *
     * Host name is one of the resources in the Resources field.
     * @param param The request object
     */
    submitMetrics(param: MetricsApiSubmitMetricsRequest, options?: Configuration): Promise<IntakePayloadAccepted>;
    /**
     * Update the tag configuration of a metric or percentile aggregations of a distribution metric or custom aggregations
     * of a count, rate, or gauge metric. By setting `exclude_tags_mode` to true the behavior is changed
     * from an allow-list to a deny-list, and tags in the defined list will not be queryable.
     * Can only be used with application keys from users with the `Manage Tags for Metrics` permission. This endpoint requires
     * a tag configuration to be created first.
     * @param param The request object
     */
    updateTagConfiguration(param: MetricsApiUpdateTagConfigurationRequest, options?: Configuration): Promise<MetricTagConfigurationResponse>;
}
