UNPKG

ts-web-scraper

Version:

A powerful web scraper for both static and client-side rendered sites using only Bun native APIs

112 lines 3.13 kB
/** * Create a monitored function wrapper */ export declare function monitored<T extends (...args: any[]) => any>(name: string, fn: T, monitor: PerformanceMonitor): T; /** * Performance decorator */ export declare function measure(name?: string): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor; /** * Format bytes to human readable */ export declare function formatBytes(bytes: number): string; /** * Format duration to human readable */ export declare function formatDuration(ms: number): string; /** * Create a report from metrics */ export declare function createReport(monitor: PerformanceMonitor): string; /** * Performance Monitoring * * Track and analyze scraping performance * Uses ONLY Bun native APIs - no external dependencies! */ export declare interface PerformanceMetric { name: string value: number unit: string timestamp: Date tags?: Record<string, string> } export declare interface RequestMetrics { url: string method: string statusCode?: number duration: number size?: number cached?: boolean retries?: number error?: string timestamp: Date } export declare interface ScrapeMetrics { url: string totalDuration: number fetchDuration: number parseDuration: number extractionDuration: number itemsExtracted: number bytesDownloaded: number cached: boolean retries: number error?: string timestamp: Date } export declare interface MetricsSummary { totalRequests: number successfulRequests: number failedRequests: number averageDuration: number totalDuration: number minDuration: number maxDuration: number p50Duration: number p95Duration: number p99Duration: number averageSize: number totalSize: number cacheHitRate: number errorRate: number } /** * Performance monitor */ export declare class PerformanceMonitor { private metrics: PerformanceMetric[]; private requestMetrics: RequestMetrics[]; private scrapeMetrics: ScrapeMetrics[]; private timers: Map<string, number>; private options?: { maxMetrics?: number flushInterval?: number onFlush?: (metrics: PerformanceMetric[]) => void | Promise<void> }; constructor(options?: { maxMetrics?: number flushInterval?: number onFlush?: (metrics: PerformanceMetric[]) => void | Promise<void> }); startTimer(name: string): void; endTimer(name: string, tags?: Record<string, string>): number; recordMetric(metric: PerformanceMetric): void; recordRequest(metrics: RequestMetrics): void; recordScrape(metrics: ScrapeMetrics): void; getMetrics(): PerformanceMetric[]; getRequestMetrics(): RequestMetrics[]; getScrapeMetrics(): ScrapeMetrics[]; getSummary(): MetricsSummary; getMetricsByName(name: string): PerformanceMetric[]; getMetricsByTag(key: string, value: string): PerformanceMetric[]; percentile(name: string, p: number): number; average(name: string): number; min(name: string): number; max(name: string): number; clear(): void; flush(): Promise<void>; export(): string; save(filepath: string): Promise<void>; load(filepath: string): Promise<void>; }