import { HrTime, Attributes, ValueType } from '@opentelemetry/api';
import { InstrumentationScope } from '@opentelemetry/core';
import { Resource } from '@opentelemetry/resources';
import { AggregationTemporality } from './AggregationTemporality';
import { Histogram, ExponentialHistogram } from '../aggregator/types';
/**
 * Supported types of metric instruments.
 */
export declare enum InstrumentType {
    COUNTER = "COUNTER",
    GAUGE = "GAUGE",
    HISTOGRAM = "HISTOGRAM",
    UP_DOWN_COUNTER = "UP_DOWN_COUNTER",
    OBSERVABLE_COUNTER = "OBSERVABLE_COUNTER",
    OBSERVABLE_GAUGE = "OBSERVABLE_GAUGE",
    OBSERVABLE_UP_DOWN_COUNTER = "OBSERVABLE_UP_DOWN_COUNTER"
}
export interface MetricDescriptor {
    readonly name: string;
    readonly description: string;
    readonly unit: string;
    readonly valueType: ValueType;
}
/**
 * Basic metric data fields.
 */
interface BaseMetricData {
    readonly descriptor: MetricDescriptor;
    readonly aggregationTemporality: AggregationTemporality;
    /**
     * DataPointType of the metric instrument.
     */
    readonly dataPointType: DataPointType;
}
/**
 * Represents a metric data aggregated by either a LastValueAggregation or
 * SumAggregation.
 */
export interface SumMetricData extends BaseMetricData {
    readonly dataPointType: DataPointType.SUM;
    readonly dataPoints: DataPoint<number>[];
    readonly isMonotonic: boolean;
}
export interface GaugeMetricData extends BaseMetricData {
    readonly dataPointType: DataPointType.GAUGE;
    readonly dataPoints: DataPoint<number>[];
}
/**
 * Represents a metric data aggregated by a HistogramAggregation.
 */
export interface HistogramMetricData extends BaseMetricData {
    readonly dataPointType: DataPointType.HISTOGRAM;
    readonly dataPoints: DataPoint<Histogram>[];
}
/**
 * Represents a metric data aggregated by a ExponentialHistogramAggregation.
 */
export interface ExponentialHistogramMetricData extends BaseMetricData {
    readonly dataPointType: DataPointType.EXPONENTIAL_HISTOGRAM;
    readonly dataPoints: DataPoint<ExponentialHistogram>[];
}
/**
 * Represents an aggregated metric data.
 */
export type MetricData = SumMetricData | GaugeMetricData | HistogramMetricData | ExponentialHistogramMetricData;
export interface ScopeMetrics {
    scope: InstrumentationScope;
    metrics: MetricData[];
}
export interface ResourceMetrics {
    resource: Resource;
    scopeMetrics: ScopeMetrics[];
}
/**
 * Represents the collection result of the metrics. If there are any
 * non-critical errors in the collection, like throwing in a single observable
 * callback, these errors are aggregated in the {@link CollectionResult.errors}
 * array and other successfully collected metrics are returned.
 */
export interface CollectionResult {
    /**
     * Collected metrics.
     */
    resourceMetrics: ResourceMetrics;
    /**
     * Arbitrary JavaScript exception values.
     */
    errors: unknown[];
}
/**
 * The aggregated point data type.
 */
export declare enum DataPointType {
    /**
     * A histogram data point contains a histogram statistics of collected
     * values with a list of explicit bucket boundaries and statistics such
     * as min, max, count, and sum of all collected values.
     */
    HISTOGRAM = 0,
    /**
     * An exponential histogram data point contains a histogram statistics of
     * collected values where bucket boundaries are automatically calculated
     * using an exponential function, and statistics such as min, max, count,
     * and sum of all collected values.
     */
    EXPONENTIAL_HISTOGRAM = 1,
    /**
     * A gauge metric data point has only a single numeric value.
     */
    GAUGE = 2,
    /**
     * A sum metric data point has a single numeric value and a
     * monotonicity-indicator.
     */
    SUM = 3
}
/**
 * Represents an aggregated point data with start time, end time and their
 * associated attributes and points.
 */
export interface DataPoint<T> {
    /**
     * The start epoch timestamp of the DataPoint, usually the time when
     * the metric was created when the preferred AggregationTemporality is
     * CUMULATIVE, or last collection time otherwise.
     */
    readonly startTime: HrTime;
    /**
     * The end epoch timestamp when data were collected, usually it represents
     * the moment when `MetricReader.collect` was called.
     */
    readonly endTime: HrTime;
    /**
     * The attributes associated with this DataPoint.
     */
    readonly attributes: Attributes;
    /**
     * The value for this DataPoint. The type of the value is indicated by the
     * {@link DataPointType}.
     */
    readonly value: T;
}
export {};
//# sourceMappingURL=MetricData.d.ts.map