T.ME/BIBIL_0DAY
CasperSecurity


Server : Apache/2
System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64
User : gositeme ( 1004)
PHP Version : 8.2.29
Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Directory :  /home/gositeme/domains/lavocat.ca/public_html/src/utils/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.ca/public_html/src/utils/performance.ts
// Performance monitoring utilities

interface PerformanceMetrics {
  renderTime: number;
  webSocketConnections: number;
  memoryUsage?: number;
  activeTimers: number;
}

class PerformanceMonitor {
  private static instance: PerformanceMonitor;
  private metrics: PerformanceMetrics = {
    renderTime: 0,
    webSocketConnections: 0,
    activeTimers: 0
  };
  private renderStartTime: number = 0;

  static getInstance(): PerformanceMonitor {
    if (!PerformanceMonitor.instance) {
      PerformanceMonitor.instance = new PerformanceMonitor();
    }
    return PerformanceMonitor.instance;
  }

  startRenderTimer(): void {
    this.renderStartTime = performance.now();
  }

  endRenderTimer(componentName?: string): void {
    const renderTime = performance.now() - this.renderStartTime;
    this.metrics.renderTime = renderTime;
    
    if (renderTime > 16.67) { // More than one frame (60fps)
      console.warn(`⚠️ Slow render detected in ${componentName || 'component'}: ${renderTime.toFixed(2)}ms`);
    }
  }

  trackWebSocketConnection(): void {
    this.metrics.webSocketConnections++;
    console.log(`🔌 WebSocket connections: ${this.metrics.webSocketConnections}`);
  }

  trackWebSocketDisconnection(): void {
    this.metrics.webSocketConnections = Math.max(0, this.metrics.webSocketConnections - 1);
    console.log(`🔌 WebSocket connections: ${this.metrics.webSocketConnections}`);
  }

  trackActiveTimer(): void {
    this.metrics.activeTimers++;
    if (this.metrics.activeTimers > 10) {
      console.warn(`⏰ High number of active timers: ${this.metrics.activeTimers}`);
    }
  }

  trackTimerCleanup(): void {
    this.metrics.activeTimers = Math.max(0, this.metrics.activeTimers - 1);
  }

  getMemoryUsage(): number | undefined {
    if ('memory' in performance) {
      return (performance as any).memory.usedJSHeapSize / 1024 / 1024; // MB
    }
    return undefined;
  }

  logPerformanceReport(): void {
    const memory = this.getMemoryUsage();
    
    console.group('📊 Performance Report');
    console.log(`🎨 Last render time: ${this.metrics.renderTime.toFixed(2)}ms`);
    console.log(`🔌 Active WebSocket connections: ${this.metrics.webSocketConnections}`);
    console.log(`⏰ Active timers: ${this.metrics.activeTimers}`);
    if (memory) {
      console.log(`💾 Memory usage: ${memory.toFixed(2)}MB`);
    }
    console.groupEnd();
  }

  // Detect performance issues
  detectIssues(): string[] {
    const issues: string[] = [];
    
    if (this.metrics.renderTime > 100) {
      issues.push(`Extremely slow render: ${this.metrics.renderTime.toFixed(2)}ms`);
    }
    
    if (this.metrics.webSocketConnections > 3) {
      issues.push(`Too many WebSocket connections: ${this.metrics.webSocketConnections}`);
    }
    
    if (this.metrics.activeTimers > 15) {
      issues.push(`Too many active timers: ${this.metrics.activeTimers}`);
    }
    
    const memory = this.getMemoryUsage();
    if (memory && memory > 100) {
      issues.push(`High memory usage: ${memory.toFixed(2)}MB`);
    }
    
    return issues;
  }
}

export const performanceMonitor = PerformanceMonitor.getInstance();

// React hook for component performance monitoring
export const usePerformanceMonitor = (componentName: string) => {
  const startRender = () => performanceMonitor.startRenderTimer();
  const endRender = () => performanceMonitor.endRenderTimer(componentName);
  
  return { startRender, endRender };
};

// Automatic performance issue detection
if (typeof window !== 'undefined') {
  setInterval(() => {
    const issues = performanceMonitor.detectIssues();
    if (issues.length > 0) {
      console.warn('🚨 Performance issues detected:', issues);
    }
  }, 30000); // Check every 30 seconds
} 

CasperSecurity Mini