@hostwebhook/platform-contracts 0.13.0 → 0.14.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.
|
@@ -36,9 +36,16 @@
|
|
|
36
36
|
* ## Los campos son los que se usan
|
|
37
37
|
*
|
|
38
38
|
* El esquema `TelemetryLog` tiene ~20 campos. Se contaron los que aparecen de
|
|
39
|
-
* verdad en las 67 llamadas de `nodes/` y las 53 de `common/`:
|
|
40
|
-
* Fuera
|
|
41
|
-
* los dos de voz,
|
|
39
|
+
* verdad en las 67 llamadas de `nodes/` y las 53 de `common/`: eran quince.
|
|
40
|
+
* Fuera quedaron `timestamp` —lo ponía el gateway si faltaba—, `correlationId`
|
|
41
|
+
* y los dos de voz, porque **nadie de este lado los escribía**.
|
|
42
|
+
*
|
|
43
|
+
* ⚠️ Eso era una MEDIDA, no un principio, y caducó. Hoy el split sella su
|
|
44
|
+
* propia hora —su fila se escribe cuando termina todo su abanico, así que con
|
|
45
|
+
* la hora de escritura la corrida se lee al revés— y el merge, el split y los
|
|
46
|
+
* triggers necesitan decir a qué corrida pertenecen. Así que `timestamp` y
|
|
47
|
+
* `correlationId` entran, y suben la cuenta a diecisiete. Los dos de voz
|
|
48
|
+
* siguen fuera: eso no ha cambiado.
|
|
42
49
|
*
|
|
43
50
|
* ## Cómo viaja
|
|
44
51
|
*
|
|
@@ -56,9 +63,21 @@ export type NivelDeRegistro = 'info' | 'warn' | 'error' | 'debug';
|
|
|
56
63
|
/**
|
|
57
64
|
* Una fila del registro.
|
|
58
65
|
*
|
|
59
|
-
* ⚠️ Los
|
|
66
|
+
* ⚠️ Los diecisiete campos MEDIDOS, ni uno más. Si hace falta otro, se añade
|
|
60
67
|
* aquí: tsc rechaza una clave desconocida en un literal, así que no se puede
|
|
61
68
|
* colar por accidente.
|
|
69
|
+
*
|
|
70
|
+
* 🔥 Y esa promesa tenía una fuga. `correlationId` y `timestamp` ya viajaban
|
|
71
|
+
* SIN declarar, colados por un *spread* —`...(cond ? { timestamp } : {})`—,
|
|
72
|
+
* que TypeScript no somete al chequeo de propiedades excedentes. O sea que el
|
|
73
|
+
* tipo ni los prohibía ni los garantizaba, y quien leyera este contrato no
|
|
74
|
+
* podía saber que existían.
|
|
75
|
+
*
|
|
76
|
+
* El daño se midió en producción: `TelemetryService.runs()` agrupa una corrida
|
|
77
|
+
* por `correlationId`, y de las catorce filas de una corrida real SEIS no lo
|
|
78
|
+
* llevaban. No salían en su detalle ni se podían filtrar por ella. La causa no
|
|
79
|
+
* era el olvido de quien emite: era que **el tipo lo impedía**, así que al
|
|
80
|
+
* añadirlo en un literal el build se caía con TS2353.
|
|
62
81
|
*/
|
|
63
82
|
export interface EntradaDeTelemetria {
|
|
64
83
|
organizationId: string;
|
|
@@ -78,6 +97,27 @@ export interface EntradaDeTelemetria {
|
|
|
78
97
|
statusCode?: number;
|
|
79
98
|
success?: boolean;
|
|
80
99
|
metadata?: Record<string, unknown>;
|
|
100
|
+
/**
|
|
101
|
+
* La corrida a la que pertenece esta fila.
|
|
102
|
+
*
|
|
103
|
+
* Es lo que agrupa un flujo entero: `TelemetryService.runs()` DESCARTA las
|
|
104
|
+
* filas que no lo traen, así que una emisión sin él no cuenta como paso de
|
|
105
|
+
* su corrida por muy correcta que sea.
|
|
106
|
+
*
|
|
107
|
+
* ⚠️ Va aquí y no dentro de `metadata`. El campo de primer nivel es el que
|
|
108
|
+
* está indexado y el que mira la consulta; guardarlo en la metadata es
|
|
109
|
+
* tenerlo y no tenerlo — pasó, y por eso está dicho.
|
|
110
|
+
*/
|
|
111
|
+
correlationId?: string;
|
|
112
|
+
/**
|
|
113
|
+
* Cuándo ocurrió lo que esta fila cuenta.
|
|
114
|
+
*
|
|
115
|
+
* Sin él, quien escribe pone la hora de la ESCRITURA. Casi siempre da igual
|
|
116
|
+
* —se escribe al instante— pero no cuando un nodo reparte trabajo y su fila
|
|
117
|
+
* se escribe al terminar todo lo que colgaba de él: entonces aparece la
|
|
118
|
+
* última, después de sus propios hijos, y la corrida se lee al revés.
|
|
119
|
+
*/
|
|
120
|
+
timestamp?: Date;
|
|
81
121
|
}
|
|
82
122
|
/** Apuntar en el registro, y preguntarle a la recuperación de caídas. */
|
|
83
123
|
export interface Telemetria {
|
|
@@ -37,9 +37,16 @@
|
|
|
37
37
|
* ## Los campos son los que se usan
|
|
38
38
|
*
|
|
39
39
|
* El esquema `TelemetryLog` tiene ~20 campos. Se contaron los que aparecen de
|
|
40
|
-
* verdad en las 67 llamadas de `nodes/` y las 53 de `common/`:
|
|
41
|
-
* Fuera
|
|
42
|
-
* los dos de voz,
|
|
40
|
+
* verdad en las 67 llamadas de `nodes/` y las 53 de `common/`: eran quince.
|
|
41
|
+
* Fuera quedaron `timestamp` —lo ponía el gateway si faltaba—, `correlationId`
|
|
42
|
+
* y los dos de voz, porque **nadie de este lado los escribía**.
|
|
43
|
+
*
|
|
44
|
+
* ⚠️ Eso era una MEDIDA, no un principio, y caducó. Hoy el split sella su
|
|
45
|
+
* propia hora —su fila se escribe cuando termina todo su abanico, así que con
|
|
46
|
+
* la hora de escritura la corrida se lee al revés— y el merge, el split y los
|
|
47
|
+
* triggers necesitan decir a qué corrida pertenecen. Así que `timestamp` y
|
|
48
|
+
* `correlationId` entran, y suben la cuenta a diecisiete. Los dos de voz
|
|
49
|
+
* siguen fuera: eso no ha cambiado.
|
|
43
50
|
*
|
|
44
51
|
* ## Cómo viaja
|
|
45
52
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hostwebhook/platform-contracts",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "Contratos compartidos entre los servicios de HostWebhook: addons del plan, identidad interna, y las formas que cruzan una frontera de red",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|