274 lines
6.2 KiB
TypeScript
274 lines
6.2 KiB
TypeScript
/**
|
|
* @since 2.0.0
|
|
*/
|
|
import type * as Equal from "./Equal.js"
|
|
import * as internal from "./internal/metric/state.js"
|
|
import type * as MetricKeyType from "./MetricKeyType.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 MetricStateTypeId: unique symbol = internal.MetricStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export type MetricStateTypeId = typeof MetricStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export const CounterStateTypeId: unique symbol = internal.CounterStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export type CounterStateTypeId = typeof CounterStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export const FrequencyStateTypeId: unique symbol = internal.FrequencyStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export type FrequencyStateTypeId = typeof FrequencyStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export const GaugeStateTypeId: unique symbol = internal.GaugeStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export type GaugeStateTypeId = typeof GaugeStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export const HistogramStateTypeId: unique symbol = internal.HistogramStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export type HistogramStateTypeId = typeof HistogramStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export const SummaryStateTypeId: unique symbol = internal.SummaryStateTypeId
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category symbols
|
|
*/
|
|
export type SummaryStateTypeId = typeof SummaryStateTypeId
|
|
|
|
/**
|
|
* A `MetricState` describes the state of a metric. The type parameter of a
|
|
* metric state corresponds to the type of the metric key (`MetricStateType`).
|
|
* This phantom type parameter is used to tie keys to their expected states.
|
|
*
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface MetricState<in A> extends MetricState.Variance<A>, Equal.Equal, Pipeable {}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
*/
|
|
export declare namespace MetricState {
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Untyped extends MetricState<any> {}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Counter<in out A extends (number | bigint)>
|
|
extends MetricState<MetricKeyType.MetricKeyType.Counter<A>>
|
|
{
|
|
readonly [CounterStateTypeId]: CounterStateTypeId
|
|
readonly count: A
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Frequency extends MetricState<MetricKeyType.MetricKeyType.Frequency> {
|
|
readonly [FrequencyStateTypeId]: FrequencyStateTypeId
|
|
readonly occurrences: ReadonlyMap<string, number>
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Gauge<in out A extends (number | bigint)> extends MetricState<MetricKeyType.MetricKeyType.Gauge<A>> {
|
|
readonly [GaugeStateTypeId]: GaugeStateTypeId
|
|
readonly value: A
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Histogram extends MetricState<MetricKeyType.MetricKeyType.Histogram> {
|
|
readonly [HistogramStateTypeId]: HistogramStateTypeId
|
|
readonly buckets: ReadonlyArray<readonly [number, number]>
|
|
readonly count: number
|
|
readonly min: number
|
|
readonly max: number
|
|
readonly sum: number
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Summary extends MetricState<MetricKeyType.MetricKeyType.Summary> {
|
|
readonly [SummaryStateTypeId]: SummaryStateTypeId
|
|
readonly error: number
|
|
readonly quantiles: ReadonlyArray<readonly [number, Option.Option<number>]>
|
|
readonly count: number
|
|
readonly min: number
|
|
readonly max: number
|
|
readonly sum: number
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category models
|
|
*/
|
|
export interface Variance<in A> {
|
|
readonly [MetricStateTypeId]: {
|
|
readonly _A: Types.Contravariant<A>
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const counter: {
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
(count: number): MetricState.Counter<number>
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
(count: bigint): MetricState.Counter<bigint>
|
|
} = internal.counter
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const frequency: (occurrences: ReadonlyMap<string, number>) => MetricState.Frequency = internal.frequency
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const gauge: {
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
(count: number): MetricState.Gauge<number>
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
(count: bigint): MetricState.Gauge<bigint>
|
|
} = internal.gauge
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const histogram: (
|
|
options: {
|
|
readonly buckets: ReadonlyArray<readonly [number, number]>
|
|
readonly count: number
|
|
readonly min: number
|
|
readonly max: number
|
|
readonly sum: number
|
|
}
|
|
) => MetricState.Histogram = internal.histogram
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category constructors
|
|
*/
|
|
export const summary: (
|
|
options: {
|
|
readonly error: number
|
|
readonly quantiles: ReadonlyArray<readonly [number, Option.Option<number>]>
|
|
readonly count: number
|
|
readonly min: number
|
|
readonly max: number
|
|
readonly sum: number
|
|
}
|
|
) => MetricState.Summary = internal.summary
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isMetricState: (u: unknown) => u is MetricState.Counter<number | bigint> = internal.isMetricState
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isCounterState: (u: unknown) => u is MetricState.Counter<number | bigint> = internal.isCounterState
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isFrequencyState: (u: unknown) => u is MetricState.Frequency = internal.isFrequencyState
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isGaugeState: (u: unknown) => u is MetricState.Gauge<number | bigint> = internal.isGaugeState
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isHistogramState: (u: unknown) => u is MetricState.Histogram = internal.isHistogramState
|
|
|
|
/**
|
|
* @since 2.0.0
|
|
* @category refinements
|
|
*/
|
|
export const isSummaryState: (u: unknown) => u is MetricState.Summary = internal.isSummaryState
|