autotel
Version:
Write Once, Observe Anywhere
97 lines • 3.49 kB
text/typescript
import { Attributes } from "@opentelemetry/api";
//#region src/slo.d.ts
type SloOutcome = 'good' | 'bad';
interface SloDefinition {
/** Stable identifier used in metric attributes and alerts. */
name: string;
/** Required success ratio, expressed as a value between 0 and 1. */
target: number;
/** Rolling observation window in milliseconds. */
windowMs: number;
}
interface SloTrackerOptions {
/** Clock override for deterministic tests. */
now?: () => number;
/** Disable metric recording when calculations run outside an initialized SDK. */
recordMetrics?: boolean;
}
interface SloSnapshot extends SloDefinition {
observedAt: number;
total: number;
good: number;
bad: number;
/** Observed good-event ratio. Undefined until the tracker sees an event. */
sli?: number;
/** Fraction of events the objective permits to fail. */
errorBudgetFraction: number;
/** Fraction of the available error budget consumed in this window. */
budgetConsumed: number;
/** Remaining budget fraction. Negative values show overspend. */
budgetRemaining: number;
/** Observed failure ratio divided by the permitted failure ratio. */
burnRate: number;
meetsTarget: boolean;
}
interface SloTracker {
readonly definition: Readonly<SloDefinition>;
record(outcome: SloOutcome, attributes?: Attributes): SloSnapshot;
snapshot(at?: number): SloSnapshot;
forecast(options: SloForecastOptions): SloForecast;
reset(): void;
}
interface SloForecastOptions {
/** Recent observation period used to estimate the future failure rate. */
baselineMs: number;
/** Future period covered by the forecast. Must not exceed 4x the baseline. */
lookaheadMs: number;
/**
* Expected eligible events during the lookahead. Defaults to the event rate
* observed during the baseline.
*/
expectedEventsInLookahead?: number;
}
interface SloForecast {
name: string;
target: number;
observedAt: number;
baselineMs: number;
lookaheadMs: number;
baselineTotal: number;
baselineBad: number;
baselineFailureRate: number;
retainedTotal: number;
retainedBad: number;
projectedTotal: number;
projectedBad: number;
projectedSli?: number;
/** Milliseconds until the retained and projected error budget is exhausted. */
timeToExhaustionMs?: number;
alerting: boolean;
reason: 'no-baseline-traffic' | 'within-budget' | 'projected-budget-exhaustion';
}
interface BurnRateAlertOptions {
shortWindow: SloSnapshot;
longWindow: SloSnapshot;
shortThreshold: number;
longThreshold: number;
}
interface BurnRateAlertDecision {
alerting: boolean;
reason: 'burn-rate-thresholds-exceeded' | 'short-window-below-threshold' | 'long-window-below-threshold' | 'no-traffic';
shortBurnRate: number;
longBurnRate: number;
}
/**
* Track good and bad events for one rolling-window service level objective.
*/
declare function createSloTracker(definition: SloDefinition, options?: SloTrackerOptions): SloTracker;
/**
* Evaluate a dual-window burn-rate alert.
*
* Both windows must exceed their threshold. The short window catches a sharp
* regression while the long window rejects brief spikes.
*/
declare function evaluateBurnRateAlert(options: BurnRateAlertOptions): BurnRateAlertDecision;
//#endregion
export { BurnRateAlertDecision, BurnRateAlertOptions, SloDefinition, SloForecast, SloForecastOptions, SloOutcome, SloSnapshot, SloTracker, SloTrackerOptions, createSloTracker, evaluateBurnRateAlert };
//# sourceMappingURL=slo.d.cts.map