GeneratePerformanceReportUseCase.ts•3.13 kB
import { PerformanceDomainService } from '../../domain/performance/services/PerformanceDomainService.js';
export interface GeneratePerformanceReportRequest {
  period?: '1h' | '24h' | '7d';
}
export interface GeneratePerformanceReportResponse {
  success: boolean;
  report?: {
    period: string;
    generatedAt: Date;
    summary: {
      currentMetric: any;
      activeAlerts: any[];
      overallHealth: 'healthy' | 'warning' | 'critical';
      recommendations: string[];
    };
    connectionPoolStatus: {
      current: any;
      trend: string;
    };
    queryPerformance: {
      current: any;
      trend: string;
    };
    systemHealth: {
      current: any;
      trend: string;
    };
  };
  error?: string;
}
export class GeneratePerformanceReportUseCase {
  constructor(private readonly performanceDomainService: PerformanceDomainService) {}
  async execute(
    request: GeneratePerformanceReportRequest
  ): Promise<GeneratePerformanceReportResponse> {
    try {
      const period = request.period || '1h';
      // get performance summary
      const summary = await this.performanceDomainService.getPerformanceSummary(period);
      // create report
      const report = {
        period,
        generatedAt: new Date(),
        summary,
        connectionPoolStatus: {
          current: summary.currentMetric?.connectionPool || null,
          trend: this.analyzeTrend('connectionPool', summary.currentMetric),
        },
        queryPerformance: {
          current: summary.currentMetric?.query || null,
          trend: this.analyzeTrend('query', summary.currentMetric),
        },
        systemHealth: {
          current: summary.currentMetric?.system || null,
          trend: this.analyzeTrend('system', summary.currentMetric),
        },
      };
      return {
        success: true,
        report,
      };
    } catch (error) {
      return {
        success: false,
        error: error instanceof Error ? error.message : 'Unknown error occurred',
      };
    }
  }
  private analyzeTrend(category: string, currentMetric: any): string {
    // simple trend analysis (should compare with past data)
    if (!currentMetric) return 'No data available';
    switch (category) {
      case 'connectionPool':
        const utilization = currentMetric.connectionPool?.utilization || 0;
        if (utilization > 80) return 'High utilization - trending up';
        if (utilization > 50) return 'Moderate utilization - stable';
        return 'Low utilization - stable';
      case 'query':
        const avgTime = currentMetric.query?.averageExecutionTime || 0;
        if (avgTime > 2000) return 'Slow queries detected - needs attention';
        if (avgTime > 1000) return 'Moderate performance - stable';
        return 'Good performance - stable';
      case 'system':
        const cpuUsage = currentMetric.system?.cpuUsage || 0;
        if (cpuUsage > 80) return 'High resource usage - trending up';
        if (cpuUsage > 50) return 'Moderate resource usage - stable';
        return 'Low resource usage - stable';
      default:
        return 'Unknown trend';
    }
  }
}