summarizely-cli
Version:
YouTube summarizer that respects your existing subscriptions. No API keys required.
57 lines • 1.91 kB
TypeScript
import { Provider } from './types';
export interface MetricEvent {
type: 'caption_fetch' | 'summary_generated' | 'cache_hit' | 'cache_miss' | 'error' | 'batch_complete';
timestamp: number;
duration?: number;
provider?: Provider;
model?: string;
url?: string;
videoId?: string;
success?: boolean;
error?: string;
metadata?: Record<string, any>;
}
export interface AggregatedMetrics {
totalEvents: number;
captionsFetched: number;
summariesGenerated: number;
cacheHits: number;
cacheMisses: number;
errors: number;
batchesCompleted: number;
averageDuration: number;
providerUsage: Record<Provider, number>;
modelUsage: Record<string, number>;
successRate: number;
errorTypes: Record<string, number>;
dailyStats: Record<string, DailyStats>;
}
export interface DailyStats {
date: string;
events: number;
summaries: number;
errors: number;
averageDuration: number;
}
export declare class LocalMetrics {
private metricsFile;
private aggregatedFile;
private maxFileSize;
private rotateCount;
constructor();
record(event: Omit<MetricEvent, 'timestamp'>): void;
recordCaptionFetch(url: string, duration: number, success: boolean): void;
recordSummaryGenerated(url: string, provider: Provider, model: string | undefined, duration: number, success: boolean): void;
recordCacheHit(url: string): void;
recordCacheMiss(url: string): void;
recordError(error: string, url?: string): void;
recordBatchComplete(totalVideos: number, successful: number, duration: number): void;
aggregate(): Promise<AggregatedMetrics>;
report(): Promise<string>;
private readEvents;
private checkRotation;
private rotateFiles;
cleanup(daysToKeep?: number): Promise<void>;
}
export declare function getMetrics(): LocalMetrics;
//# sourceMappingURL=metrics.d.ts.map