@fougere/observability 0.8.4-alpha.0 → 0.9.0-alpha.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/dist/ExportHandler.d.ts +20 -0
- package/dist/ExportHandler.d.ts.map +1 -0
- package/dist/ExportHandler.js +20 -0
- package/dist/ExportHandler.js.map +1 -0
- package/dist/extension.d.ts.map +1 -1
- package/dist/extension.js +30 -4
- package/dist/extension.js.map +1 -1
- package/dist/index.d.ts +3 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +0 -0
- package/dist/metrics.js.map +1 -1
- package/package.json +7 -7
- package/src/ExportHandler.ts +20 -0
- package/src/extension.ts +34 -4
- package/src/index.ts +7 -9
- package/src/metrics.ts +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Fact, LogLine } from '@fougere/core';
|
|
2
|
+
import type { LogSink } from '@fougere/core';
|
|
3
|
+
/**
|
|
4
|
+
* Every line this process logged, on its way to a collector.
|
|
5
|
+
*
|
|
6
|
+
* A handler and not an `onLog` sink: accepting the fact IS the subscription. The exporter
|
|
7
|
+
* comes from the container — `up` puts it there, and this resolves at the first call.
|
|
8
|
+
*
|
|
9
|
+
* In `src/` and not under `fronds/`: that directory is what a SCAN reads, and this frond
|
|
10
|
+
* is stated, because a published package is read by no scanner.
|
|
11
|
+
*/
|
|
12
|
+
export default class ExportHandler {
|
|
13
|
+
private exporting;
|
|
14
|
+
constructor(exporting: {
|
|
15
|
+
take: LogSink;
|
|
16
|
+
});
|
|
17
|
+
/** Send one line on. */
|
|
18
|
+
record(line: Fact<LogLine>): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ExportHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportHandler.d.ts","sourceRoot":"","sources":["../src/ExportHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACpB,OAAO,CAAC,SAAS;IAA7B,YAAoB,SAAS,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,EAAI;IAEpD,wBAAwB;IAClB,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every line this process logged, on its way to a collector.
|
|
3
|
+
*
|
|
4
|
+
* A handler and not an `onLog` sink: accepting the fact IS the subscription. The exporter
|
|
5
|
+
* comes from the container — `up` puts it there, and this resolves at the first call.
|
|
6
|
+
*
|
|
7
|
+
* In `src/` and not under `fronds/`: that directory is what a SCAN reads, and this frond
|
|
8
|
+
* is stated, because a published package is read by no scanner.
|
|
9
|
+
*/
|
|
10
|
+
export default class ExportHandler {
|
|
11
|
+
exporting;
|
|
12
|
+
constructor(exporting) {
|
|
13
|
+
this.exporting = exporting;
|
|
14
|
+
}
|
|
15
|
+
/** Send one line on. */
|
|
16
|
+
async record(line) {
|
|
17
|
+
this.exporting.take({ ...line, args: line.args ?? [], at: line.at.getTime() });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=ExportHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportHandler.js","sourceRoot":"","sources":["../src/ExportHandler.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACZ,SAAS;IAA7B,YAAoB,SAA4B;yBAA5B,SAAS;IAAsB,CAAC;IAEpD,wBAAwB;IACxB,KAAK,CAAC,MAAM,CAAC,IAAmB;QAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACjF,CAAC;CACF"}
|
package/dist/extension.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAsD,KAAK,SAAS,EAAgB,MAAM,eAAe,CAAC;AASjH,MAAM,WAAW,oBAAoB;IACnC,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,SAAS,CA8F3E"}
|
package/dist/extension.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** This package's own ascent and descent, in one value. */
|
|
2
|
-
import {
|
|
2
|
+
import { frond, loggerMiddleware, LogLine } from '@fougere/core';
|
|
3
|
+
import ExportHandler from './ExportHandler.js';
|
|
3
4
|
import { traceContext } from '#trace-context';
|
|
4
5
|
import { registerFlush } from './index.js';
|
|
5
6
|
import { trace, onSpan } from './index.js';
|
|
@@ -11,21 +12,43 @@ export function observability(options = {}) {
|
|
|
11
12
|
const service = options.service ?? 'fougere';
|
|
12
13
|
/** Per APP, not per extension. */
|
|
13
14
|
const undoing = new WeakMap();
|
|
15
|
+
/** One box the handler resolves, whose content the ascent decides. */
|
|
16
|
+
const exporting = { take: () => { } };
|
|
14
17
|
return {
|
|
15
18
|
name: 'observability',
|
|
19
|
+
// What it needs a SIGNATURE for: every line this process logs. Stated rather than
|
|
20
|
+
// scanned, because a published package is read by no scanner.
|
|
21
|
+
fronds: [frond('observability', {
|
|
22
|
+
handlers: [{
|
|
23
|
+
ctor: ExportHandler,
|
|
24
|
+
deps: ['LogExport'],
|
|
25
|
+
operations: {
|
|
26
|
+
record: {
|
|
27
|
+
input: LogLine,
|
|
28
|
+
binding: [{ name: 'line', optional: false, source: { kind: 'fact', factName: 'logLine' } }],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
}],
|
|
32
|
+
})],
|
|
16
33
|
up(app) {
|
|
34
|
+
// Held across the ascent: the exporter exists only when `otlp` is declared, and the
|
|
35
|
+
// handler resolves this either way.
|
|
36
|
+
app.container.registerValue('LogExport', exporting);
|
|
17
37
|
const undo = [];
|
|
18
38
|
undoing.set(app, undo);
|
|
19
39
|
// Order matters: `trace()` opens the span that every log line written inside the
|
|
20
40
|
// call will carry. Installed the other way round, the lines leave uncorrelated.
|
|
21
41
|
app.use(trace());
|
|
22
|
-
app
|
|
42
|
+
// The app's own logger, named — NOT `new Logger(service)`: a logger built here has
|
|
43
|
+
// no `Carry`, so its lines printed and announced nothing. 20 on the console, 0 in
|
|
44
|
+
// the ring, measured on `demos/observability`.
|
|
45
|
+
app.use(loggerMiddleware(app.container.resolve('Logger').child(service)));
|
|
23
46
|
// Said once, here, because the alternative is finding it in a trace viewer three
|
|
24
47
|
// weeks later: without an ambient context a call that crossed NO wire cannot name
|
|
25
48
|
// its parent, so it starts its own trace. What still works is stated too — a
|
|
26
49
|
// warning that only names the loss reads as "tracing is broken", and it is not.
|
|
27
50
|
if (!traceContext.ambient) {
|
|
28
|
-
|
|
51
|
+
app.container.resolve('Logger').child(service).warn('no async context: a call that crosses no wire starts its own trace '
|
|
29
52
|
+ '(an emission subscriber, a handler reaching another frond in this process). '
|
|
30
53
|
+ 'An arriving call and a call to a frond behind `remotes:` are unaffected — both carry '
|
|
31
54
|
+ 'traceparent on the invocation. Add "nodejs_als" to compatibility_flags to restore the rest.');
|
|
@@ -52,7 +75,10 @@ export function observability(options = {}) {
|
|
|
52
75
|
});
|
|
53
76
|
// The timer is not the only way out: an isolate is frozen when it answers, so a
|
|
54
77
|
// host with no time between requests calls `flushTelemetry()` inside `ctx.waitUntil`.
|
|
55
|
-
|
|
78
|
+
// What `ExportHandler` asks for — replaced rather than added to, so a reload does not
|
|
79
|
+
// hand the old exporter a new app's lines.
|
|
80
|
+
exporting.take = written.sink;
|
|
81
|
+
undo.push(onSpan(telemetry.sink), registerFlush(() => telemetry.flush()), registerFlush(() => written.flush()), () => telemetry.stop(), () => written.stop(), () => { exporting.take = () => { }; });
|
|
56
82
|
},
|
|
57
83
|
async down(app) {
|
|
58
84
|
// Reverse, and the exporters' `stop()` is in here: it flushes what is buffered, so a
|
package/dist/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAU,OAAO,EAA0C,MAAM,eAAe,CAAC;AACjH,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAYjC,uDAAuD;AACvD,MAAM,UAAU,aAAa,CAAC,OAAO,GAAyB,EAAE;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;IAC7C,kCAAkC;IAClC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAuC,CAAC;IAEnE,sEAAsE;IACtE,MAAM,SAAS,GAAsB,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;IAExD,OAAO;QACL,IAAI,EAAE,eAAe;QAErB,kFAAkF;QAClF,8DAA8D;QAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE;gBAC9B,QAAQ,EAAE,CAAC;wBACT,IAAI,EAAE,aAAa;wBACnB,IAAI,EAAE,CAAC,WAAW,CAAC;wBACnB,UAAU,EAAE;4BACV,MAAM,EAAE;gCACN,KAAK,EAAE,OAAO;gCACd,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC;6BAC5F;yBACF;qBACF,CAAC;aACH,CAAC,CAAC;QAEH,EAAE,CAAC,GAAQ;YACT,oFAAoF;YACpF,oCAAoC;YACpC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACpD,MAAM,IAAI,GAAmC,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvB,iFAAiF;YACjF,gFAAgF;YAChF,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACjB,mFAAmF;YACnF,kFAAkF;YAClF,+CAA+C;YAC/C,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAS,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAElF,iFAAiF;YACjF,kFAAkF;YAClF,6EAA6E;YAC7E,gFAAgF;YAChF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,GAAG,CAAC,SAAS,CAAC,OAAO,CAAS,QAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CACzD,qEAAqE;sBACnE,8EAA8E;sBAC9E,uFAAuF;sBACvF,6FAA6F,CAChG,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACjC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAE7B,IAAI,CAAC,OAAO,CAAC,IAAI;gBAAE,OAAO;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC;gBACrB,OAAO;gBACP,GAAG,EAAE,GAAG,IAAI,YAAY;gBACxB,UAAU,EAAE,GAAG,IAAI,aAAa;gBAChC,OAAO,EAAE,QAAQ;gBACjB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzD,CAAC,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC;gBACnB,OAAO;gBACP,GAAG,EAAE,GAAG,IAAI,UAAU;gBACtB,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;gBACtE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzD,CAAC,CAAC;YACH,gFAAgF;YAChF,sFAAsF;YACtF,sFAAsF;YACtF,2CAA2C;YAC3C,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,IAAI,CACP,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EACtB,aAAa,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,EAC5E,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAC5C,GAAG,EAAE,GAAG,SAAS,CAAC,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CACrC,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAQ;YACjB,qFAAqF;YACrF,+EAA+E;YAC/E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;gBAAE,MAAM,IAAI,EAAE,CAAC;QAClD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type AppMiddleware } from '@fougere/core';
|
|
2
2
|
import { type SpanContext } from './traceparent.js';
|
|
3
|
-
export { traceparentOf, parseTraceparent } from './traceparent.js';
|
|
4
|
-
export type { SpanContext } from './traceparent.js';
|
|
5
3
|
/** A step that has finished, and what it did. */
|
|
6
4
|
export interface FinishedSpan extends SpanContext {
|
|
7
5
|
parentId: string | undefined;
|
|
@@ -33,11 +31,8 @@ export declare function onSpan(next: SpanSink): () => void;
|
|
|
33
31
|
/** The middleware. */
|
|
34
32
|
export declare function trace(): AppMiddleware;
|
|
35
33
|
export { otlp } from './otlp.js';
|
|
36
|
-
export
|
|
37
|
-
export {
|
|
38
|
-
export type { Metrics, MetricsSnapshot, TopologyReport, FrondPlacement, Edge } from './metrics.js';
|
|
34
|
+
export { metrics } from './metrics.js';
|
|
35
|
+
export type { Metrics, TopologyReport, FrondPlacement, Edge } from './metrics.js';
|
|
39
36
|
export { logs } from './logs.js';
|
|
40
|
-
export type { LogsOptions, LogExporter, CapturedLog } from './logs.js';
|
|
41
37
|
export { observability } from './extension.js';
|
|
42
|
-
export type { ObservabilityOptions } from './extension.js';
|
|
43
38
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAA8C,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAOhG,iDAAiD;AACjD,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B;;;OAGG;IACH,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,6FAA6F;IAC7F,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;AAEpD,qCAAqC;AAErC,0CAA0C;AAC1C,wBAAgB,WAAW,IAAI,WAAW,GAAG,SAAS,CAErD;AAWD,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAKD,kCAAkC;AAClC,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAMpD;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAMnE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,IAAI,CAMjD;AAED,sBAAsB;AACtB,wBAAgB,KAAK,IAAI,aAAa,CAgErC;AAOD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @fougere/observability — one span per operation, and the trace that survives a wire. */
|
|
2
2
|
import { traceContext } from '#trace-context';
|
|
3
|
+
import { CARRIES_LINE } from '@fougere/core';
|
|
3
4
|
import { parseTraceparent, traceparentOf, randomHex } from './traceparent.js';
|
|
4
|
-
export { traceparentOf, parseTraceparent } from './traceparent.js';
|
|
5
5
|
/** The step running here and now. */
|
|
6
6
|
/** The step running right now, if any. */
|
|
7
7
|
export function currentSpan() {
|
|
@@ -50,6 +50,11 @@ export function trace() {
|
|
|
50
50
|
return (ctx, next) => {
|
|
51
51
|
if (sinks.length === 0)
|
|
52
52
|
return next();
|
|
53
|
+
// An op that CARRIES a line is not a call this process made: counting it puts the
|
|
54
|
+
// delivery of a log line in the saturation figure, and spanning it puts a line about
|
|
55
|
+
// the span back on the wire. Same rule as `loggerMiddleware`, one declaration.
|
|
56
|
+
if (CARRIES_LINE.has(ctx.entity))
|
|
57
|
+
return next();
|
|
53
58
|
// The wire first, the ambient context second: an arriving call names its parent on
|
|
54
59
|
// the invocation, an outgoing one inherits from the call it is made inside.
|
|
55
60
|
const inherited = parseTraceparent(ctx.invocation?.trace);
|
|
@@ -115,7 +120,7 @@ function codeOf(err) {
|
|
|
115
120
|
return typeof code === 'string' ? code : (err?.name ?? 'error');
|
|
116
121
|
}
|
|
117
122
|
export { otlp } from './otlp.js';
|
|
118
|
-
export { metrics
|
|
123
|
+
export { metrics } from './metrics.js';
|
|
119
124
|
export { logs } from './logs.js';
|
|
120
125
|
export { observability } from './extension.js';
|
|
121
126
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/metrics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAkB,MAAM,eAAe,CAAC;AAE/E,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAkC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3E,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,kEAAkE;IAClE,IAAI,EAAE,QAAQ,CAAC;IACf,2BAA2B;IAC3B,QAAQ,IAAI,eAAe,CAAC;CAC7B;AAGD,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gFAAgF;IAChF,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,uFAAuF;IACvF,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CA8C1C;
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,cAAc,EAAkB,MAAM,eAAe,CAAC;AAE/E,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAkC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3E,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,mFAAmF;IACnF,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,kEAAkE;IAClE,IAAI,EAAE,QAAQ,CAAC;IACf,2BAA2B;IAC3B,QAAQ,IAAI,eAAe,CAAC;CAC7B;AAGD,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gFAAgF;IAChF,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,uFAAuF;IACvF,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CA8C1C;AAmCD,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAK/D;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe;;;YAQrD,UAAU;;;oBALkC,WAAW;;;;;;gBAQtD,IAAI;;YACb,4BAA4B;;;;EAkGvC"}
|
package/dist/metrics.js
CHANGED
|
Binary file
|
package/dist/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AAE3E;;;GAGG;AACH,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AAiC3F;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,GAAS;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,qFAAqF;IACrF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,oDAAoD;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAEtC,OAAO;QACL,IAAI,EAAE,CAAC,IAAkB,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AAE3E;;;GAGG;AACH,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;AAiC3F;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,GAAS;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,qFAAqF;IACrF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,oDAAoD;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;IAEtC,OAAO;QACL,IAAI,EAAE,CAAC,IAAkB,EAAE,EAAE;YAC3B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACrE,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG;oBACJ,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,KAAK,EAAE,CAAC;oBACR,GAAG,EAAE,CAAC;oBACN,OAAO,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC9C,CAAC;gBACF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;gBACrD,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;gBAC/F,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;gBAChB,IAAI,IAAI,CAAC,KAAK;oBAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;gBACjC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;YAC/B,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;YACf,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC;YACnB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;YACf,KAAK;YACL,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,EAAE,WAAW,EAAE;YACrB,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;YAC/B,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;SAC3B,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,GAAoB,EAAE,IAAiB;IACzD,yFAAyF;IACzF,yCAAyC;IACzC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;SACtC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;SACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC;IAEjD,MAAM,IAAI,GAAqB,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjE,KAAK,EAAE,KAAK,CAAC,IAAI;QACjB,SAAS,EAAE,OAAgB;QAC3B,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;QAC/B,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;KAC7B,CAAC,CAAC,CAAC;IAEJ,oFAAoF;IACpF,oFAAoF;IACpF,MAAM,SAAS,GAAqB,CAAC,GAAG,IAAI,CAAC;SAC1C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SAClC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAiB,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEzF,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,6EAA6E;AAC7E,SAAS,QAAQ,CAAC,OAAe;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,aAAa,CAAC,GAAQ,EAAE,QAAiB;IACvD,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAmB,EAAE;QAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,QAAyB;IACvE,MAAM,KAAK,GAAG,GAAG,QAAQ,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAEtF,OAAO;QACL,eAAe,EAAE;YACf;gBACE,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE;gBACzD,YAAY,EAAE;oBACZ;wBACE,KAAK,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE;wBACzC,4BAA4B;wBAC5B,OAAO,EAAG;4BACR;gCACE,IAAI,EAAE,4BAA4B;gCAClC,WAAW,EAAE,mDAAmD;gCAChE,IAAI,EAAE,GAAG;gCACT,SAAS,EAAE;oCACT,qEAAqE;oCACrE,oEAAoE;oCACpE,sBAAsB,EAAE,CAAC;oCACzB,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wCACxC,UAAU,EAAE;4CACV,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4CACxD,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC;4CAClC,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,SAAS,CAAC;4CACxC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;4CACnD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yCAC9D;wCACD,iBAAiB,EAAE,KAAK;wCACxB,YAAY,EAAE,GAAG;wCACjB,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE;wCACrB,GAAG,EAAE,GAAG,CAAC,GAAG;wCACZ,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;wCAC5C,cAAc,EAAE,QAAQ,CAAC,MAAM;qCAChC,CAAC,CAAC;iCACJ;6BACF;4BACD;gCACE,IAAI,EAAE,2BAA2B;gCACjC,WAAW,EAAE,uDAAuD;gCACpE,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;6BAC5E;4BACD;gCACE,IAAI,EAAE,gBAAgB;gCACtB,WAAW,EAAE,4DAA4D;gCACzE,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE;oCACL,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wCACxC,UAAU,EAAE;4CACV,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC;4CAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,SAAS,CAAC;yCACvC;wCACD,KAAK,EAAE,GAAG;wCACV,YAAY,EAAE,GAAG;qCAClB,CAAC,CAAC;iCACJ;6BACF;4BACD;gCACE,IAAI,EAAE,eAAe;gCACrB,WAAW,EAAE,6DAA6D;gCAC1E,IAAI,EAAE,QAAQ;gCACd,GAAG,EAAE;oCACH,sBAAsB,EAAE,CAAC;oCACzB,WAAW,EAAE,IAAI;oCACjB,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wCACrC,UAAU,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;wCACpE,iBAAiB,EAAE,KAAK;wCACxB,YAAY,EAAE,GAAG;wCACjB,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;qCACpB,CAAC,CAAC;iCACJ;6BACF;4BACD;gCACE,IAAI,EAAE,sBAAsB;gCAC5B,WAAW,EAAE,+BAA+B;gCAC5C,IAAI,EAAE,QAAQ;gCACd,GAAG,EAAE;oCACH,sBAAsB,EAAE,CAAC;oCACzB,WAAW,EAAE,IAAI;oCACjB,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wCACrC,UAAU,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;wCACpE,iBAAiB,EAAE,KAAK;wCACxB,YAAY,EAAE,GAAG;wCACjB,KAAK,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;qCACrB,CAAC,CAAC;iCACJ;6BACF;4BACD;gCACE,IAAI,EAAE,qBAAqB;gCAC3B,WAAW,EAAE,0DAA0D;gCACvE,IAAI,EAAE,QAAQ;gCACd,KAAK,EAAE;oCACL,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wCACxC,UAAU,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;wCAC5C,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;wCACnB,YAAY,EAAE,GAAG;qCAClB,CAAC,CAAC;iCACJ;6BACF;yBACwB,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAC/D;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fougere/observability",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-alpha.0",
|
|
4
4
|
"description": "Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"fougere",
|
|
@@ -31,15 +31,15 @@
|
|
|
31
31
|
"src"
|
|
32
32
|
],
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@fougere/core": "^0.
|
|
34
|
+
"@fougere/core": "^0.9.0-alpha.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"vitest": "^4.1.0",
|
|
38
|
-
"@fougere/schema": "0.
|
|
39
|
-
"@fougere/
|
|
40
|
-
"@fougere/core": "0.
|
|
41
|
-
"@fougere/
|
|
42
|
-
"@fougere/transport-http": "0.
|
|
38
|
+
"@fougere/schema": "0.9.0-alpha.0",
|
|
39
|
+
"@fougere/container": "0.9.0-alpha.0",
|
|
40
|
+
"@fougere/core": "0.9.0-alpha.0",
|
|
41
|
+
"@fougere/compiler": "0.9.0-alpha.0",
|
|
42
|
+
"@fougere/transport-http": "0.9.0-alpha.0"
|
|
43
43
|
},
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Fact, LogLine } from '@fougere/core';
|
|
2
|
+
import type { LogSink } from '@fougere/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Every line this process logged, on its way to a collector.
|
|
6
|
+
*
|
|
7
|
+
* A handler and not an `onLog` sink: accepting the fact IS the subscription. The exporter
|
|
8
|
+
* comes from the container — `up` puts it there, and this resolves at the first call.
|
|
9
|
+
*
|
|
10
|
+
* In `src/` and not under `fronds/`: that directory is what a SCAN reads, and this frond
|
|
11
|
+
* is stated, because a published package is read by no scanner.
|
|
12
|
+
*/
|
|
13
|
+
export default class ExportHandler {
|
|
14
|
+
constructor(private exporting: { take: LogSink }) {}
|
|
15
|
+
|
|
16
|
+
/** Send one line on. */
|
|
17
|
+
async record(line: Fact<LogLine>): Promise<void> {
|
|
18
|
+
this.exporting.take({ ...line, args: line.args ?? [], at: line.at.getTime() });
|
|
19
|
+
}
|
|
20
|
+
}
|
package/src/extension.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** This package's own ascent and descent, in one value. */
|
|
2
|
-
import { loggerMiddleware, Logger,
|
|
2
|
+
import { frond, loggerMiddleware, Logger, LogLine, type App, type Extension, type LogSink } from '@fougere/core';
|
|
3
|
+
import ExportHandler from './ExportHandler.js';
|
|
3
4
|
import { traceContext } from '#trace-context';
|
|
4
5
|
import { registerFlush } from './index.js';
|
|
5
6
|
import { trace, onSpan } from './index.js';
|
|
@@ -23,22 +24,47 @@ export function observability(options: ObservabilityOptions = {}): Extension {
|
|
|
23
24
|
/** Per APP, not per extension. */
|
|
24
25
|
const undoing = new WeakMap<App, (() => void | Promise<void>)[]>();
|
|
25
26
|
|
|
27
|
+
/** One box the handler resolves, whose content the ascent decides. */
|
|
28
|
+
const exporting: { take: LogSink } = { take: () => {} };
|
|
29
|
+
|
|
26
30
|
return {
|
|
27
31
|
name: 'observability',
|
|
32
|
+
|
|
33
|
+
// What it needs a SIGNATURE for: every line this process logs. Stated rather than
|
|
34
|
+
// scanned, because a published package is read by no scanner.
|
|
35
|
+
fronds: [frond('observability', {
|
|
36
|
+
handlers: [{
|
|
37
|
+
ctor: ExportHandler,
|
|
38
|
+
deps: ['LogExport'],
|
|
39
|
+
operations: {
|
|
40
|
+
record: {
|
|
41
|
+
input: LogLine,
|
|
42
|
+
binding: [{ name: 'line', optional: false, source: { kind: 'fact', factName: 'logLine' } }],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
}],
|
|
46
|
+
})],
|
|
47
|
+
|
|
28
48
|
up(app: App) {
|
|
49
|
+
// Held across the ascent: the exporter exists only when `otlp` is declared, and the
|
|
50
|
+
// handler resolves this either way.
|
|
51
|
+
app.container.registerValue('LogExport', exporting);
|
|
29
52
|
const undo: (() => void | Promise<void>)[] = [];
|
|
30
53
|
undoing.set(app, undo);
|
|
31
54
|
// Order matters: `trace()` opens the span that every log line written inside the
|
|
32
55
|
// call will carry. Installed the other way round, the lines leave uncorrelated.
|
|
33
56
|
app.use(trace());
|
|
34
|
-
app
|
|
57
|
+
// The app's own logger, named — NOT `new Logger(service)`: a logger built here has
|
|
58
|
+
// no `Carry`, so its lines printed and announced nothing. 20 on the console, 0 in
|
|
59
|
+
// the ring, measured on `demos/observability`.
|
|
60
|
+
app.use(loggerMiddleware(app.container.resolve<Logger>('Logger').child(service)));
|
|
35
61
|
|
|
36
62
|
// Said once, here, because the alternative is finding it in a trace viewer three
|
|
37
63
|
// weeks later: without an ambient context a call that crossed NO wire cannot name
|
|
38
64
|
// its parent, so it starts its own trace. What still works is stated too — a
|
|
39
65
|
// warning that only names the loss reads as "tracing is broken", and it is not.
|
|
40
66
|
if (!traceContext.ambient) {
|
|
41
|
-
|
|
67
|
+
app.container.resolve<Logger>('Logger').child(service).warn(
|
|
42
68
|
'no async context: a call that crosses no wire starts its own trace '
|
|
43
69
|
+ '(an emission subscriber, a handler reaching another frond in this process). '
|
|
44
70
|
+ 'An arriving call and a call to a frond behind `remotes:` are unaffected — both carry '
|
|
@@ -68,10 +94,14 @@ export function observability(options: ObservabilityOptions = {}): Extension {
|
|
|
68
94
|
});
|
|
69
95
|
// The timer is not the only way out: an isolate is frozen when it answers, so a
|
|
70
96
|
// host with no time between requests calls `flushTelemetry()` inside `ctx.waitUntil`.
|
|
97
|
+
// What `ExportHandler` asks for — replaced rather than added to, so a reload does not
|
|
98
|
+
// hand the old exporter a new app's lines.
|
|
99
|
+
exporting.take = written.sink;
|
|
71
100
|
undo.push(
|
|
72
|
-
onSpan(telemetry.sink),
|
|
101
|
+
onSpan(telemetry.sink),
|
|
73
102
|
registerFlush(() => telemetry.flush()), registerFlush(() => written.flush()),
|
|
74
103
|
() => telemetry.stop(), () => written.stop(),
|
|
104
|
+
() => { exporting.take = () => {}; },
|
|
75
105
|
);
|
|
76
106
|
},
|
|
77
107
|
async down(app: App) {
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
/** @fougere/observability — one span per operation, and the trace that survives a wire. */
|
|
2
2
|
import { traceContext } from '#trace-context';
|
|
3
|
-
import type
|
|
3
|
+
import { CARRIES_LINE, type AppMiddleware } from '@fougere/core';
|
|
4
4
|
import { parseTraceparent, traceparentOf, randomHex, type SpanContext } from './traceparent.js';
|
|
5
5
|
|
|
6
|
-
export { traceparentOf, parseTraceparent } from './traceparent.js';
|
|
7
|
-
export type { SpanContext } from './traceparent.js';
|
|
8
|
-
|
|
9
6
|
/** A step while it runs. */
|
|
10
7
|
interface Running extends SpanContext {
|
|
11
8
|
frond: string | undefined;
|
|
@@ -85,6 +82,10 @@ export function onSpan(next: SpanSink): () => void {
|
|
|
85
82
|
export function trace(): AppMiddleware {
|
|
86
83
|
return (ctx, next) => {
|
|
87
84
|
if (sinks.length === 0) return next();
|
|
85
|
+
// An op that CARRIES a line is not a call this process made: counting it puts the
|
|
86
|
+
// delivery of a log line in the saturation figure, and spanning it puts a line about
|
|
87
|
+
// the span back on the wire. Same rule as `loggerMiddleware`, one declaration.
|
|
88
|
+
if (CARRIES_LINE.has(ctx.entity)) return next();
|
|
88
89
|
|
|
89
90
|
// The wire first, the ambient context second: an arriving call names its parent on
|
|
90
91
|
// the invocation, an outgoing one inherits from the call it is made inside.
|
|
@@ -150,10 +151,7 @@ function codeOf(err: unknown): string {
|
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
export { otlp } from './otlp.js';
|
|
153
|
-
export
|
|
154
|
-
export {
|
|
155
|
-
export type { Metrics, MetricsSnapshot, TopologyReport, FrondPlacement, Edge } from './metrics.js';
|
|
154
|
+
export { metrics } from './metrics.js';
|
|
155
|
+
export type { Metrics, TopologyReport, FrondPlacement, Edge } from './metrics.js';
|
|
156
156
|
export { logs } from './logs.js';
|
|
157
|
-
export type { LogsOptions, LogExporter, CapturedLog } from './logs.js';
|
|
158
157
|
export { observability } from './extension.js';
|
|
159
|
-
export type { ObservabilityOptions } from './extension.js';
|
package/src/metrics.ts
CHANGED
|
Binary file
|