@ahmedhegazee/nestjs-telescope
Version:
Advanced observability and monitoring solution for NestJS applications with ML-powered analytics, enterprise features, and production-ready scaling
160 lines (159 loc) • 5.26 kB
TypeScript
import { OnModuleInit } from '@nestjs/common';
import { Observable } from 'rxjs';
import { AnalyticsService } from './analytics.service';
import { PerformanceCorrelationService } from './performance-correlation.service';
export interface AnomalyDetection {
id: string;
timestamp: Date;
type: 'performance' | 'error' | 'traffic' | 'resource' | 'query';
severity: 'low' | 'medium' | 'high' | 'critical';
component: string;
metric: string;
value: number;
baseline: number;
deviation: number;
confidence: number;
description: string;
suggestedActions: string[];
}
export interface RegressionAnalysis {
id: string;
timestamp: Date;
metric: string;
component: string;
timeWindow: string;
trend: 'improving' | 'degrading' | 'stable';
regressionRate: number;
confidence: number;
predictedValue: number;
actualValue: number;
impactAssessment: {
severity: 'low' | 'medium' | 'high' | 'critical';
affectedUsers: number;
estimatedLoss: string;
timeToRevert: string;
};
}
export interface QueryOptimizationSuggestion {
id: string;
timestamp: Date;
queryHash: string;
query: string;
table: string;
currentPerformance: {
executionTime: number;
ioOperations: number;
cpuUsage: number;
};
optimizationStrategy: {
type: 'index' | 'rewrite' | 'cache' | 'partition' | 'normalize';
suggestion: string;
estimatedImprovement: number;
confidence: number;
effort: 'low' | 'medium' | 'high';
};
sqlRecommendation?: string;
indexSuggestion?: {
table: string;
columns: string[];
type: 'btree' | 'hash' | 'gin' | 'gist';
};
}
export interface PredictiveInsight {
id: string;
timestamp: Date;
predictionType: 'load' | 'failure' | 'performance' | 'resource';
timeHorizon: '1h' | '6h' | '24h' | '7d' | '30d';
metric: string;
component: string;
currentValue: number;
predictedValue: number;
confidence: number;
trend: 'increasing' | 'decreasing' | 'stable' | 'volatile';
riskLevel: 'low' | 'medium' | 'high' | 'critical';
recommendedActions: string[];
thresholds: {
warning: number;
critical: number;
};
}
export interface MLAlert {
id: string;
timestamp: Date;
type: 'anomaly' | 'regression' | 'prediction' | 'optimization';
severity: 'info' | 'warning' | 'error' | 'critical';
title: string;
description: string;
component: string;
metric?: string;
triggeredBy: {
value: number;
threshold: number;
confidence: number;
};
actions: Array<{
type: 'investigate' | 'optimize' | 'scale' | 'alert' | 'rollback';
description: string;
priority: number;
automated: boolean;
}>;
relatedInsights: string[];
}
export declare class MLAnalyticsService implements OnModuleInit {
private readonly analyticsService;
private readonly performanceCorrelationService;
private readonly logger;
private readonly dataHistory;
private readonly anomalySubject;
private readonly regressionSubject;
private readonly optimizationSubject;
private readonly predictionSubject;
private readonly alertSubject;
private readonly config;
constructor(analyticsService: AnalyticsService, performanceCorrelationService: PerformanceCorrelationService);
onModuleInit(): Promise<void>;
private startMLAnalysis;
private updateDataHistory;
private performAnomalyDetection;
private performRegressionAnalysis;
private generatePredictiveInsights;
private analyzeQueryOptimizationOpportunities;
private performAdvancedAnalysis;
private classifyAnomalyType;
private calculateAnomalySeverity;
private getComponentFromMetric;
private generateAnomalyDescription;
private generateAnomalySuggestions;
private assessRegressionImpact;
private calculateTrend;
private calculatePredictionConfidence;
private getPredictionType;
private assessPredictionRisk;
private generatePredictionRecommendations;
private getMetricThresholds;
private suggestOptimizationStrategy;
private generateAlertsFromAnomalies;
private estimateAffectedUsers;
private estimateLoss;
private estimateRevertTime;
getAnomalies(): Observable<AnomalyDetection[]>;
getRegressionAnalysis(): Observable<RegressionAnalysis[]>;
getOptimizationSuggestions(): Observable<QueryOptimizationSuggestion[]>;
getPredictiveInsights(): Observable<PredictiveInsight[]>;
getMLAlerts(): Observable<MLAlert[]>;
getCurrentAnomalies(): AnomalyDetection[];
getCurrentRegressions(): RegressionAnalysis[];
getCurrentOptimizations(): QueryOptimizationSuggestion[];
getCurrentPredictions(): PredictiveInsight[];
getCurrentAlerts(): MLAlert[];
acknowledgeAlert(alertId: string): boolean;
dismissAnomaly(anomalyId: string): boolean;
getMLMetrics(): {
anomaliesDetected: number;
regressionsAnalyzed: number;
optimizationSuggestions: number;
predictiveInsights: number;
activeAlerts: number;
dataHistorySize: number;
};
}