fg-tracker-sdk 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog — fg-tracker-sdk
2
2
 
3
+ ## 0.5.0 — 2026-09-15
4
+
5
+ - **Agregados de infraestrutura** (CONTRATO.md §27.4): o tracker agrega em processo por recurso e envia `infra[]` no mesmo `POST /v1/ingest` dos spans. Contadores nunca são amostrados (independem de `tracesSampleRate`, `tracesSampler` e `beforeSend`). Janela de 60 s (`infra.idleIntervalMs`) ou `liveIntervalMs` enquanto a resposta da ingestão trouxer `live: true`. Processo só com infra envia `{ traces: [], infra }`; sem agregados o body é idêntico ao da 0.4.
6
+ - `tracker.instrumentAws(client)`: middleware do AWS SDK v3 para SQS, SNS, EventBridge, Kinesis, DynamoDB (injeta `ReturnConsumedCapacity: 'TOTAL'`) e Step Functions, com span `http.client` por chamada (`aws.service`, `aws.operation`, `aws.resourceArn`, `aws.region`).
7
+ - `tracker.trackMessage(queue, fn)`: tempo de processamento e erros de mensagens consumidas.
8
+ - `tracker.instrumentPgPool(pool, { name })`: pressão do pool (`db_pool`: total, idle, waiting, maxWaitMs).
9
+ - `tracker.startInfraReporter({ ecs })`: CPU, memória, rede e heartbeat da task ECS/Fargate.
10
+ - `tracker.wrapLambda(handler)`: span por invocação e flush antes do congelamento quando a camada `fg-tracker-lambda-extension` não está presente.
11
+ - Opção `infra: { enabled, idleIntervalMs }`; novos exports `InfraAggregate`, `InfraAggregator`, `sqsQueueRef`, `parseArn`, `hasLambdaExtension` e tipos estruturais (`AwsClientLike`, `PgPoolStatsLike`, `LambdaHandler`…). Sem novas dependências de runtime.
12
+
3
13
  ## 0.4.0 — 2026-09-15
4
14
 
5
15
  - **Renomeado de `stread-track-sdk` — nomes antigos continuam funcionando e serão removidos na 1.0.** Veja "Migração de stread-track-sdk" no README.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # fg-tracker-sdk
2
2
 
3
- Instrumentação Node para o [FG Tracker](../../README.md) e envio de logs (pino, winston, NestJS Logger). Única dependência de runtime: `pino-abstract-transport`; usa `AsyncLocalStorage` para encadear spans e o `fetch` global do Node para enviar lotes ao `POST /v1/ingest`.
3
+ Instrumentação Node para o [FG Tracker](../../README.md) e envio de logs (pino, winston, NestJS Logger). Única dependência de runtime: `pino-abstract-transport` (a instrumentação AWS usa tipos estruturais, sem `@aws-sdk/*`); usa `AsyncLocalStorage` para encadear spans e o `fetch` global do Node para enviar lotes ao `POST /v1/ingest`.
4
4
 
5
5
  Requisitos: Node ≥ 20 (recomendado 24). O pacote é ESM; em projetos CommonJS (NestJS) funciona com `require()` no Node ≥ 22.12 ou via `import()` dinâmico.
6
6
 
@@ -57,6 +57,7 @@ await tracker.flush(); await tracker.shutdown();
57
57
  | `ignoreErrors` | `[]` | erros (`name: message`, string/RegExp) que não viram issue (`attributes.ignoredError = true`) |
58
58
  | `scrubFields` | `DEFAULT_SCRUB_FIELDS` | chaves de atributos que viram `[Filtered]` (password, token, authorization, cookie, cpf…); `false` desliga |
59
59
  | `beforeSend` | — | `(span) => span \| null`, último filtro antes da fila |
60
+ | `infra` | `{ enabled: true, idleIntervalMs: 60000 }` | agregados de infraestrutura (veja **Infraestrutura**); nunca amostrados |
60
61
 
61
62
  ## Erros, usuários, releases e jobs
62
63
 
@@ -304,6 +305,95 @@ curl -X POST http://localhost:4050/v1/logs \\
304
305
 
305
306
  Limites: 500 linhas por lote, 32 KB por mensagem, `context` truncado a 8 KB, `ts` fora da retenção vira `now()`.
306
307
 
308
+ ## Infraestrutura
309
+
310
+ O tracker também envia **agregados de infraestrutura** por recurso (CONTRATO.md §27.4) que alimentam o diagrama vivo do painel. Regras:
311
+
312
+ - **Nunca amostrados**: `tracesSampleRate`, `tracesSampler` e `beforeSend` valem só para spans; os contadores saem completos.
313
+ - **Agregação em processo**: um resumo por recurso a cada 60 s (`infra.idleIntervalMs`), não um evento por chamada.
314
+ - **Mesmo lote do APM**: os agregados vão em `infra[]` no mesmo `POST /v1/ingest` dos spans (`{ traces: [], infra }` quando só há infra).
315
+ - **Tempo real sob demanda**: enquanto alguém observa o diagrama, a resposta da ingestão traz `live: true` e a janela cai para `liveIntervalMs` (5 s), sem chamada extra.
316
+
317
+ ```ts
318
+ const tracker = createTracker({
319
+ apiKey: process.env.FG_TRACKER_KEY!,
320
+ endpoint: process.env.FG_TRACKER_URL,
321
+ serviceName: 'orders-api',
322
+ infra: { enabled: true, idleIntervalMs: 60_000 }, // defaults
323
+ });
324
+ ```
325
+
326
+ ### AWS SDK v3 (SQS, SNS, EventBridge, Kinesis, DynamoDB, Step Functions)
327
+
328
+ ```ts
329
+ import { SQSClient, SendMessageCommand } from '@aws-sdk/client-sqs';
330
+ import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
331
+ import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
332
+
333
+ const sqs = tracker.instrumentAws(new SQSClient({}));
334
+ const dynamo = tracker.instrumentAws(new DynamoDBClient({})); // instrumente o client base
335
+ const docs = DynamoDBDocumentClient.from(dynamo); // o DocumentClient compartilha o middleware
336
+ await sqs.send(new SendMessageCommand({ QueueUrl, MessageBody }));
337
+ ```
338
+
339
+ | serviço | operações | agregado |
340
+ |---|---|---|
341
+ | SQS | `SendMessage[Batch]`, `ReceiveMessage`, `DeleteMessage[Batch]` | `sqs`: `sent`, `bytesSent`, `received`, `receiveEmpty`, `deleted`, `errors` (ARN resolvido da `QueueUrl`) |
342
+ | SNS | `Publish`, `PublishBatch` | `sns`: `published`, `bytes`, `errors` |
343
+ | EventBridge | `PutEvents` | `eventbridge` por barramento (`EventBusName` ou `default`): `published`, `bytes`, `errors` |
344
+ | Kinesis | `PutRecord`, `PutRecords` | `kinesis`: `published`, `bytes`, `errors` |
345
+ | DynamoDB | `GetItem`, `PutItem`, `UpdateItem`, `DeleteItem`, `Query`, `Scan`, `BatchGetItem`, `BatchWriteItem`, `TransactGetItems`, `TransactWriteItems` | `dynamodb` por tabela: `readUnits`, `writeUnits`, `throttles`, `errors`, `calls` |
346
+ | Step Functions | `StartExecution`, `StartSyncExecution` | `sfn`: `started`, `succeeded`, `failed` |
347
+
348
+ - No DynamoDB o middleware injeta `ReturnConsumedCapacity: 'TOTAL'` quando você não informa (passar `'NONE'` desliga a contagem de unidades).
349
+ - Quando há um trace em andamento, **toda** chamada AWS (de qualquer serviço) vira um span `http.client` `AWS <serviço> <operação> <recurso>` com `attributes['aws.service']`, `aws.operation`, `aws.resourceArn`, `aws.region` e `statusCode`/erro. Esses spans seguem a amostragem normal.
350
+ - Nomes viram ARN quando a conta é conhecida (aprendida de ARNs/URLs vistos ou `AWS_ACCOUNT_ID`); sem conta, a API casa o nó por nome + região + serviço.
351
+
352
+ ### Consumidores de fila
353
+
354
+ ```ts
355
+ for (const message of Messages ?? []) {
356
+ await tracker.trackMessage(QueueUrl, () => handle(message)); // URL ou ARN da fila
357
+ }
358
+ ```
359
+
360
+ Mede `processingMsSum`/`processingMsMax` e conta `errors` quando `fn` lança (o erro é relançado). Cria um span `custom` `SQS process <fila>` para os spans internos formarem um trace.
361
+
362
+ ### Pool de conexões (pg)
363
+
364
+ ```ts
365
+ const pool = new Pool({ connectionString: process.env.DATABASE_URL });
366
+ tracker.instrumentPg(pool); // spans db.query (inalterado)
367
+ tracker.instrumentPgPool(pool, { name: 'orders-db' }); // agregado db_pool
368
+ ```
369
+
370
+ Lê `totalCount`, `idleCount` e `waitingCount` a cada 5 s (timer `unref`) e mede a espera de `pool.connect` — inclusive a usada por `pool.query` — em `maxWaitMs`. `pool.end()` para o timer.
371
+
372
+ ### ECS e Fargate
373
+
374
+ ```ts
375
+ const reporter = tracker.startInfraReporter({ ecs: true, intervalMs: 10_000 });
376
+ // reporter.stop() — também parado por tracker.shutdown()
377
+ ```
378
+
379
+ Com `ECS_CONTAINER_METADATA_URI_V4` presente, lê `/task` uma vez (ARN da task, cluster, serviço — `ECS_SERVICE_NAME`, `ServiceName` ou a família da task definition —, launch type e limites) e `/task/stats` a cada `intervalMs`: `ecs_task` com `cpuPercent` (pico, relativo ao limite de CPU da task), `memoryMb` (sem cache), `networkRxBytes`/`networkTxBytes` (deltas), `memoryLimitMb`, `cpuUnits`, `launchType`, `architecture` e o heartbeat de cada janela, que conta as réplicas vivas. Fora do ECS é no-op.
380
+
381
+ ### AWS Lambda
382
+
383
+ ```ts
384
+ export const handler = tracker.wrapLambda(async (event, context) => {
385
+ // ...
386
+ return { statusCode: 200 };
387
+ }, { flushTimeoutMs: 1000 });
388
+ ```
389
+
390
+ - Cria um span raiz `custom` `lambda <função>` por invocação (`faas.coldStart`, `faas.requestId`); desligue com `{ span: false }`.
391
+ - **Sem a camada da extensão**: aguarda `flush()` (até `flushTimeoutMs`) ao fim de cada invocação, para spans e agregados não se perderem no congelamento do ambiente.
392
+ - **Com a camada** (`/opt/extensions/fg-tracker-extension` existe): não bloqueia a resposta; a fila sobrevive ao congelamento e é enviada no SIGTERM do encerramento (quando nenhum outro handler de SIGTERM está registrado).
393
+ - Handlers com callback não são suportados (use `async`).
394
+
395
+ A camada [`fg-tracker-lambda-extension`](../lambda-extension/README.md) coleta, sem mudar o código, invocações, erros, timeouts, cold starts, duração, memória e concorrência (`kind: 'lambda'`) pela Telemetry API. Anexe o ARN público da camada à função e defina `FG_TRACKER_URL` e `FG_TRACKER_KEY`.
396
+
307
397
  ## Variáveis de ambiente
308
398
 
309
399
  | variável | uso |
package/dist/index.d.ts CHANGED
@@ -1,11 +1,19 @@
1
1
  export type { DatabaseInstrumentationOptions, DatabaseOperation, PostgresSqlLike } from "./database.js";
2
2
  import type { Tracker, TrackerOptions } from './types.js';
3
- export type { ActiveSpan, CheckInHandle, CheckInOptions, ExpressErrorMiddleware, ExpressLikeRequest, ExpressLikeResponse, ExpressMiddleware, ExpressOptions, NextRouteHandler, PgPoolLike, PropagationTargets, RegisterReleaseInput, ReleaseCommitInput, SamplingContext, Span, SpanError, SpanKind, Tracker, TrackerOptions, UserRef, } from './types.js';
3
+ export type { ActiveSpan, CheckInHandle, CheckInOptions, ExpressErrorMiddleware, ExpressLikeRequest, ExpressLikeResponse, ExpressMiddleware, ExpressOptions, InfraOptions, NextRouteHandler, PgPoolLike, PropagationTargets, RegisterReleaseInput, ReleaseCommitInput, SamplingContext, Span, SpanError, SpanKind, Tracker, TrackerOptions, UserRef, } from './types.js';
4
4
  export { normalizePath, normalizeSql } from './normalize.js';
5
5
  export { detectEnvironment, detectRelease, shouldPropagate } from './tracker.js';
6
6
  export { formatTraceparent, parseTraceparent, TRACEPARENT_HEADER } from './context.js';
7
7
  export { DEFAULT_SCRUB_FIELDS, scrubAttributes } from './scrub.js';
8
8
  export { API_KEY_HEADER, DEFAULT_ENDPOINT, readEnv } from './constants.js';
9
+ export { InfraAggregator, detectArchitecture, infraKey } from './infra/aggregator.js';
10
+ export type { InfraAggregate, InfraAggregatorOptions, InfraKind, InfraResourceRef } from './infra/aggregator.js';
11
+ export { parseArn, sqsQueueRef } from './infra/aws.js';
12
+ export type { AwsClientLike, AwsHandlerContext, AwsNextHandler } from './infra/aws.js';
13
+ export type { PgPoolMonitorOptions, PgPoolStatsLike } from './infra/db-pool.js';
14
+ export type { InfraReporter, InfraReporterOptions } from './infra/ecs.js';
15
+ export { hasLambdaExtension, LAMBDA_EXTENSION_PATH } from './infra/lambda.js';
16
+ export type { LambdaContextLike, LambdaHandler, WrapLambdaOptions } from './infra/lambda.js';
9
17
  /**
10
18
  * Cria um tracker do FG Tracker.
11
19
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AASxG,OAAO,KAAK,EAAsE,OAAO,EAAE,cAAc,EAAW,MAAM,YAAY,CAAC;AAEvI,YAAY,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,OAAO,EACP,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE3E;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAiG9D;AAyBD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEtH,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAaxG,OAAO,KAAK,EAAsE,OAAO,EAAE,cAAc,EAAW,MAAM,YAAY,CAAC;AAEvI,YAAY,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,OAAO,EACP,cAAc,EACd,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtF,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACvF,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE7F;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CA2G9D;AAyBD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACzD,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEtH,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -7,11 +7,18 @@ import { wrapNextRouteHandler } from './next.js';
7
7
  import { instrumentPgPool } from './pg.js';
8
8
  import { registerRelease } from './releases.js';
9
9
  import { TrackerCore } from './tracker.js';
10
+ import { instrumentAwsClient, trackQueueMessage } from './infra/aws.js';
11
+ import { monitorPgPool } from './infra/db-pool.js';
12
+ import { startInfraReporter } from './infra/ecs.js';
13
+ import { wrapLambdaHandler } from './infra/lambda.js';
10
14
  export { normalizePath, normalizeSql } from './normalize.js';
11
15
  export { detectEnvironment, detectRelease, shouldPropagate } from './tracker.js';
12
16
  export { formatTraceparent, parseTraceparent, TRACEPARENT_HEADER } from './context.js';
13
17
  export { DEFAULT_SCRUB_FIELDS, scrubAttributes } from './scrub.js';
14
18
  export { API_KEY_HEADER, DEFAULT_ENDPOINT, readEnv } from './constants.js';
19
+ export { InfraAggregator, detectArchitecture, infraKey } from './infra/aggregator.js';
20
+ export { parseArn, sqsQueueRef } from './infra/aws.js';
21
+ export { hasLambdaExtension, LAMBDA_EXTENSION_PATH } from './infra/lambda.js';
15
22
  /**
16
23
  * Cria um tracker do FG Tracker.
17
24
  *
@@ -113,6 +120,11 @@ export function createTracker(options) {
113
120
  checkIn: (slug, fn, checkInOptions) => runCheckIn(core, slug, fn, checkInOptions),
114
121
  monitor: (slug, checkInOptions) => createMonitor(core, slug, checkInOptions),
115
122
  registerRelease: (input) => registerRelease(core, input),
123
+ instrumentAws: (client) => instrumentAwsClient(core, client),
124
+ trackMessage: (queue, fn) => trackQueueMessage(core, queue, fn),
125
+ instrumentPgPool: (pool, poolOptions) => monitorPgPool(core, pool, poolOptions),
126
+ startInfraReporter: (reporterOptions) => startInfraReporter(core, reporterOptions),
127
+ wrapLambda: (handler, lambdaOptions) => wrapLambdaHandler(core, handler, lambdaOptions),
116
128
  get release() {
117
129
  return core.options.release;
118
130
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Agregador de infraestrutura em processo (CONTRATO.md §27.4, plano-infraestrutura.md §9).
3
+ *
4
+ * Regras:
5
+ * - contadores NUNCA são amostrados (independem de `tracesSampleRate`/`beforeSend`);
6
+ * - um agregado por `kind + (resourceArn | resourceName) + region`, com janela `windowStart..windowEnd`;
7
+ * - o tracker drena o agregador no mesmo lote do `POST /v1/ingest` (campo `infra`).
8
+ */
9
+ export type InfraKind = 'lambda' | 'ecs_task' | 'sqs' | 'sns' | 'eventbridge' | 'kinesis' | 'dynamodb' | 'db_pool' | 'sfn';
10
+ /** Agregado enviado em `POST /v1/ingest` → `infra[]`. */
11
+ export interface InfraAggregate {
12
+ kind: InfraKind;
13
+ resourceArn?: string;
14
+ resourceName?: string;
15
+ region?: string;
16
+ /** ISO-8601. */
17
+ windowStart: string;
18
+ /** ISO-8601. */
19
+ windowEnd: string;
20
+ /** Chaves por `kind` em §27.4; valores numéricos, salvo identificadores (`architecture`, `taskArn`…). */
21
+ metrics: Record<string, number | string>;
22
+ }
23
+ /** Recurso ao qual um agregado se refere. Informe `resourceArn` sempre que conhecido. */
24
+ export interface InfraResourceRef {
25
+ kind: InfraKind;
26
+ resourceArn?: string | undefined;
27
+ resourceName?: string | undefined;
28
+ region?: string | undefined;
29
+ }
30
+ export interface InfraAggregatorOptions {
31
+ /** Máximo de recursos distintos por janela; novos recursos acima disso são descartados. Default 1000. */
32
+ maxResources?: number;
33
+ /** Chamado quando a primeira métrica de uma janela vazia é registrada (o tracker arma o timer). */
34
+ onRecord?: () => void;
35
+ }
36
+ export declare function infraKey(ref: InfraResourceRef): string;
37
+ export declare class InfraAggregator {
38
+ private entries;
39
+ private readonly maxResources;
40
+ private readonly onRecord;
41
+ /** Recursos descartados pelo limite desde o último `drain()`. */
42
+ dropped: number;
43
+ /** Conta AWS aprendida de ARNs/URLs vistos (usada para montar ARNs a partir de nomes). */
44
+ accountId: string | undefined;
45
+ constructor(options?: InfraAggregatorOptions);
46
+ private entry;
47
+ /** Contador: soma `value` (default 1). */
48
+ add(ref: InfraResourceRef, metric: string, value?: number): void;
49
+ /** Gauge de pico: guarda o maior valor da janela. */
50
+ max(ref: InfraResourceRef, metric: string, value: number): void;
51
+ /** Gauge/identificador: guarda o último valor da janela. */
52
+ last(ref: InfraResourceRef, metric: string, value: number | string): void;
53
+ /** Garante que o recurso aparece na janela (heartbeat) mesmo sem métricas. */
54
+ touch(ref: InfraResourceRef): void;
55
+ /** Aprende a conta AWS a partir de um ARN (`arn:aws:<svc>:<region>:<account>:...`). */
56
+ learnAccount(arn: string | undefined): void;
57
+ hasData(): boolean;
58
+ get size(): number;
59
+ /** Fecha a janela: devolve todos os agregados com `windowEnd = agora` e zera o estado. */
60
+ drain(now?: number): InfraAggregate[];
61
+ }
62
+ /** `process.arch` → valor do contrato (`x86_64` | `arm64`). */
63
+ export declare function detectArchitecture(arch?: string): string;
64
+ //# sourceMappingURL=aggregator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../../src/infra/aggregator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;AAE3H,yDAAyD;AACzD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;CAC1C;AAED,yFAAyF;AACzF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAQD,MAAM,WAAW,sBAAsB;IACrC,yGAAyG;IACzG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAEtD;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,iEAAiE;IACjE,OAAO,SAAK;IACZ,0FAA0F;IAC1F,SAAS,EAAE,MAAM,GAAG,SAAS,CAAmD;gBAEpE,OAAO,GAAE,sBAA2B;IAKhD,OAAO,CAAC,KAAK;IAiBb,0CAA0C;IAC1C,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,IAAI;IAQ3D,qDAAqD;IACrD,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ/D,4DAA4D;IAC5D,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOzE,8EAA8E;IAC9E,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAIlC,uFAAuF;IACvF,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAM3C,OAAO,IAAI,OAAO;IAIlB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0FAA0F;IAC1F,KAAK,CAAC,GAAG,GAAE,MAAmB,GAAG,cAAc,EAAE;CAmBlD;AAED,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,MAAqB,GAAG,MAAM,CAItE"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Agregador de infraestrutura em processo (CONTRATO.md §27.4, plano-infraestrutura.md §9).
3
+ *
4
+ * Regras:
5
+ * - contadores NUNCA são amostrados (independem de `tracesSampleRate`/`beforeSend`);
6
+ * - um agregado por `kind + (resourceArn | resourceName) + region`, com janela `windowStart..windowEnd`;
7
+ * - o tracker drena o agregador no mesmo lote do `POST /v1/ingest` (campo `infra`).
8
+ */
9
+ const DEFAULT_MAX_RESOURCES = 1000;
10
+ export function infraKey(ref) {
11
+ return `${ref.kind}|${ref.resourceArn || ref.resourceName || ''}|${ref.region ?? ''}`;
12
+ }
13
+ export class InfraAggregator {
14
+ entries = new Map();
15
+ maxResources;
16
+ onRecord;
17
+ /** Recursos descartados pelo limite desde o último `drain()`. */
18
+ dropped = 0;
19
+ /** Conta AWS aprendida de ARNs/URLs vistos (usada para montar ARNs a partir de nomes). */
20
+ accountId = process.env.AWS_ACCOUNT_ID?.trim() || undefined;
21
+ constructor(options = {}) {
22
+ this.maxResources = Math.max(1, options.maxResources ?? DEFAULT_MAX_RESOURCES);
23
+ this.onRecord = options.onRecord;
24
+ }
25
+ entry(ref) {
26
+ if (!ref.resourceArn && !ref.resourceName)
27
+ return null;
28
+ const key = infraKey(ref);
29
+ let entry = this.entries.get(key);
30
+ if (!entry) {
31
+ if (this.entries.size >= this.maxResources) {
32
+ this.dropped += 1;
33
+ return null;
34
+ }
35
+ const wasEmpty = this.entries.size === 0;
36
+ entry = { ref: { ...ref }, windowStart: Date.now(), metrics: {} };
37
+ this.entries.set(key, entry);
38
+ if (wasEmpty)
39
+ this.onRecord?.();
40
+ }
41
+ return entry;
42
+ }
43
+ /** Contador: soma `value` (default 1). */
44
+ add(ref, metric, value = 1) {
45
+ if (!Number.isFinite(value))
46
+ return;
47
+ const entry = this.entry(ref);
48
+ if (!entry)
49
+ return;
50
+ const current = entry.metrics[metric];
51
+ entry.metrics[metric] = (typeof current === 'number' ? current : 0) + value;
52
+ }
53
+ /** Gauge de pico: guarda o maior valor da janela. */
54
+ max(ref, metric, value) {
55
+ if (!Number.isFinite(value))
56
+ return;
57
+ const entry = this.entry(ref);
58
+ if (!entry)
59
+ return;
60
+ const current = entry.metrics[metric];
61
+ entry.metrics[metric] = typeof current === 'number' ? Math.max(current, value) : value;
62
+ }
63
+ /** Gauge/identificador: guarda o último valor da janela. */
64
+ last(ref, metric, value) {
65
+ if (typeof value === 'number' && !Number.isFinite(value))
66
+ return;
67
+ const entry = this.entry(ref);
68
+ if (!entry)
69
+ return;
70
+ entry.metrics[metric] = value;
71
+ }
72
+ /** Garante que o recurso aparece na janela (heartbeat) mesmo sem métricas. */
73
+ touch(ref) {
74
+ this.entry(ref);
75
+ }
76
+ /** Aprende a conta AWS a partir de um ARN (`arn:aws:<svc>:<region>:<account>:...`). */
77
+ learnAccount(arn) {
78
+ if (this.accountId || !arn)
79
+ return;
80
+ const account = arn.split(':')[4];
81
+ if (account && /^\d{12}$/.test(account))
82
+ this.accountId = account;
83
+ }
84
+ hasData() {
85
+ return this.entries.size > 0;
86
+ }
87
+ get size() {
88
+ return this.entries.size;
89
+ }
90
+ /** Fecha a janela: devolve todos os agregados com `windowEnd = agora` e zera o estado. */
91
+ drain(now = Date.now()) {
92
+ const out = [];
93
+ const windowEnd = new Date(now).toISOString();
94
+ for (const entry of this.entries.values()) {
95
+ const aggregate = {
96
+ kind: entry.ref.kind,
97
+ windowStart: new Date(Math.min(entry.windowStart, now)).toISOString(),
98
+ windowEnd,
99
+ metrics: entry.metrics,
100
+ };
101
+ if (entry.ref.resourceArn)
102
+ aggregate.resourceArn = entry.ref.resourceArn;
103
+ if (entry.ref.resourceName)
104
+ aggregate.resourceName = entry.ref.resourceName;
105
+ if (entry.ref.region)
106
+ aggregate.region = entry.ref.region;
107
+ out.push(aggregate);
108
+ }
109
+ this.entries = new Map();
110
+ this.dropped = 0;
111
+ return out;
112
+ }
113
+ }
114
+ /** `process.arch` → valor do contrato (`x86_64` | `arm64`). */
115
+ export function detectArchitecture(arch = process.arch) {
116
+ if (arch === 'arm64')
117
+ return 'arm64';
118
+ if (arch === 'x64')
119
+ return 'x86_64';
120
+ return arch;
121
+ }
122
+ //# sourceMappingURL=aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../src/infra/aggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { TrackerCore } from '../tracker.js';
2
+ import type { InfraResourceRef } from './aggregator.js';
3
+ /**
4
+ * Instrumentação do AWS SDK v3 por middleware (CONTRATO.md §27.8).
5
+ * Tipos estruturais: o SDK não depende de `@aws-sdk/*`.
6
+ */
7
+ /** Subconjunto de um client do AWS SDK v3 (`new SQSClient(...)`, `new DynamoDBClient(...)`…). */
8
+ export interface AwsClientLike {
9
+ middlewareStack: {
10
+ add(middleware: (next: AwsNextHandler, context: AwsHandlerContext) => AwsNextHandler, options: Record<string, unknown>): void;
11
+ };
12
+ config?: {
13
+ serviceId?: string;
14
+ region?: unknown;
15
+ } & Record<string, unknown>;
16
+ }
17
+ export type AwsNextHandler = (args: {
18
+ input: Record<string, unknown>;
19
+ } & Record<string, unknown>) => Promise<{
20
+ output: unknown;
21
+ } & Record<string, unknown>>;
22
+ export interface AwsHandlerContext {
23
+ commandName?: string;
24
+ clientName?: string;
25
+ [key: string]: unknown;
26
+ }
27
+ /** Região e conta de um ARN (`arn:aws:<svc>:<region>:<account>:<resource>`). */
28
+ export declare function parseArn(arn: string): {
29
+ region: string;
30
+ account: string;
31
+ resource: string;
32
+ } | null;
33
+ /**
34
+ * URL de fila SQS → ARN. Aceita `https://sqs.<region>.amazonaws.com/<account>/<name>`,
35
+ * o formato legado `https://<region>.queue.amazonaws.com/<account>/<name>` e endpoints locais.
36
+ * Também aceita um ARN pronto.
37
+ */
38
+ export declare function sqsQueueRef(queue: string, fallbackRegion?: string): InfraResourceRef;
39
+ /**
40
+ * Adiciona o middleware `fgTrackerInfra` (step `initialize`) ao client.
41
+ * - Agregados de infra (§27.4) para SQS, SNS, EventBridge, Kinesis, DynamoDB e Step Functions — nunca amostrados.
42
+ * - Span `http.client` por chamada (qualquer serviço) quando há um trace em andamento; respeita amostragem.
43
+ * - DynamoDB: injeta `ReturnConsumedCapacity: 'TOTAL'` quando não informado.
44
+ */
45
+ export declare function instrumentAwsClient<T extends AwsClientLike>(core: TrackerCore, client: T): T;
46
+ /**
47
+ * Mede o processamento de uma mensagem consumida (`processingMsSum`, `processingMsMax`, `errors`)
48
+ * e cria um span `custom` para os spans internos (AWS, db, fetch) formarem um trace.
49
+ */
50
+ export declare function trackQueueMessage<T>(core: TrackerCore, queue: string, fn: () => T | Promise<T>): Promise<T>;
51
+ //# sourceMappingURL=aws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws.d.ts","sourceRoot":"","sources":["../../src/infra/aws.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAA8B,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEpF;;;GAGG;AAEH,iGAAiG;AACjG,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE;QACf,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,KAAK,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;KAC/H,CAAC;IACF,MAAM,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7E;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5J,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAuDD,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIlG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAgBpF;AAuPD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CA0E5F;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA0BjH"}