@generazioneai/telemetry 0.1.0 → 0.2.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 +6 -0
- package/README.md +2 -2
- package/dist/config.d.ts +4 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -4
- package/dist/config.js.map +1 -1
- package/dist/final-mode.d.ts +23 -0
- package/dist/final-mode.d.ts.map +1 -0
- package/dist/final-mode.js +56 -0
- package/dist/final-mode.js.map +1 -0
- package/dist/register.js +1 -1
- package/dist/sdk.d.ts +1 -1
- package/dist/sdk.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog — @generazioneai/telemetry
|
|
2
2
|
|
|
3
|
+
## 0.2.0 — 2026-11-10
|
|
4
|
+
|
|
5
|
+
«Via gli interruttori» (decisione del 2026-11-10): niente `TELEMETRY_MODE`, la telemetria è accesa se c'è un endpoint
|
|
6
|
+
(`OTEL_EXPORTER_OTLP_ENDPOINT`, di serie il collector del cluster; vuota = spenta). In sviluppo locale l'endpoint di serie è vuoto e
|
|
7
|
+
`TELEMETRY_MODE=off` conta ancora; altrove si ignora con un avviso. **Non pubblicata.**
|
|
8
|
+
|
|
3
9
|
## 0.1.0 — 2026-10-25
|
|
4
10
|
Prima versione (treno 3+4, O1; ADR-013, spec «Fondamenta enterprise» §5.2, decisioni 31, 32, 35).
|
|
5
11
|
- `@generazioneai/telemetry/register`: SDK OpenTelemetry Node (tracce e metriche OTLP/HTTP; HTTP, pg, ioredis, Prisma), spento di serie (`TELEMETRY_MODE=off`).
|
package/README.md
CHANGED
|
@@ -20,8 +20,8 @@ TelemetryModule.forRoot({ service: 'hr' })
|
|
|
20
20
|
|
|
21
21
|
| Variabile | Valori | Di serie |
|
|
22
22
|
|---|---|---|
|
|
23
|
-
| `
|
|
24
|
-
| `
|
|
23
|
+
| `OTEL_EXPORTER_OTLP_ENDPOINT` | base OTLP/HTTP | `http://otel-collector.observability:4318` (in sviluppo locale: vuota); **vuota = spento** (il processo non carica l'SDK, nessuna connessione) |
|
|
24
|
+
| `TELEMETRY_MODE` | `on` | 0.2 (decisione del 2026-11-10): accesa se c'è l'endpoint. `off` conta solo in sviluppo locale e nei test (`SKILLERA_ENV` `dev`/`local` o `NODE_ENV` `development`/`test`, fuori da un cluster); altrove si ignora con un avviso |
|
|
25
25
|
| `OTEL_SERVICE_NAME` | nome | `name` del `package.json` (senza scope) |
|
|
26
26
|
| `SKILLERA_ENV` | | → `deployment.environment` |
|
|
27
27
|
| `LOG_FORMAT` | `text` \| `json` | `text` |
|
package/dist/config.d.ts
CHANGED
|
@@ -9,8 +9,10 @@ export interface TelemetryConfig {
|
|
|
9
9
|
metricIntervalMs: number;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
* - `OTEL_EXPORTER_OTLP_ENDPOINT`: base OTLP/HTTP
|
|
12
|
+
* 0.2 (via gli interruttori, 2026-11-10): accesa se c'è dove mandare (un endpoint), senza interruttore.
|
|
13
|
+
* - `OTEL_EXPORTER_OTLP_ENDPOINT`: base OTLP/HTTP; **vuota = spento** (il processo non carica nulla, non apre connessioni).
|
|
14
|
+
* Di serie quella del collector nel cluster; in sviluppo locale (`isLocalDevEnv`) di serie vuota, cioè spenta;
|
|
15
|
+
* - `TELEMETRY_MODE=off` spegne solo in sviluppo locale e nei test; altrove si ignora con un avviso;
|
|
14
16
|
* - `OTEL_SERVICE_NAME`, altrimenti il `name` del `package.json` del processo;
|
|
15
17
|
* - `SKILLERA_ENV` → `deployment.environment`;
|
|
16
18
|
* - `TELEMETRY_SAMPLE_RATIO` (0..1, di serie 1: il campionamento in coda lo fa il collector);
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,qBAAqB,6CAA6C,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAWD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,eAAe,CAehF"}
|
package/dist/config.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.DEFAULT_OTLP_ENDPOINT = void 0;
|
|
|
4
4
|
exports.readConfig = readConfig;
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
6
|
const path_1 = require("path");
|
|
7
|
+
const final_mode_1 = require("./final-mode");
|
|
7
8
|
exports.DEFAULT_OTLP_ENDPOINT = 'http://otel-collector.observability:4318';
|
|
8
9
|
function packageName() {
|
|
9
10
|
try {
|
|
@@ -15,8 +16,10 @@ function packageName() {
|
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
-
* - `OTEL_EXPORTER_OTLP_ENDPOINT`: base OTLP/HTTP
|
|
19
|
+
* 0.2 (via gli interruttori, 2026-11-10): accesa se c'è dove mandare (un endpoint), senza interruttore.
|
|
20
|
+
* - `OTEL_EXPORTER_OTLP_ENDPOINT`: base OTLP/HTTP; **vuota = spento** (il processo non carica nulla, non apre connessioni).
|
|
21
|
+
* Di serie quella del collector nel cluster; in sviluppo locale (`isLocalDevEnv`) di serie vuota, cioè spenta;
|
|
22
|
+
* - `TELEMETRY_MODE=off` spegne solo in sviluppo locale e nei test; altrove si ignora con un avviso;
|
|
20
23
|
* - `OTEL_SERVICE_NAME`, altrimenti il `name` del `package.json` del processo;
|
|
21
24
|
* - `SKILLERA_ENV` → `deployment.environment`;
|
|
22
25
|
* - `TELEMETRY_SAMPLE_RATIO` (0..1, di serie 1: il campionamento in coda lo fa il collector);
|
|
@@ -24,10 +27,12 @@ function packageName() {
|
|
|
24
27
|
*/
|
|
25
28
|
function readConfig(env = process.env) {
|
|
26
29
|
const rawEndpoint = env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
27
|
-
const
|
|
30
|
+
const fallback = (0, final_mode_1.isLocalDevEnv)(env) ? '' : exports.DEFAULT_OTLP_ENDPOINT;
|
|
31
|
+
const endpoint = (rawEndpoint === undefined ? fallback : rawEndpoint).trim().replace(/\/+$/, '');
|
|
28
32
|
const ratio = Number(env.TELEMETRY_SAMPLE_RATIO ?? '1');
|
|
33
|
+
const mode = (0, final_mode_1.finalMode)({ name: 'TELEMETRY_MODE', final: 'on', allowed: ['on', 'off'], requested: env.TELEMETRY_MODE, env });
|
|
29
34
|
return {
|
|
30
|
-
enabled:
|
|
35
|
+
enabled: mode === 'on' && endpoint !== '',
|
|
31
36
|
endpoint,
|
|
32
37
|
serviceName: env.OTEL_SERVICE_NAME?.trim() || packageName() || 'unknown-service',
|
|
33
38
|
environment: env.SKILLERA_ENV,
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAmCA,gCAeC;AAlDD,2BAAkC;AAClC,+BAA4B;AAC5B,6CAAwD;AAE3C,QAAA,qBAAqB,GAAG,0CAA0C,CAAC;AAYhF,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAA0B,CAAC;QAC9G,OAAO,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,WAAW,GAAG,GAAG,CAAC,2BAA2B,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAA,0BAAa,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,6BAAqB,CAAC;IACjE,MAAM,QAAQ,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjG,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,IAAI,GAAG,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,IAAA,sBAAS,EAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,CAAU,EAAE,SAAS,EAAE,GAAG,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IACrI,OAAO;QACL,OAAO,EAAE,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,EAAE;QACzC,QAAQ;QACR,WAAW,EAAE,GAAG,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,IAAI,iBAAiB;QAChF,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,cAAc,EAAE,GAAG,CAAC,mBAAmB;QACvC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,MAAM;KACjH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** `true` solo in sviluppo locale o nei test: l'unico caso in cui le vecchie modalità contano ancora. */
|
|
2
|
+
export declare function isLocalDevEnv(env?: NodeJS.ProcessEnv): boolean;
|
|
3
|
+
export interface FinalModeOptions<T extends string> {
|
|
4
|
+
/** Nome della variabile (per l'avviso). */
|
|
5
|
+
name: string;
|
|
6
|
+
/** Il valore finale, quello che vale fuori dallo sviluppo locale. */
|
|
7
|
+
final: T;
|
|
8
|
+
/** I valori che lo sviluppo locale può ancora chiedere (il finale compreso). */
|
|
9
|
+
allowed: readonly T[];
|
|
10
|
+
/** Il valore chiesto (opzione o env); vuoto/assente = il finale. */
|
|
11
|
+
requested?: string | null;
|
|
12
|
+
env?: NodeJS.ProcessEnv;
|
|
13
|
+
/** Default `console.warn`. */
|
|
14
|
+
warn?: (message: string) => void;
|
|
15
|
+
}
|
|
16
|
+
/** Per i test: dimentica gli avvisi già dati. */
|
|
17
|
+
export declare function resetFinalModeWarnings(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Il valore effettivo di una vecchia modalità: il finale, tranne in sviluppo locale dove si rispetta il valore chiesto (se è
|
|
20
|
+
* uno degli ammessi). Un valore sconosciuto o fuori posto non fa mai fallire l'avvio: vale il finale, con un avviso.
|
|
21
|
+
*/
|
|
22
|
+
export declare function finalMode<T extends string>(o: FinalModeOptions<T>): T;
|
|
23
|
+
//# sourceMappingURL=final-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"final-mode.d.ts","sourceRoot":"","sources":["../src/final-mode.ts"],"names":[],"mappings":"AAYA,yGAAyG;AACzG,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAM3E;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM;IAChD,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,KAAK,EAAE,CAAC,CAAC;IACT,gFAAgF;IAChF,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;IACtB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAID,iDAAiD;AACjD,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAQD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAmBrE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Valori finali fissi delle vecchie modalità di rilascio (decisione del CTO del 2026-11-10, «via gli interruttori»).
|
|
3
|
+
//
|
|
4
|
+
// Le variabili che sceglievano off/log/shadow/enforce (AUTHZ_ENFORCE_MODE, AUTHZ_INTERNAL_AUTH_MODE, AUTHZ_KEY_POLICY, …) non
|
|
5
|
+
// scelgono più nulla: vale sempre il comportamento finale. Resta UNA via di fuga, solo per lo sviluppo locale e i test
|
|
6
|
+
// (D-E del censimento): lì il valore dell'env (o dell'opzione) si rispetta ancora. In ogni altro ambiente un valore diverso
|
|
7
|
+
// dal finale si ignora con un avviso, una volta per variabile e valore: mai un crash all'avvio.
|
|
8
|
+
//
|
|
9
|
+
// Sviluppo locale = nessun `KUBERNETES_SERVICE_HOST` (mai dentro un cluster) E (`SKILLERA_ENV` è `dev`/`local`, oppure
|
|
10
|
+
// `SKILLERA_ENV` manca e `NODE_ENV` è `development`/`test`). Uno `SKILLERA_ENV` diverso (stg, prod, …) chiude sempre la via.
|
|
11
|
+
//
|
|
12
|
+
// Copia identica in authz, gateway-kit, events, telemetry e crypto (pacchetti pubblicati a parte, senza dipendenze fra loro).
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.isLocalDevEnv = isLocalDevEnv;
|
|
15
|
+
exports.resetFinalModeWarnings = resetFinalModeWarnings;
|
|
16
|
+
exports.finalMode = finalMode;
|
|
17
|
+
/** `true` solo in sviluppo locale o nei test: l'unico caso in cui le vecchie modalità contano ancora. */
|
|
18
|
+
function isLocalDevEnv(env = process.env) {
|
|
19
|
+
if ((env.KUBERNETES_SERVICE_HOST ?? '').trim())
|
|
20
|
+
return false;
|
|
21
|
+
const skilleraEnv = (env.SKILLERA_ENV ?? '').trim().toLowerCase();
|
|
22
|
+
if (skilleraEnv)
|
|
23
|
+
return skilleraEnv === 'dev' || skilleraEnv === 'local';
|
|
24
|
+
const nodeEnv = (env.NODE_ENV ?? '').trim().toLowerCase();
|
|
25
|
+
return nodeEnv === 'development' || nodeEnv === 'test';
|
|
26
|
+
}
|
|
27
|
+
const warned = new Set();
|
|
28
|
+
/** Per i test: dimentica gli avvisi già dati. */
|
|
29
|
+
function resetFinalModeWarnings() {
|
|
30
|
+
warned.clear();
|
|
31
|
+
}
|
|
32
|
+
function warnOnce(key, message, warn) {
|
|
33
|
+
if (warned.has(key))
|
|
34
|
+
return;
|
|
35
|
+
warned.add(key);
|
|
36
|
+
(warn ?? ((m) => console.warn(m)))(message);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Il valore effettivo di una vecchia modalità: il finale, tranne in sviluppo locale dove si rispetta il valore chiesto (se è
|
|
40
|
+
* uno degli ammessi). Un valore sconosciuto o fuori posto non fa mai fallire l'avvio: vale il finale, con un avviso.
|
|
41
|
+
*/
|
|
42
|
+
function finalMode(o) {
|
|
43
|
+
const raw = (o.requested ?? '').toString().trim().toLowerCase();
|
|
44
|
+
if (!raw || raw === o.final)
|
|
45
|
+
return o.final;
|
|
46
|
+
const env = o.env ?? process.env;
|
|
47
|
+
if (!o.allowed.includes(raw)) {
|
|
48
|
+
warnOnce(`${o.name}|${raw}`, `[via-interruttori] ${o.name}=«${raw}» sconosciuto: vale «${o.final}» (ammessi solo in sviluppo locale: ${o.allowed.join(', ')})`, o.warn);
|
|
49
|
+
return o.final;
|
|
50
|
+
}
|
|
51
|
+
if (isLocalDevEnv(env))
|
|
52
|
+
return raw;
|
|
53
|
+
warnOnce(`${o.name}|${raw}`, `[via-interruttori] ${o.name}=«${raw}» ignorato: fuori dallo sviluppo locale vale sempre «${o.final}» (decisione 2026-11-10, via gli interruttori)`, o.warn);
|
|
54
|
+
return o.final;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=final-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"final-mode.js","sourceRoot":"","sources":["../src/final-mode.ts"],"names":[],"mappings":";AAAA,qHAAqH;AACrH,EAAE;AACF,8HAA8H;AAC9H,uHAAuH;AACvH,4HAA4H;AAC5H,gGAAgG;AAChG,EAAE;AACF,uHAAuH;AACvH,6HAA6H;AAC7H,EAAE;AACF,8HAA8H;;AAG9H,sCAMC;AAmBD,wDAEC;AAYD,8BAmBC;AA3DD,yGAAyG;AACzG,SAAgB,aAAa,CAAC,MAAyB,OAAO,CAAC,GAAG;IAChE,IAAI,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAC7D,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAClE,IAAI,WAAW;QAAE,OAAO,WAAW,KAAK,KAAK,IAAI,WAAW,KAAK,OAAO,CAAC;IACzE,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,OAAO,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,MAAM,CAAC;AACzD,CAAC;AAgBD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;AAEjC,iDAAiD;AACjD,SAAgB,sBAAsB;IACpC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,OAAe,EAAE,IAA0B;IACxE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAmB,CAAsB;IAChE,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChE,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC;IAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACjC,IAAI,CAAE,CAAC,CAAC,OAA6B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,QAAQ,CACN,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,EAClB,sBAAsB,CAAC,CAAC,IAAI,KAAK,GAAG,wBAAwB,CAAC,CAAC,KAAK,uCAAuC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EACjI,CAAC,CAAC,IAAI,CACP,CAAC;QACF,OAAO,CAAC,CAAC,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,GAAQ,CAAC;IACxC,QAAQ,CACN,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,EAClB,sBAAsB,CAAC,CAAC,IAAI,KAAK,GAAG,wDAAwD,CAAC,CAAC,KAAK,gDAAgD,EACnJ,CAAC,CAAC,IAAI,CACP,CAAC;IACF,OAAO,CAAC,CAAC,KAAK,CAAC;AACjB,CAAC"}
|
package/dist/register.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.telemetry = void 0;
|
|
4
4
|
/**
|
|
5
|
-
* `import '@generazioneai/telemetry/register';` come PRIMA riga di `main.ts`.
|
|
5
|
+
* `import '@generazioneai/telemetry/register';` come PRIMA riga di `main.ts`. Senza endpoint (`OTEL_EXPORTER_OTLP_ENDPOINT` vuota, o in sviluppo locale senza la variabile) non fa nulla.
|
|
6
6
|
* Non installa gestori di segnali: lo spegnimento ordinato lo fa `TelemetryModule` (o `beforeExit`).
|
|
7
7
|
*/
|
|
8
8
|
const sdk_1 = require("./sdk");
|
package/dist/sdk.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface TelemetryHandle {
|
|
|
8
8
|
shutdown(): Promise<void>;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Avvia l'SDK se la configurazione lo chiede (`TELEMETRY_MODE=
|
|
11
|
+
* Avvia l'SDK se la configurazione lo chiede (un endpoint; `TELEMETRY_MODE=off` conta solo in sviluppo locale). Idempotente. Va chiamato prima che
|
|
12
12
|
* l'applicazione carichi `http`, `pg`, `ioredis`: per questo `@generazioneai/telemetry/register` è il primo import di `main.ts`.
|
|
13
13
|
* Tutti gli span passano dal `SanitizingSpanExporter` (lista bianca degli attributi) prima di uscire.
|
|
14
14
|
*/
|
package/dist/sdk.js
CHANGED
|
@@ -26,7 +26,7 @@ function optional(load) {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
|
-
* Avvia l'SDK se la configurazione lo chiede (`TELEMETRY_MODE=
|
|
29
|
+
* Avvia l'SDK se la configurazione lo chiede (un endpoint; `TELEMETRY_MODE=off` conta solo in sviluppo locale). Idempotente. Va chiamato prima che
|
|
30
30
|
* l'applicazione carichi `http`, `pg`, `ioredis`: per questo `@generazioneai/telemetry/register` è il primo import di `main.ts`.
|
|
31
31
|
* Tutti gli span passano dal `SanitizingSpanExporter` (lista bianca degli attributi) prima di uscire.
|
|
32
32
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@generazioneai/telemetry",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Osservabilità comune dei servizi Node (ADR-013): OpenTelemetry con esportazione OTLP, JsonLogger con trace_id, span dei comandi NATS con traceparent negli header, attributi a lista bianca e redazione dei dati personali.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|