performance-monitor-logger
Version:
## Instalação
186 lines (142 loc) • 5.27 kB
Markdown
# 📊 Performance Monitor Logger - Complete Guide
## Instalação
```bash
npm i performance-monitor-logger --save-dev
```
## Exemplo de Uso
### tela.service.ts
```typescript
import { Injectable } from "@angular/core";
import { PerformanceMonitor } from "performance-monitor-logger"; //<--
export class ExemploService {
constructor() {}
//<--
async buscarUsuarios() {
try {
const usuarios = await this.http.get("/api/usuarios").toPromise();
return usuarios;
} catch (error) {
throw error;
}
}
//<--
async salvarUsuario(usuario: any) {
try {
const resultado = await this.http.post("/api/usuarios", usuario).toPromise();
return resultado;
} catch (error) {
throw error;
}
}
}
```
### tela.component.ts
```typescript
import { Injectable } from "@angular/core";
import { GlobalPerformanceLogger } from "performance-monitor-logger"; //<--
constructor() {
GlobalPerformanceLogger.injectMonitorButton(); //<--
}
```
### app.module.ts
```typescript
import { PerformanceMonitorInterceptor } from "performance-monitor-logger"; //<--
export class AppModule {}
```
## Modo Auto‑Instrumentação (sem decorators) – monitorar `setService(...)`
Em cenários onde serviços são registrados via `setService(this)` (ex.: packs como `packTela`, `packDescricoes`, etc.), você pode habilitar o monitoramento automaticamente, sem usar `` em cada método.
O logger disponibiliza três utilitários:
- `GlobalPerformanceLogger.hookSetService(target, label?, options?)`
- `GlobalPerformanceLogger.hookSetServiceBulk(targetsMap, options?)`
- `GlobalPerformanceLogger.hookSetServiceNamespace(root, options?)`
Esses hooks substituem a função `setService` do alvo e instrumentam a instância passada, envolvendo todos os métodos públicos para coleta de métricas com segurança e alto desempenho.
### Opções principais
- `exclude`: filtros de métodos a ignorar (padrão exclui `constructor`).
- `nameTransform`: função para nomear operações (ex.: `packTela.metodo`).
- `include`/`exclude` (InstrumentOptions): filtros por nome do método.
- `includeObjects`/`excludeObjects` (Namespace): filtros por caminho do objeto em varredura.
- `maxWalkDepth`: profundidade máxima ao varrer namespaces.
### Exemplo 1 — Hook em vários packs com uma chamada | SUGESTÃO |
```typescript
import { GlobalPerformanceLogger } from "performance-monitor-logger";
// Agrupe os packs em um objeto literal
const packs = {
packTela,
packDescricoes,
packCalculo,
packFormulas,
packPrecograoInterno,
packProcedimentos,
gravaFixacao,
gravaProgfixacao,
gravaDevolucao,
packFornecedor,
packTransgenicoInterna,
packMaxeditorTela,
packClifor,
packParametros,
packVetor,
packQualidade,
packRecexpgrao,
packImpostotela,
packFuncoes,
packMestra,
packPropostanegocio,
packFavorecidos,
functionService: this.functionService,
modelLov: this.modelLov,
packArquivoutils: this.packArquivoutils,
};
// Aplica o hook de forma bulk
GlobalPerformanceLogger.hookSetServiceBulk(packs, {
exclude: ["constructor"],
nameTransform: (name, path) => `${path?.[0] || "service"}.${name}`,
});
// As chamadas existentes a setService(...) continuam funcionando normalmente,
// mas agora cada serviço passado será instrumentado automaticamente.
```
### Exemplo 2 — Varredura de namespace
```typescript
import { GlobalPerformanceLogger } from "performance-monitor-logger";
const packs = {
/* mesmo objeto do exemplo anterior */
};
GlobalPerformanceLogger.hookSetServiceNamespace(packs, {
includeObjects: [/./],
maxWalkDepth: 0,
exclude: ["constructor"],
labelFromPath: (p) => p[0],
nameTransform: (name, path) => `${path?.[0] || "service"}.${name}`,
});
```
### Exemplo 3 — Por objeto individual
```typescript
import { GlobalPerformanceLogger } from "performance-monitor-logger";
GlobalPerformanceLogger.hookSetService(packTela, "packTela");
GlobalPerformanceLogger.hookSetService(packDescricoes, "packDescricoes");
// ... e assim por diante
```
### Como os nomes das operações são formados
- Por padrão, cada método instrumentado recebe o nome `label.metodo`.
- O `label` vem do argumento passado ou do caminho calculado no namespace.
- Personalize com `nameTransform`, por exemplo: `name => 'srv:' + name`.
### Interoperabilidade com o modo decorator
- Você pode misturar os dois modos. Métodos anotados com `` continuam medidos.
- O hook evita duplicação e preserva `toString()` para compatibilidade com regex.
- O `constructor` é sempre ignorado por segurança.
## Resultado esperado:
### No console você verá:



