performance-monitor-logger
Version:
## Instalação
258 lines • 9.68 kB
TypeScript
/**
* 📊 SISTEMA DE LOGS DE PERFORMANCE
*
* Sistema completo de monitoramento de performance para aplicações Angular
* com feedback visual através de emojis e relatórios automáticos.
*
* Características:
* - 📈 Monitoramento em Tempo Real
* - 🟢🟡🔴 Classificação Visual por Performance
* - ⏰ Relatórios Automáticos após Inatividade
* - 📊 Análise Detalhada com Recomendações
* - 🛠️ API Pública para Controle Manual
*
* @author Pedro Henrique dos Santos Leuchs
* @version 1.0.23
* @since 2025-07-11
*/
export interface PerformanceStats {
count: number;
totalTime: number;
minTime: number;
maxTime: number;
customThresholds?: {
ok?: number;
lento?: number;
critico?: number;
};
}
export interface DynamicThresholds {
ok: number;
lento: number;
critico: number;
}
export interface InstrumentOptions {
include?: Array<string | RegExp>;
exclude?: Array<string | RegExp>;
nameTransform?: (name: string, path?: string[]) => string;
preserveToString?: boolean;
maxDepth?: number;
}
export interface HookSetServiceOptions extends InstrumentOptions {
includeObjects?: Array<string | RegExp>;
excludeObjects?: Array<string | RegExp>;
maxWalkDepth?: number;
labelFromPath?: (path: string[]) => string;
}
export declare class LogsPerformatico {
private monitoramentoAtivo;
private performanceTimers;
private performanceSummary;
private serviceName;
private httpRequests;
private functionContextStack;
private eventContextStack;
private timerStack;
private lastTimerActivityAt;
private firstTimerInEventAt;
private currentEventBeginAt;
private instrumentedFns;
constructor(serviceName?: string);
/**
* Registra requisição HTTP associando à função monitorada ativa (se houver)
* @param payload Dados da requisição
*/
registerHttpRequest(authReq: any, tempo: number, error?: boolean): void;
private extrairNomeDeSQL;
/**
* 🚀 Mensagem de boas-vindas do sistema
*/
showWelcomeMessage(): void;
/**
* ⏱️ Inicia cronômetro para uma operação
* @param operationName Nome da operação a ser monitorada
*/
startTimer(operationName: string): void;
/**
* 🏁 Finaliza cronômetro e exibe resultado com emoji
* @param operationName Nome da operação
* @param customMessage Mensagem customizada opcional (ex: para erros)
* @param customThresholds Thresholds customizados para esta operação específica
*/
endTimer(operationName: string, customMessage?: string, customThresholds?: {
ok?: number;
lento?: number;
critico?: number;
}): void;
/**
* 🎨 Determina status de performance baseado no tempo
* @param elapsedTime Tempo decorrido em milissegundos
* @param customThresholds Thresholds customizados para esta operação específica
* @param operationName Nome da operação (para calcular thresholds dinâmicos)
* @returns Objeto com emoji, status e cor
*/
private getPerformanceStatus;
/**
* 📈 Atualiza estatísticas de performance para o sumário
* @param operationName Nome da operação
* @param elapsedTime Tempo decorrido em milissegundos
* @param customThresholds Thresholds customizados para armazenar (opcional)
*/
private updatePerformanceSummary;
/**
* 📊 Exibe relatório resumido de todas as operações (compactado)
*/
showPerformanceSummary(showFullDetails?: boolean): void;
/**
* 📑 Exibe relatório detalhado de requisições HTTP agrupadas por função
*/
showHttpRequestsReport(): void;
/**
* 🔍 Gera análise detalhada de performance
*/
generateDetailedAnalysis(): void;
/**
* 📋 Categoriza operações por performance
* @returns Objeto com arrays de operações categorizadas
*/
private categorizeOperations;
/**
* 💡 Exibe recomendações baseadas na análise
* @param criticalOperations Array de operações críticas
* @param slowOperations Array de operações lentas
*/
private showRecommendations;
/**
* 📊 Exibe score de performance
* @param fastOperationsCount Número de operações rápidas
*/
private showPerformanceScore;
/**
* 📊 Método público para exibir relatório de performance
* Pode ser chamado no console do navegador para análise
*/
getPerformanceReport(): void;
/**
* 🏷️ Controla contexto de evento atual (ex.: AppInit, Click)
*/
beginEventContext(label: string): void;
endEventContext(): void;
runInEventContext<T>(label: string, fn: () => Promise<T> | T): Promise<T>;
/**
* 🧹 Método público para limpar dados de performance
* Útil para resetar estatísticas e começar nova análise
*/
resetPerformanceData(): void;
/**
* ⏰ Configura o delay para relatório por inatividade
* @param seconds Número de segundos de inatividade para mostrar relatório
*/
setInactivityDelay(seconds: number): void;
/**
* 🔇 Desabilita relatório automático por inatividade
*/
disableInactivityReport(): void;
/**
* ⚙️ Configura o threshold para relatório automático
* @param threshold Número de operações para mostrar relatório automaticamente
*/
setAutoReportThreshold(threshold: number): void;
/**
* 🔇 Desabilita relatório automático
*/
disableAutoReport(): void;
/**
* 📈 Obtém estatísticas resumidas sem exibir no console
* @returns Objeto com estatísticas de performance
*/
getStatistics(): {
totalOperations: number;
averageTime: number;
fastOperations: number;
slowOperations: number;
criticalOperations: number;
performanceScore: number;
};
/**
* 🎯 Obtém dados de uma operação específica
* @param operationName Nome da operação
* @returns Estatísticas da operação ou null se não encontrada
*/
getOperationStats(operationName: string): (PerformanceStats & {
httpCalls: string[];
}) | null;
/**
* 📋 Lista todas as operações monitoradas
* @returns Array com nomes das operações
*/
getMonitoredOperations(): string[];
/**
* 🔄 Verifica se há timers ativos
* @returns true se há timers em execução
*/
hasActiveTimers(): boolean;
/**
* 🗑️ Limpa apenas os timers ativos (não as estatísticas)
*/
clearActiveTimers(): void;
/**
* 🔌 Instrumenta todas as funções públicas de um objeto/instância sem alterar assinatura
* @param obj Objeto ou instância a instrumentar
* @param options Filtros e ajustes de nome
*/
instrumentObject(obj: any, options?: InstrumentOptions): void;
/**
* 🌐 Instrumenta funções em um namespace (ex.: window) com filtros e profundidade
* @param root Objeto raiz (ex.: window)
* @param options include/exclude, nameTransform, preserveToString, maxDepth
*/
instrumentNamespace(root: any, options?: InstrumentOptions): void;
/**
* 🪝 Envolve a função setService(target.setService) para instrumentar o serviço passado
* @param target Objeto que possui setService(service)
* @param label Rótulo usado no nome das operações (ex.: "packTela")
* @param options Opções de instrumentação (nameTransform, exclude, etc.)
*/
hookSetService(target: any, label?: string, options?: InstrumentOptions): void;
/**
* 🪝 Hook de setService para vários alvos em uma única chamada
* @param targets Mapa de label -> objeto que contém setService
* @param options Opções de instrumentação
*/
hookSetServiceBulk(targets: Record<string, any>, options?: InstrumentOptions): void;
/**
* 🌐 Varre um namespace e aplica hook em qualquer função setService encontrada
* @param root Objeto raiz (ex.: window, module scope wrapper, etc.)
* @param options Filtros e regras de nomeação
*/
hookSetServiceNamespace(root: any, options?: HookSetServiceOptions): void;
/**
* Cria wrapper que inicia/encerra timer preservando contexto e toString()
*/
private createWrapper;
/**
* 🔎 Tenta inferir o nome do arquivo (pack) a partir do stacktrace
* Preferência por nomes que começam com "pack"
*/
private guessFileLabelFromStack;
/**
* 💾 Exporta dados de performance para JSON
* @returns String JSON com todos os dados
*/
exportData(): string;
/**
* 🎯 Calcula thresholds dinâmicos baseados na quantidade de execuções
* @param executionCount Número de execuções da operação
* @returns Objeto com thresholds calculados dinamicamente
*/
private calculateDynamicThresholds;
injectMonitorButton(): void;
showEventReport(includeHttp?: boolean): void;
}
/**
* 🏭 Factory function para criar instância do LogsPerformatico
* @param serviceName Nome do serviço (para logs personalizados)
* @returns Nova instância de LogsPerformatico
*/
export declare function createPerformanceLogger(serviceName?: string): LogsPerformatico;
//# sourceMappingURL=log-performatico.d.ts.map