unleash-client
Version:
Unleash Client for Node
100 lines • 3.02 kB
TypeScript
import { EventEmitter } from 'events';
import { CustomHeaders, CustomHeadersFunction } from './headers';
import { HttpOptions } from './http-options';
import { CollectedMetric, ImpactMetricsDataSource } from './impact-metrics/metric-types';
export interface MetricsOptions {
appName: string;
instanceId: string;
connectionId: string;
strategies: string[];
metricsInterval: number;
metricsJitter?: number;
disableMetrics?: boolean;
url: string;
headers?: CustomHeaders;
customHeadersFunction?: CustomHeadersFunction;
timeout?: number;
httpOptions?: HttpOptions;
metricRegistry?: ImpactMetricsDataSource;
}
interface VariantBucket {
[s: string]: number;
}
interface Bucket {
start: Date;
stop?: Date;
toggles: {
[s: string]: {
yes: number;
no: number;
variants: VariantBucket;
};
};
}
type PlatformName = 'bun' | 'deno' | 'node' | 'unknown';
interface BaseMetricsData {
appName: string;
instanceId: string;
connectionId: string;
platformName: PlatformName;
platformVersion: string;
yggdrasilVersion: null;
specVersion: string;
}
interface MetricsData extends BaseMetricsData {
bucket: Bucket;
impactMetrics?: CollectedMetric[];
}
interface RegistrationData extends BaseMetricsData {
sdkVersion: string;
strategies: string[];
started: Date;
interval: number;
}
export default class Metrics extends EventEmitter {
private bucket;
private appName;
private instanceId;
private connectionId;
private sdkVersion;
private strategies;
private metricsInterval;
private metricsJitter;
private failures;
private disabled;
private url;
private timer;
private started;
private headers?;
private customHeadersFunction?;
private timeout?;
private httpOptions?;
private platformData;
private metricRegistry?;
constructor({ appName, instanceId, connectionId, strategies, metricsInterval, metricsJitter, disableMetrics, url, headers, customHeadersFunction, timeout, httpOptions, metricRegistry, }: MetricsOptions);
private getAppliedJitter;
getFailures(): number;
getInterval(): number;
private startTimer;
start(): void;
stop(): void;
registerInstance(): Promise<boolean>;
configurationError(url: string, statusCode: number): void;
backoff(url: string, statusCode: number): void;
sendMetrics(): Promise<void>;
reduceBackoff(): void;
assertBucket(name: string): void;
count(name: string, enabled: boolean): void;
countVariant(name: string, variantName: string): void;
private increaseCounter;
private increaseVariantCounter;
private bucketIsEmpty;
private createBucket;
private resetBucket;
createMetricsData(impactMetrics: CollectedMetric[]): MetricsData;
private restoreBucket;
getClientData(): RegistrationData;
private getPlatformData;
}
export {};
//# sourceMappingURL=metrics.d.ts.map