/** * @since 2.0.0 */ import type * as Duration from "./Duration.js" import type * as Equal from "./Equal.js" import * as internal from "./internal/metric/key.js" import type * as MetricBoundaries from "./MetricBoundaries.js" import type * as MetricKeyType from "./MetricKeyType.js" import type * as MetricLabel from "./MetricLabel.js" import type * as Option from "./Option.js" import type { Pipeable } from "./Pipeable.js" import type * as Types from "./Types.js" /** * @since 2.0.0 * @category symbols */ export const MetricKeyTypeId: unique symbol = internal.MetricKeyTypeId /** * @since 2.0.0 * @category symbols */ export type MetricKeyTypeId = typeof MetricKeyTypeId /** * A `MetricKey` is a unique key associated with each metric. The key is based * on a combination of the metric type, the name and tags associated with the * metric, an optional description of the key, and any other information to * describe a metric, such as the boundaries of a histogram. In this way, it is * impossible to ever create different metrics with conflicting keys. * * @since 2.0.0 * @category models */ export interface MetricKey> extends MetricKey.Variance, Equal.Equal, Pipeable { readonly name: string readonly keyType: Type readonly description: Option.Option readonly tags: ReadonlyArray } /** * @since 2.0.0 */ export declare namespace MetricKey { /** * @since 2.0.0 * @category models */ export type Untyped = MetricKey /** * @since 2.0.0 * @category models */ export type Counter = MetricKey> /** * @since 2.0.0 * @category models */ export type Gauge = MetricKey> /** * @since 2.0.0 * @category models */ export type Frequency = MetricKey /** * @since 2.0.0 * @category models */ export type Histogram = MetricKey /** * @since 2.0.0 * @category models */ export type Summary = MetricKey /** * @since 2.0.0 * @category models */ export interface Variance { readonly [MetricKeyTypeId]: { _Type: Types.Covariant } } } /** * @since 2.0.0 * @category refinements */ export const isMetricKey: (u: unknown) => u is MetricKey> = internal.isMetricKey /** * Creates a metric key for a counter, with the specified name. * * @since 2.0.0 * @category constructors */ export const counter: { /** * Creates a metric key for a counter, with the specified name. * * @since 2.0.0 * @category constructors */ ( name: string, options?: { readonly description?: string | undefined readonly bigint?: false | undefined readonly incremental?: boolean | undefined } ): MetricKey.Counter /** * Creates a metric key for a counter, with the specified name. * * @since 2.0.0 * @category constructors */ ( name: string, options: { readonly description?: string | undefined readonly bigint: true readonly incremental?: boolean | undefined } ): MetricKey.Counter } = internal.counter /** * Creates a metric key for a categorical frequency table, with the specified * name. * * @since 2.0.0 * @category constructors */ export const frequency: ( name: string, options?: | { readonly description?: string | undefined readonly preregisteredWords?: ReadonlyArray | undefined } | undefined ) => MetricKey.Frequency = internal.frequency /** * Creates a metric key for a gauge, with the specified name. * * @since 2.0.0 * @category constructors */ export const gauge: { /** * Creates a metric key for a gauge, with the specified name. * * @since 2.0.0 * @category constructors */ ( name: string, options?: { readonly description?: string | undefined readonly bigint?: false | undefined } ): MetricKey.Gauge /** * Creates a metric key for a gauge, with the specified name. * * @since 2.0.0 * @category constructors */ ( name: string, options: { readonly description?: string | undefined readonly bigint: true } ): MetricKey.Gauge } = internal.gauge /** * Creates a metric key for a histogram, with the specified name and boundaries. * * @since 2.0.0 * @category constructors */ export const histogram: ( name: string, boundaries: MetricBoundaries.MetricBoundaries, description?: string ) => MetricKey.Histogram = internal.histogram /** * Creates a metric key for a summary, with the specified name, maxAge, * maxSize, error, and quantiles. * * @since 2.0.0 * @category constructors */ export const summary: ( options: { readonly name: string readonly maxAge: Duration.DurationInput readonly maxSize: number readonly error: number readonly quantiles: ReadonlyArray readonly description?: string | undefined } ) => MetricKey.Summary = internal.summary /** * Returns a new `MetricKey` with the specified tag appended. * * @since 2.0.0 * @category constructors */ export const tagged: { /** * Returns a new `MetricKey` with the specified tag appended. * * @since 2.0.0 * @category constructors */ (key: string, value: string): >(self: MetricKey) => MetricKey /** * Returns a new `MetricKey` with the specified tag appended. * * @since 2.0.0 * @category constructors */ >(self: MetricKey, key: string, value: string): MetricKey } = internal.tagged /** * Returns a new `MetricKey` with the specified tags appended. * * @since 2.0.0 * @category constructors */ export const taggedWithLabels: { /** * Returns a new `MetricKey` with the specified tags appended. * * @since 2.0.0 * @category constructors */ (extraTags: ReadonlyArray): >(self: MetricKey) => MetricKey /** * Returns a new `MetricKey` with the specified tags appended. * * @since 2.0.0 * @category constructors */ >(self: MetricKey, extraTags: ReadonlyArray): MetricKey } = internal.taggedWithLabels