@goliapkg/sentori-react-native 2.0.0 → 2.1.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/lib/handlers/network.d.ts.map +1 -1
- package/lib/handlers/network.js +7 -0
- package/lib/handlers/network.js.map +1 -1
- package/lib/init.d.ts +10 -0
- package/lib/init.d.ts.map +1 -1
- package/lib/init.js +34 -0
- package/lib/init.js.map +1 -1
- package/lib/navigation.d.ts.map +1 -1
- package/lib/navigation.js +14 -1
- package/lib/navigation.js.map +1 -1
- package/lib/runtime-metrics-fps.d.ts +19 -0
- package/lib/runtime-metrics-fps.d.ts.map +1 -0
- package/lib/runtime-metrics-fps.js +128 -0
- package/lib/runtime-metrics-fps.js.map +1 -0
- package/lib/runtime-metrics-heap.d.ts +13 -0
- package/lib/runtime-metrics-heap.d.ts.map +1 -0
- package/lib/runtime-metrics-heap.js +67 -0
- package/lib/runtime-metrics-heap.js.map +1 -0
- package/lib/runtime-metrics-network.d.ts +23 -0
- package/lib/runtime-metrics-network.d.ts.map +1 -0
- package/lib/runtime-metrics-network.js +99 -0
- package/lib/runtime-metrics-network.js.map +1 -0
- package/lib/runtime-metrics.d.ts +43 -0
- package/lib/runtime-metrics.d.ts.map +1 -0
- package/lib/runtime-metrics.js +115 -0
- package/lib/runtime-metrics.js.map +1 -0
- package/lib/transport.d.ts +18 -0
- package/lib/transport.d.ts.map +1 -1
- package/lib/transport.js +31 -0
- package/lib/transport.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/runtime-metrics-instruments.test.ts +109 -0
- package/src/__tests__/runtime-metrics-network.test.ts +78 -0
- package/src/handlers/network.ts +11 -0
- package/src/init.ts +48 -0
- package/src/navigation.ts +14 -1
- package/src/runtime-metrics-fps.ts +137 -0
- package/src/runtime-metrics-heap.ts +78 -0
- package/src/runtime-metrics-network.ts +103 -0
- package/src/runtime-metrics.ts +122 -0
- package/src/transport.ts +39 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// v2.1 W2 part 4 — network bytes auto-instrument.
|
|
2
|
+
//
|
|
3
|
+
// Two counters (sent / received bytes) incremented by the existing
|
|
4
|
+
// fetch patch on every request/response, drained every 30 s as
|
|
5
|
+
// runtime.network.bytes_sent + runtime.network.bytes_received.
|
|
6
|
+
//
|
|
7
|
+
// Best-effort: not every Response exposes `content-length`
|
|
8
|
+
// (chunked encoding, server stripped it, gzipped without a
|
|
9
|
+
// pre-decode header). For those we report 0 — undercounts vs.
|
|
10
|
+
// over-attributing arbitrary numbers. Request body size is
|
|
11
|
+
// estimated only when init.body is a string or has `.byteLength`;
|
|
12
|
+
// FormData / Blob / ReadableStream are not measured.
|
|
13
|
+
//
|
|
14
|
+
// XHR is NOT instrumented here — the existing patchXhr() in
|
|
15
|
+
// handlers/network.ts does the trace span work, and XHR usage in
|
|
16
|
+
// 2026-era RN apps is rare enough that the engineering cost of
|
|
17
|
+
// a second patch isn't justified by the missing data. If a host
|
|
18
|
+
// app shows up with significant XHR traffic we add it in a patch
|
|
19
|
+
// release.
|
|
20
|
+
import { emitMetric } from '@goliapkg/sentori-core';
|
|
21
|
+
const TICK_MS = 30_000;
|
|
22
|
+
let _bytesSent = 0;
|
|
23
|
+
let _bytesReceived = 0;
|
|
24
|
+
let _timer = null;
|
|
25
|
+
/** Called from handlers/network.ts on every outbound request.
|
|
26
|
+
* Cheap — two adds, no allocation. */
|
|
27
|
+
export function recordNetworkBytes(sent, received) {
|
|
28
|
+
if (sent > 0)
|
|
29
|
+
_bytesSent += sent;
|
|
30
|
+
if (received > 0)
|
|
31
|
+
_bytesReceived += received;
|
|
32
|
+
}
|
|
33
|
+
function estimateBodyBytes(body) {
|
|
34
|
+
if (body == null)
|
|
35
|
+
return 0;
|
|
36
|
+
if (typeof body === 'string')
|
|
37
|
+
return body.length;
|
|
38
|
+
// ArrayBuffer / Uint8Array / ArrayBufferView all carry byteLength.
|
|
39
|
+
const maybe = body;
|
|
40
|
+
if (typeof maybe.byteLength === 'number')
|
|
41
|
+
return maybe.byteLength;
|
|
42
|
+
// FormData / Blob / ReadableStream — not measured.
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
/** Estimate request bytes from a fetch init. Used by the fetch
|
|
46
|
+
* patch in handlers/network.ts. */
|
|
47
|
+
export function estimateRequestBytes(init) {
|
|
48
|
+
return estimateBodyBytes(init?.body);
|
|
49
|
+
}
|
|
50
|
+
/** Read response bytes from the Content-Length header. Returns
|
|
51
|
+
* 0 if missing or unparseable — undercount-safe. */
|
|
52
|
+
export function estimateResponseBytes(headers) {
|
|
53
|
+
if (!headers)
|
|
54
|
+
return 0;
|
|
55
|
+
const v = headers.get?.('content-length');
|
|
56
|
+
if (!v)
|
|
57
|
+
return 0;
|
|
58
|
+
const n = parseInt(v, 10);
|
|
59
|
+
return Number.isFinite(n) && n > 0 ? n : 0;
|
|
60
|
+
}
|
|
61
|
+
function emit() {
|
|
62
|
+
if (_bytesSent > 0) {
|
|
63
|
+
emitMetric('runtime.network.bytes_sent', _bytesSent);
|
|
64
|
+
_bytesSent = 0;
|
|
65
|
+
}
|
|
66
|
+
if (_bytesReceived > 0) {
|
|
67
|
+
emitMetric('runtime.network.bytes_received', _bytesReceived);
|
|
68
|
+
_bytesReceived = 0;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Idempotent start — second call is a no-op. */
|
|
72
|
+
export function startNetworkBytesInstrument() {
|
|
73
|
+
if (_timer !== null)
|
|
74
|
+
return;
|
|
75
|
+
_timer = setInterval(emit, TICK_MS);
|
|
76
|
+
_timer.unref?.();
|
|
77
|
+
}
|
|
78
|
+
/** Stop the periodic emit. Idempotent. */
|
|
79
|
+
export function stopNetworkBytesInstrument() {
|
|
80
|
+
if (_timer !== null) {
|
|
81
|
+
clearInterval(_timer);
|
|
82
|
+
_timer = null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** Test-only: force one emit tick + reset counters. */
|
|
86
|
+
export function __forceNetworkEmitForTests() {
|
|
87
|
+
emit();
|
|
88
|
+
}
|
|
89
|
+
/** Test-only: peek raw counter state without resetting. */
|
|
90
|
+
export function __peekNetworkCountersForTests() {
|
|
91
|
+
return { sent: _bytesSent, received: _bytesReceived };
|
|
92
|
+
}
|
|
93
|
+
/** Test-only: reset for clean test runs. */
|
|
94
|
+
export function __resetNetworkBytesForTests() {
|
|
95
|
+
stopNetworkBytesInstrument();
|
|
96
|
+
_bytesSent = 0;
|
|
97
|
+
_bytesReceived = 0;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=runtime-metrics-network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-metrics-network.js","sourceRoot":"","sources":["../src/runtime-metrics-network.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drain core's runtime-metrics ring and POST to
|
|
3
|
+
* /v1/runtime-metrics:batch. Rebuffers on failure so the next
|
|
4
|
+
* tick retries; sustained outages spill into the ring's drop
|
|
5
|
+
* counter which reports to the SDK self-report channel.
|
|
6
|
+
*
|
|
7
|
+
* Returns when the round-trip settles (success or failure). Per
|
|
8
|
+
* the NEVER rule, never throws — failure is logged + rebuffered,
|
|
9
|
+
* the resolved promise's value is undefined.
|
|
10
|
+
*/
|
|
11
|
+
export declare function flushRuntimeMetrics(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Start the 30 s flush timer. Called once from `init()`. Idempotent
|
|
14
|
+
* — repeated calls are a no-op so users that call
|
|
15
|
+
* `Sentori.init({ metrics: true })` more than once (HMR, fast
|
|
16
|
+
* refresh) don't get multiple timers.
|
|
17
|
+
*/
|
|
18
|
+
export declare function startRuntimeMetricsTimer(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Capture the wall-clock at `init()` so cold-start instrumentation
|
|
21
|
+
* has a t0. Called from init() before any other auto-instrument
|
|
22
|
+
* fires. Returns the captured t0 in millis (callers that want to
|
|
23
|
+
* stash + use it later can hold the value).
|
|
24
|
+
*/
|
|
25
|
+
export declare function markColdStartT0(): number;
|
|
26
|
+
/**
|
|
27
|
+
* Emit one `runtime.cold_start_ms` metric point. Idempotent per
|
|
28
|
+
* session — the second + later calls are a no-op so route-nav
|
|
29
|
+
* instrument (W2 part 3) can call this safely without worrying
|
|
30
|
+
* about double-counting.
|
|
31
|
+
*
|
|
32
|
+
* Hosts that want a more interactive-pixel-perfect cold-start
|
|
33
|
+
* boundary (TTI vs. raw init→render) can call
|
|
34
|
+
* `markTimeToFullDisplay()` and we emit that separately as
|
|
35
|
+
* `runtime.time_to_full_display_ms` (existing v1 instrument).
|
|
36
|
+
*/
|
|
37
|
+
export declare function emitColdStart(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Test-only escape hatch: stop the timer + reset cold-start state
|
|
40
|
+
* so vitest / bun:test teardown doesn't leak intervals across runs.
|
|
41
|
+
*/
|
|
42
|
+
export declare function __resetRuntimeMetricsRnForTests(): void;
|
|
43
|
+
//# sourceMappingURL=runtime-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-metrics.d.ts","sourceRoot":"","sources":["../src/runtime-metrics.ts"],"names":[],"mappings":"AAiCA;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAWzD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAS/C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAWpC;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAOtD"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// v2.1 W2 part 2 — RN runtime metrics flusher + cold-start
|
|
2
|
+
// instrument.
|
|
3
|
+
//
|
|
4
|
+
// The buffer + emit primitives live in @goliapkg/sentori-core
|
|
5
|
+
// (runtime-metrics.ts). This module owns:
|
|
6
|
+
// • the periodic flush timer (30 s, coalesced w/ event flush)
|
|
7
|
+
// • the rebuffer-on-failure recovery path
|
|
8
|
+
// • the cold-start auto-instrument (one-shot at init)
|
|
9
|
+
//
|
|
10
|
+
// Other auto-instrument modules (FPS / heap / route-nav / network
|
|
11
|
+
// bytes) ship in the W2 part 3+ chunks; each is its own file with
|
|
12
|
+
// its own per-tick perf budget test gated as stop-ship in CI.
|
|
13
|
+
//
|
|
14
|
+
// NEVER rule: every public surface here is wrapped in safeFn
|
|
15
|
+
// boundaries by the SDK init layer; the flush timer itself
|
|
16
|
+
// catches all rejections + reports via the circuit breaker.
|
|
17
|
+
import { drainRuntimeMetricsForFlush, emitMetric, rebufferRuntimeMetrics, reportInternal, } from '@goliapkg/sentori-core';
|
|
18
|
+
import { getConfig, isInitialized } from './config';
|
|
19
|
+
import { sendRuntimeMetricsBatch } from './transport';
|
|
20
|
+
const FLUSH_INTERVAL_MS = 30_000;
|
|
21
|
+
let _timer = null;
|
|
22
|
+
let _coldStartT0 = null;
|
|
23
|
+
let _coldStartEmitted = false;
|
|
24
|
+
/**
|
|
25
|
+
* Drain core's runtime-metrics ring and POST to
|
|
26
|
+
* /v1/runtime-metrics:batch. Rebuffers on failure so the next
|
|
27
|
+
* tick retries; sustained outages spill into the ring's drop
|
|
28
|
+
* counter which reports to the SDK self-report channel.
|
|
29
|
+
*
|
|
30
|
+
* Returns when the round-trip settles (success or failure). Per
|
|
31
|
+
* the NEVER rule, never throws — failure is logged + rebuffered,
|
|
32
|
+
* the resolved promise's value is undefined.
|
|
33
|
+
*/
|
|
34
|
+
export async function flushRuntimeMetrics() {
|
|
35
|
+
if (!isInitialized())
|
|
36
|
+
return;
|
|
37
|
+
const config = getConfig();
|
|
38
|
+
if (!config)
|
|
39
|
+
return;
|
|
40
|
+
const batch = drainRuntimeMetricsForFlush();
|
|
41
|
+
if (batch.length === 0)
|
|
42
|
+
return;
|
|
43
|
+
const ok = await sendRuntimeMetricsBatch(config.ingestUrl, config.token, batch);
|
|
44
|
+
if (!ok) {
|
|
45
|
+
rebufferRuntimeMetrics(batch);
|
|
46
|
+
reportInternal('runtime-metrics.flush', new Error('runtime-metrics POST failed'));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Start the 30 s flush timer. Called once from `init()`. Idempotent
|
|
51
|
+
* — repeated calls are a no-op so users that call
|
|
52
|
+
* `Sentori.init({ metrics: true })` more than once (HMR, fast
|
|
53
|
+
* refresh) don't get multiple timers.
|
|
54
|
+
*/
|
|
55
|
+
export function startRuntimeMetricsTimer() {
|
|
56
|
+
if (_timer !== null)
|
|
57
|
+
return;
|
|
58
|
+
_timer = setInterval(() => {
|
|
59
|
+
void flushRuntimeMetrics();
|
|
60
|
+
}, FLUSH_INTERVAL_MS);
|
|
61
|
+
// Don't keep Node alive solely for this timer. RN's setInterval
|
|
62
|
+
// is a NoopRef so this is harmless there; Node + CLI tests
|
|
63
|
+
// benefit so the process can exit cleanly.
|
|
64
|
+
_timer.unref?.();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Capture the wall-clock at `init()` so cold-start instrumentation
|
|
68
|
+
* has a t0. Called from init() before any other auto-instrument
|
|
69
|
+
* fires. Returns the captured t0 in millis (callers that want to
|
|
70
|
+
* stash + use it later can hold the value).
|
|
71
|
+
*/
|
|
72
|
+
export function markColdStartT0() {
|
|
73
|
+
if (_coldStartT0 === null) {
|
|
74
|
+
_coldStartT0 = Date.now();
|
|
75
|
+
}
|
|
76
|
+
return _coldStartT0;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Emit one `runtime.cold_start_ms` metric point. Idempotent per
|
|
80
|
+
* session — the second + later calls are a no-op so route-nav
|
|
81
|
+
* instrument (W2 part 3) can call this safely without worrying
|
|
82
|
+
* about double-counting.
|
|
83
|
+
*
|
|
84
|
+
* Hosts that want a more interactive-pixel-perfect cold-start
|
|
85
|
+
* boundary (TTI vs. raw init→render) can call
|
|
86
|
+
* `markTimeToFullDisplay()` and we emit that separately as
|
|
87
|
+
* `runtime.time_to_full_display_ms` (existing v1 instrument).
|
|
88
|
+
*/
|
|
89
|
+
export function emitColdStart() {
|
|
90
|
+
if (_coldStartEmitted)
|
|
91
|
+
return;
|
|
92
|
+
if (_coldStartT0 === null)
|
|
93
|
+
return;
|
|
94
|
+
const ms = Date.now() - _coldStartT0;
|
|
95
|
+
if (ms <= 0 || ms > 60_000) {
|
|
96
|
+
// Implausible — likely the host called emit before init or
|
|
97
|
+
// we got into a freeze-then-resume situation. Drop silently.
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
emitMetric('runtime.cold_start_ms', ms);
|
|
101
|
+
_coldStartEmitted = true;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Test-only escape hatch: stop the timer + reset cold-start state
|
|
105
|
+
* so vitest / bun:test teardown doesn't leak intervals across runs.
|
|
106
|
+
*/
|
|
107
|
+
export function __resetRuntimeMetricsRnForTests() {
|
|
108
|
+
if (_timer !== null) {
|
|
109
|
+
clearInterval(_timer);
|
|
110
|
+
_timer = null;
|
|
111
|
+
}
|
|
112
|
+
_coldStartT0 = null;
|
|
113
|
+
_coldStartEmitted = false;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=runtime-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-metrics.js","sourceRoot":"","sources":["../src/runtime-metrics.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,cAAc;AACd,EAAE;AACF,8DAA8D;AAC9D,0CAA0C;AAC1C,gEAAgE;AAChE,4CAA4C;AAC5C,wDAAwD;AACxD,EAAE;AACF,kEAAkE;AAClE,kEAAkE;AAClE,8DAA8D;AAC9D,EAAE;AACF,6DAA6D;AAC7D,2DAA2D;AAC3D,4DAA4D;AAE5D,OAAO,EACL,2BAA2B,EAC3B,UAAU,EACV,sBAAsB,EACtB,cAAc,GACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,IAAI,MAAM,GAA0C,IAAI,CAAC;AACzD,IAAI,YAAY,GAAkB,IAAI,CAAC;AACvC,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO;IAC7B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,KAAK,GAAG,2BAA2B,EAAE,CAAC;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChF,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAC9B,cAAc,CAAC,uBAAuB,EAAE,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACpF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO;IAC5B,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QACxB,KAAK,mBAAmB,EAAE,CAAC;IAC7B,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACtB,gEAAgE;IAChE,2DAA2D;IAC3D,2CAA2C;IAC1C,MAA4C,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,iBAAiB;QAAE,OAAO;IAC9B,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO;IAClC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;IACrC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;QAC3B,2DAA2D;QAC3D,6DAA6D;QAC7D,OAAO;IACT,CAAC;IACD,UAAU,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;IACxC,iBAAiB,GAAG,IAAI,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,+BAA+B;IAC7C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,YAAY,GAAG,IAAI,CAAC;IACpB,iBAAiB,GAAG,KAAK,CAAC;AAC5B,CAAC"}
|
package/lib/transport.d.ts
CHANGED
|
@@ -41,6 +41,24 @@ export declare const sendMetricsBatch: (ingestUrl: string, token: string, metric
|
|
|
41
41
|
ts?: string;
|
|
42
42
|
value: number;
|
|
43
43
|
}>) => Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* v2.1 W2 — POST a batched set of auto-instrument runtime metric
|
|
46
|
+
* points. Sibling of sendMetricsBatch; different endpoint
|
|
47
|
+
* (`/v1/runtime-metrics:batch`) because the storage shape +
|
|
48
|
+
* validation rules + rate-limit budget differ — see
|
|
49
|
+
* docs/design/v2-metrics.md.
|
|
50
|
+
*
|
|
51
|
+
* Returns true on 2xx so the caller can leave the batch drained;
|
|
52
|
+
* returns false on anything else (network error / non-2xx) so the
|
|
53
|
+
* caller rebuffer-and-retries on the next flush via
|
|
54
|
+
* `rebufferRuntimeMetrics(batch)`.
|
|
55
|
+
*/
|
|
56
|
+
export declare const sendRuntimeMetricsBatch: (ingestUrl: string, token: string, metrics: Array<{
|
|
57
|
+
name: string;
|
|
58
|
+
tags?: Record<string, string>;
|
|
59
|
+
ts: string;
|
|
60
|
+
value: number;
|
|
61
|
+
}>) => Promise<boolean>;
|
|
44
62
|
/**
|
|
45
63
|
* v0.8.2 — submit a user-supplied bug report. Fire-and-forget; resolves
|
|
46
64
|
* with the server-assigned id on success or `null` on any failure.
|
package/lib/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAqBrC,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,KAAG,IAiBtC,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,IAOjC,CAAC;AAEF,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,IAAI,CAe/C,CAAC;AAqBF,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CAkB1C,CAAC;AAwGF,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,IAAI,CAatD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,IAOlC,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,SAAS,KAAK,EAAY,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,MAAM,OAAO,KACZ,OAAO,CAAC,IAAI,CAcd,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,QAAQ,KAAK,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,KACD,OAAO,CAAC,IAAI,CAed,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,SAAS,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,KACD,OAAO,CAAC,IAAI,CAed,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,QAAQ;IACN,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,KACA,OAAO,CAAC,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,CAiBvD,CAAC;AAMF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,MAAM,OAAO,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,EAC9C,MAAM;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3C,OAAM;IAAE,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,CAAA;CAAO,KAC/C,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,GAAG,IAAI,CA8EjD,CAAC"}
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAqBrC,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,KAAG,IAiBtC,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,IAOjC,CAAC;AAEF,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,IAAI,CAe/C,CAAC;AAqBF,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CAkB1C,CAAC;AAwGF,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,IAAI,CAatD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,IAOlC,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,SAAS,KAAK,EAAY,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,MAAM,OAAO,KACZ,OAAO,CAAC,IAAI,CAcd,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,QAAQ,KAAK,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,KACD,OAAO,CAAC,IAAI,CAed,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,SAAS,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,KACD,OAAO,CAAC,IAAI,CAed,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,GAClC,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,SAAS,KAAK,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,KACD,OAAO,CAAC,OAAO,CAgBjB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,QAAQ;IACN,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,KACA,OAAO,CAAC,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,CAiBvD,CAAC;AAMF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,MAAM,OAAO,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,EAC9C,MAAM;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3C,OAAM;IAAE,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,CAAA;CAAO,KAC/C,OAAO,CAAC,OAAO,SAAS,EAAE,cAAc,GAAG,IAAI,CA8EjD,CAAC"}
|
package/lib/transport.js
CHANGED
|
@@ -281,6 +281,37 @@ export const sendMetricsBatch = async (ingestUrl, token, metrics) => {
|
|
|
281
281
|
// best-effort
|
|
282
282
|
}
|
|
283
283
|
};
|
|
284
|
+
/**
|
|
285
|
+
* v2.1 W2 — POST a batched set of auto-instrument runtime metric
|
|
286
|
+
* points. Sibling of sendMetricsBatch; different endpoint
|
|
287
|
+
* (`/v1/runtime-metrics:batch`) because the storage shape +
|
|
288
|
+
* validation rules + rate-limit budget differ — see
|
|
289
|
+
* docs/design/v2-metrics.md.
|
|
290
|
+
*
|
|
291
|
+
* Returns true on 2xx so the caller can leave the batch drained;
|
|
292
|
+
* returns false on anything else (network error / non-2xx) so the
|
|
293
|
+
* caller rebuffer-and-retries on the next flush via
|
|
294
|
+
* `rebufferRuntimeMetrics(batch)`.
|
|
295
|
+
*/
|
|
296
|
+
export const sendRuntimeMetricsBatch = async (ingestUrl, token, metrics) => {
|
|
297
|
+
if (metrics.length === 0)
|
|
298
|
+
return true;
|
|
299
|
+
try {
|
|
300
|
+
const resp = await fetch(`${ingestUrl}/v1/runtime-metrics:batch`, {
|
|
301
|
+
body: JSON.stringify({ metrics }),
|
|
302
|
+
headers: {
|
|
303
|
+
Authorization: `Bearer ${token}`,
|
|
304
|
+
'Content-Type': 'application/json',
|
|
305
|
+
'Sentori-Sdk': `react-native/${SDK_VERSION}`,
|
|
306
|
+
},
|
|
307
|
+
method: 'POST',
|
|
308
|
+
});
|
|
309
|
+
return resp.ok;
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
};
|
|
284
315
|
/**
|
|
285
316
|
* v0.8.2 — submit a user-supplied bug report. Fire-and-forget; resolves
|
|
286
317
|
* with the server-assigned id on success or `null` on any failure.
|
package/lib/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goliapkg/sentori-react-native",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Sentori SDK for React Native — JS-layer error capture, native crash handlers (iOS / Android), batched transport, fetch + react-navigation tracing.",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"author": "GOLIA K.K. <takagi@golia.jp> (https://golia.jp)",
|
|
@@ -92,6 +92,6 @@
|
|
|
92
92
|
"access": "public"
|
|
93
93
|
},
|
|
94
94
|
"dependencies": {
|
|
95
|
-
"@goliapkg/sentori-core": "^1.
|
|
95
|
+
"@goliapkg/sentori-core": "^1.1.0"
|
|
96
96
|
}
|
|
97
97
|
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { afterEach, beforeEach, expect, test } from 'bun:test';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
__peekRuntimeMetricsSize,
|
|
5
|
+
__resetRuntimeMetricsForTests,
|
|
6
|
+
drainRuntimeMetricsForFlush,
|
|
7
|
+
} from '@goliapkg/sentori-core';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
__forceEmitFpsForTests,
|
|
11
|
+
__pushSampleForTests,
|
|
12
|
+
__resetFpsInstrumentForTests,
|
|
13
|
+
startFpsInstrument,
|
|
14
|
+
stopFpsInstrument,
|
|
15
|
+
} from '../runtime-metrics-fps';
|
|
16
|
+
import {
|
|
17
|
+
__forceHeapTickForTests,
|
|
18
|
+
__peekHeapInstrumentState,
|
|
19
|
+
startHeapInstrument,
|
|
20
|
+
stopHeapInstrument,
|
|
21
|
+
} from '../runtime-metrics-heap';
|
|
22
|
+
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
__resetRuntimeMetricsForTests();
|
|
25
|
+
__resetFpsInstrumentForTests();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
stopFpsInstrument();
|
|
30
|
+
stopHeapInstrument();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('fps: pushes p50 + p95 emits into the runtime metrics ring', () => {
|
|
34
|
+
// 300 samples at a steady 16.67 ms cadence ≈ 60 fps.
|
|
35
|
+
for (let i = 0; i < 300; i++) {
|
|
36
|
+
__pushSampleForTests(16.67);
|
|
37
|
+
}
|
|
38
|
+
__forceEmitFpsForTests();
|
|
39
|
+
|
|
40
|
+
const drained = drainRuntimeMetricsForFlush();
|
|
41
|
+
expect(drained.length).toBe(2);
|
|
42
|
+
const names = drained.map((m) => m.name).sort();
|
|
43
|
+
expect(names).toEqual(['runtime.fps.p50', 'runtime.fps.p95']);
|
|
44
|
+
// Both should land near 60 fps.
|
|
45
|
+
const p50 = drained.find((m) => m.name === 'runtime.fps.p50')!;
|
|
46
|
+
expect(p50.value).toBeGreaterThanOrEqual(58);
|
|
47
|
+
expect(p50.value).toBeLessThanOrEqual(62);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test('fps: mixed-cadence run separates p50 from p95 sensibly', () => {
|
|
51
|
+
// 270 fast frames (60 fps) + 30 stutters (30 fps). p95 should
|
|
52
|
+
// land at the stutter zone.
|
|
53
|
+
for (let i = 0; i < 270; i++) __pushSampleForTests(16.67);
|
|
54
|
+
for (let i = 0; i < 30; i++) __pushSampleForTests(33.33);
|
|
55
|
+
__forceEmitFpsForTests();
|
|
56
|
+
|
|
57
|
+
const drained = drainRuntimeMetricsForFlush();
|
|
58
|
+
const p50 = drained.find((m) => m.name === 'runtime.fps.p50')!.value;
|
|
59
|
+
const p95 = drained.find((m) => m.name === 'runtime.fps.p95')!.value;
|
|
60
|
+
// p50 stays at the smooth-frame zone.
|
|
61
|
+
expect(p50).toBeGreaterThanOrEqual(58);
|
|
62
|
+
// p95 (worst-95th of Δt → slowest 5%) should drop into the
|
|
63
|
+
// 30 fps zone.
|
|
64
|
+
expect(p95).toBeLessThanOrEqual(35);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('fps: start is idempotent — second call is a no-op', () => {
|
|
68
|
+
startFpsInstrument();
|
|
69
|
+
// Calling start twice mustn't spin up a second rAF loop. We
|
|
70
|
+
// don't directly observe that here (no two-loop probe), but
|
|
71
|
+
// we assert start doesn't throw + state stays running once.
|
|
72
|
+
expect(() => startFpsInstrument()).not.toThrow();
|
|
73
|
+
stopFpsInstrument();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('heap: start is a no-op on hosts without performance.memory', () => {
|
|
77
|
+
// The default test runtime (bun) doesn't expose
|
|
78
|
+
// performance.memory, so start should silently skip and
|
|
79
|
+
// never schedule a timer.
|
|
80
|
+
startHeapInstrument();
|
|
81
|
+
expect(__peekHeapInstrumentState().running).toBe(false);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test('heap: force tick is a no-op on hosts without performance.memory', () => {
|
|
85
|
+
__forceHeapTickForTests();
|
|
86
|
+
// No metric should land in the ring.
|
|
87
|
+
expect(__peekRuntimeMetricsSize()).toBe(0);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test('heap: emits when performance.memory is shimmed', () => {
|
|
91
|
+
// Shim performance.memory so the read path exercises.
|
|
92
|
+
const g = globalThis as {
|
|
93
|
+
performance?: { memory?: { usedJSHeapSize?: number; totalJSHeapSize?: number } };
|
|
94
|
+
};
|
|
95
|
+
const before = g.performance;
|
|
96
|
+
g.performance = {
|
|
97
|
+
...(before ?? {}),
|
|
98
|
+
memory: { usedJSHeapSize: 12_345_678, totalJSHeapSize: 23_456_789 },
|
|
99
|
+
};
|
|
100
|
+
try {
|
|
101
|
+
__forceHeapTickForTests();
|
|
102
|
+
const drained = drainRuntimeMetricsForFlush();
|
|
103
|
+
const names = drained.map((m) => m.name).sort();
|
|
104
|
+
expect(names).toEqual(['runtime.heap.total_bytes', 'runtime.heap.used_bytes']);
|
|
105
|
+
expect(drained.find((m) => m.name === 'runtime.heap.used_bytes')!.value).toBe(12_345_678);
|
|
106
|
+
} finally {
|
|
107
|
+
g.performance = before;
|
|
108
|
+
}
|
|
109
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { afterEach, beforeEach, expect, test } from 'bun:test';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
__resetRuntimeMetricsForTests,
|
|
5
|
+
drainRuntimeMetricsForFlush,
|
|
6
|
+
} from '@goliapkg/sentori-core';
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
__forceNetworkEmitForTests,
|
|
10
|
+
__peekNetworkCountersForTests,
|
|
11
|
+
__resetNetworkBytesForTests,
|
|
12
|
+
estimateRequestBytes,
|
|
13
|
+
estimateResponseBytes,
|
|
14
|
+
recordNetworkBytes,
|
|
15
|
+
} from '../runtime-metrics-network';
|
|
16
|
+
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
__resetRuntimeMetricsForTests();
|
|
19
|
+
__resetNetworkBytesForTests();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
afterEach(() => __resetNetworkBytesForTests());
|
|
23
|
+
|
|
24
|
+
test('recordNetworkBytes: cumulates sent + received separately', () => {
|
|
25
|
+
recordNetworkBytes(100, 200);
|
|
26
|
+
recordNetworkBytes(50, 0);
|
|
27
|
+
recordNetworkBytes(0, 25);
|
|
28
|
+
const { sent, received } = __peekNetworkCountersForTests();
|
|
29
|
+
expect(sent).toBe(150);
|
|
30
|
+
expect(received).toBe(225);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('force emit: flushes both counters into the ring + resets', () => {
|
|
34
|
+
recordNetworkBytes(1234, 5678);
|
|
35
|
+
__forceNetworkEmitForTests();
|
|
36
|
+
|
|
37
|
+
const drained = drainRuntimeMetricsForFlush();
|
|
38
|
+
expect(drained.length).toBe(2);
|
|
39
|
+
const names = drained.map((m) => m.name).sort();
|
|
40
|
+
expect(names).toEqual(['runtime.network.bytes_received', 'runtime.network.bytes_sent']);
|
|
41
|
+
expect(drained.find((m) => m.name === 'runtime.network.bytes_sent')!.value).toBe(1234);
|
|
42
|
+
expect(drained.find((m) => m.name === 'runtime.network.bytes_received')!.value).toBe(5678);
|
|
43
|
+
|
|
44
|
+
const { sent, received } = __peekNetworkCountersForTests();
|
|
45
|
+
expect(sent).toBe(0);
|
|
46
|
+
expect(received).toBe(0);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('force emit: skips zero counters (no empty metric emit)', () => {
|
|
50
|
+
__forceNetworkEmitForTests();
|
|
51
|
+
expect(drainRuntimeMetricsForFlush().length).toBe(0);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('estimateRequestBytes: handles string body', () => {
|
|
55
|
+
expect(estimateRequestBytes({ body: 'hello world' })).toBe(11);
|
|
56
|
+
expect(estimateRequestBytes()).toBe(0);
|
|
57
|
+
expect(estimateRequestBytes({})).toBe(0);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test('estimateRequestBytes: reads byteLength from ArrayBuffer-like body', () => {
|
|
61
|
+
const buf = new Uint8Array([1, 2, 3, 4, 5]);
|
|
62
|
+
expect(estimateRequestBytes({ body: buf })).toBe(5);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
test('estimateResponseBytes: parses content-length header', () => {
|
|
66
|
+
const h = new Headers({ 'content-length': '1024' });
|
|
67
|
+
expect(estimateResponseBytes(h)).toBe(1024);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('estimateResponseBytes: returns 0 when header missing (chunked / stripped)', () => {
|
|
71
|
+
expect(estimateResponseBytes(new Headers())).toBe(0);
|
|
72
|
+
expect(estimateResponseBytes(null)).toBe(0);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test('estimateResponseBytes: returns 0 on unparseable header (undercount-safe)', () => {
|
|
76
|
+
const h = new Headers({ 'content-length': 'nope' });
|
|
77
|
+
expect(estimateResponseBytes(h)).toBe(0);
|
|
78
|
+
});
|
package/src/handlers/network.ts
CHANGED
|
@@ -2,6 +2,13 @@ import { normalizeUrl, startSpan } from '@goliapkg/sentori-core';
|
|
|
2
2
|
|
|
3
3
|
import { addBreadcrumb } from '../breadcrumbs';
|
|
4
4
|
import { getConfig } from '../config';
|
|
5
|
+
// v2.1 W2 — bytes counters drive the runtime.network.{sent,received}
|
|
6
|
+
// metrics. Cheap two-add per request, no allocation.
|
|
7
|
+
import {
|
|
8
|
+
estimateRequestBytes,
|
|
9
|
+
estimateResponseBytes,
|
|
10
|
+
recordNetworkBytes,
|
|
11
|
+
} from '../runtime-metrics-network';
|
|
5
12
|
|
|
6
13
|
let _installed = false;
|
|
7
14
|
let _graphqlEnabled = true;
|
|
@@ -88,6 +95,10 @@ function patchFetch(): void {
|
|
|
88
95
|
const resp = await original(input, reqInit);
|
|
89
96
|
span.setTag('http.status', String(resp.status));
|
|
90
97
|
span.finish({ status: resp.status >= 400 ? 'error' : 'ok' });
|
|
98
|
+
// v2.1 W2 — bytes accounting. Sent estimated from
|
|
99
|
+
// init.body; received read from response Content-Length
|
|
100
|
+
// header (0 when missing / chunked — undercount-safe).
|
|
101
|
+
recordNetworkBytes(estimateRequestBytes(init), estimateResponseBytes(resp.headers));
|
|
91
102
|
addBreadcrumb({
|
|
92
103
|
type: 'net',
|
|
93
104
|
data: gqlOp
|