rian 0.3.0-next.9 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
package/async.d.ts CHANGED
@@ -1,6 +1,59 @@
1
- import type { CallableScope, Scope, Span } from 'rian';
1
+ import type { CallableScope, Options, Scope } from 'rian';
2
2
 
3
- export function currentSpan(): Scope | null;
3
+ export { report, configure } from 'rian';
4
+
5
+ /**
6
+ * Returns the current span in the current execution context.
7
+ *
8
+ * This will throw an error if there is no current span.
9
+ *
10
+ * @example
11
+ *
12
+ * ```ts
13
+ * function doWork() {
14
+ * const span = currentSpan();
15
+ * span.set_context({ foo: 'bar' });
16
+ * }
17
+ *
18
+ * span('some-name')(() => {
19
+ * doWork(); // will guarantee `currentSpan` returns this span
20
+ * });
21
+ * ```
22
+ */
23
+ export function currentSpan(): Scope;
24
+
25
+ /**
26
+ * Creates a new span for the currently active tracer.
27
+ *
28
+ * @example
29
+ *
30
+ * ```ts
31
+ * tracer('some-name')(() => {
32
+ * // some deeply nested moments later
33
+ * const s = span('my-span');
34
+ * });
35
+ * ```
36
+ */
4
37
  export function span(name: string): CallableScope;
5
38
 
6
- export { tracer, report, configure } from 'rian';
39
+ export type Tracer<T> = (cb: T) => ReturnType<T>;
40
+
41
+ /**
42
+ * A tracer is a logical unit in your application. This alleviates the need to pass around a tracer instance.
43
+ *
44
+ * All spans produced by a tracer will all collect into a single span collection that is given to {@link report}.
45
+ *
46
+ * @example
47
+ *
48
+ * ```ts
49
+ * const trace = tracer('server');
50
+ *
51
+ * trace(() => {
52
+ * // application logic
53
+ * });
54
+ * ```
55
+ */
56
+ export function tracer<T extends () => any>(
57
+ name: string,
58
+ options?: Options,
59
+ ): Tracer<T>;
package/async.js CHANGED
@@ -1,93 +1 @@
1
- // src/async.ts
2
- const async_hooks = require('node:async_hooks');
3
- const { measure } = require('rian/utils');
4
- const { make, parse, SAMPLED_FLAG } = require('tctx');
5
-
6
- // src/_internal/index.ts
7
- const { is_sampled } = require('tctx');
8
- var resource = {};
9
- function configure(name, attributes = {}) {
10
- resource = {
11
- ...attributes,
12
- ["service.name"]: name,
13
- ["telemetry.sdk.name"]: "rian",
14
- ["telemetry.sdk.version"]: "0.3.0-next.9"
15
- };
16
- }
17
- var span_buffer = /* @__PURE__ */ new Set(), wait_promises = /* @__PURE__ */ new WeakMap();
18
- async function report(exporter) {
19
- let ps = [], scopes = /* @__PURE__ */ new Map();
20
- for (let [span2, scope] of span_buffer) {
21
- let spans;
22
- scopes.has(scope) ? spans = scopes.get(scope).spans : scopes.set(scope, {
23
- scope,
24
- spans: spans = []
25
- }), spans.push(span2), wait_promises.has(scope) && (ps.push(...wait_promises.get(scope)), wait_promises.delete(scope));
26
- }
27
- return span_buffer.clear(), ps.length && await Promise.all(ps), exporter({
28
- resource,
29
- scopeSpans: scopes.values()
30
- });
31
- }
32
- function defaultSampler(_name, id) {
33
- return is_sampled(id);
34
- }
35
-
36
- // src/async.ts
37
- var resourceStore = new async_hooks.AsyncLocalStorage();
38
- function currentSpan() {
39
- return resourceStore.getStore()?.[1] || null;
40
- }
41
- function span(name) {
42
- let context = resourceStore.getStore();
43
- if (!context)
44
- throw Error("TODO");
45
- let api = context[0], scope = api.scope, current_span = context[1], sampler = api.sampler, parent = current_span?.traceparent ?? api.root_id, id = parent ? parent.child() : make(), should_sample = typeof sampler != "boolean" ? sampler(name, id, scope) : sampler;
46
- should_sample ? id.flags | SAMPLED_FLAG : id.flags & ~SAMPLED_FLAG;
47
- let span_obj = {
48
- id,
49
- parent,
50
- start: Date.now(),
51
- name,
52
- events: [],
53
- context: {}
54
- };
55
- should_sample && span_buffer.add([span_obj, scope]);
56
- let $ = (cb) => resourceStore.run([api, $], measure, $, cb);
57
- $.traceparent = id, $.span = span, $.set_context = (ctx) => {
58
- if (typeof ctx == "function")
59
- return void (span_obj.context = ctx(span_obj.context));
60
- Object.assign(span_obj.context, ctx);
61
- }, $.add_event = (name2, attributes) => {
62
- span_obj.events.push({
63
- name: name2,
64
- timestamp: Date.now(),
65
- attributes: attributes || {}
66
- });
67
- }, $.end = () => {
68
- span_obj.end == null && (span_obj.end = Date.now());
69
- };
70
- let ps = wait_promises.get(scope);
71
- return $.__add_promise = (p) => {
72
- ps.add(p), p.then(() => ps.delete(p));
73
- }, resourceStore.run([api, $], () => $);
74
- }
75
- function tracer(name, options) {
76
- let sampler = options?.sampler ?? defaultSampler, scope = { name }, api = {
77
- root_id: typeof options?.traceparent == "string" ? parse(options.traceparent) : resourceStore.getStore()?.[0].root_id,
78
- scope,
79
- sampler
80
- };
81
- return wait_promises.set(scope, /* @__PURE__ */ new Set()), {
82
- span(name2) {
83
- return resourceStore.run([api, null], span, name2);
84
- }
85
- };
86
- }
87
-
88
-
89
- exports.configure = configure;
90
- exports.currentSpan = currentSpan;
91
- exports.report = report;
92
- exports.span = span;
93
- exports.tracer = tracer;
1
+ const e = require('node:async_hooks');const { measure:t } = require('rian/utils');const { make:n, parse:r, SAMPLED_FLAG:o } = require('tctx');const { is_sampled:a } = require('tctx');var s={};function c(e,t={}){s={...t,"service.name":e,"telemetry.sdk.name":"rian","telemetry.sdk.version":"0.3.1"}}var l=new Set,i=new WeakMap;async function p(e){let t=[],n=new Map;for(let[e,r]of l){let o;n.has(r)?o=n.get(r).spans:n.set(r,{scope:r,spans:o=[]}),o.push(e),i.has(r)&&(t.push(...i.get(r)),i.delete(r))}return l.clear(),t.length&&await Promise.all(t),e({resource:s,scopeSpans:n.values()})}function u(e,t){return a(t)}var d=new e.AsyncLocalStorage;function m(){let e=d.getStore()?.[1];if(null==e)throw new Error("no current span");return e}function f(e){let r=d.getStore();if(!r)throw Error("TODO");let o=r[0],a=o.scope,s=r[1],c=o.sampler,p=s?.traceparent??o.root_id,u=p?p.child():n(),m="boolean"!=typeof c?c(e,u,a):c;u.flags;let w={id:u,parent:p,start:o.clock.now(),name:e,events:[],context:{}};m&&l.add([w,a]);let g=e=>d.run([o,g],t,g,e);g.traceparent=u,g.span=e=>d.run([o,g],f,e),g.set_context=e=>{"function"!=typeof e?Object.assign(w.context,e):w.context=e(w.context)},g.add_event=(e,t)=>{w.events.push({name:e,timestamp:o.clock.now(),attributes:t||{}})},g.end=()=>{null==w.end&&(w.end=o.clock.now())};let h=i.get(a);return g.__add_promise=e=>{h.add(e),e.then((()=>h.delete(e)))},g}function w(e,t){let n=t?.sampler??u,o={name:e},a={root_id:"string"==typeof t?.traceparent?r(t.traceparent):void 0,scope:o,sampler:n,clock:t?.clock??Date};return i.set(o,new Set),function(e){let t=d.getStore();return a.root_id||(a.root_id=t?.[0].root_id),d.run([a,t?.[1]||null],e)}}exports.configure=c;exports.currentSpan=m;exports.report=p;exports.span=f;exports.tracer=w;
package/async.mjs CHANGED
@@ -1,93 +1 @@
1
- // src/async.ts
2
- import * as async_hooks from "node:async_hooks";
3
- import { measure } from "rian/utils";
4
- import { make, parse, SAMPLED_FLAG } from "tctx";
5
-
6
- // src/_internal/index.ts
7
- import { is_sampled } from "tctx";
8
- var resource = {};
9
- function configure(name, attributes = {}) {
10
- resource = {
11
- ...attributes,
12
- ["service.name"]: name,
13
- ["telemetry.sdk.name"]: "rian",
14
- ["telemetry.sdk.version"]: "0.3.0-next.9"
15
- };
16
- }
17
- var span_buffer = /* @__PURE__ */ new Set(), wait_promises = /* @__PURE__ */ new WeakMap();
18
- async function report(exporter) {
19
- let ps = [], scopes = /* @__PURE__ */ new Map();
20
- for (let [span2, scope] of span_buffer) {
21
- let spans;
22
- scopes.has(scope) ? spans = scopes.get(scope).spans : scopes.set(scope, {
23
- scope,
24
- spans: spans = []
25
- }), spans.push(span2), wait_promises.has(scope) && (ps.push(...wait_promises.get(scope)), wait_promises.delete(scope));
26
- }
27
- return span_buffer.clear(), ps.length && await Promise.all(ps), exporter({
28
- resource,
29
- scopeSpans: scopes.values()
30
- });
31
- }
32
- function defaultSampler(_name, id) {
33
- return is_sampled(id);
34
- }
35
-
36
- // src/async.ts
37
- var resourceStore = new async_hooks.AsyncLocalStorage();
38
- function currentSpan() {
39
- return resourceStore.getStore()?.[1] || null;
40
- }
41
- function span(name) {
42
- let context = resourceStore.getStore();
43
- if (!context)
44
- throw Error("TODO");
45
- let api = context[0], scope = api.scope, current_span = context[1], sampler = api.sampler, parent = current_span?.traceparent ?? api.root_id, id = parent ? parent.child() : make(), should_sample = typeof sampler != "boolean" ? sampler(name, id, scope) : sampler;
46
- should_sample ? id.flags | SAMPLED_FLAG : id.flags & ~SAMPLED_FLAG;
47
- let span_obj = {
48
- id,
49
- parent,
50
- start: Date.now(),
51
- name,
52
- events: [],
53
- context: {}
54
- };
55
- should_sample && span_buffer.add([span_obj, scope]);
56
- let $ = (cb) => resourceStore.run([api, $], measure, $, cb);
57
- $.traceparent = id, $.span = span, $.set_context = (ctx) => {
58
- if (typeof ctx == "function")
59
- return void (span_obj.context = ctx(span_obj.context));
60
- Object.assign(span_obj.context, ctx);
61
- }, $.add_event = (name2, attributes) => {
62
- span_obj.events.push({
63
- name: name2,
64
- timestamp: Date.now(),
65
- attributes: attributes || {}
66
- });
67
- }, $.end = () => {
68
- span_obj.end == null && (span_obj.end = Date.now());
69
- };
70
- let ps = wait_promises.get(scope);
71
- return $.__add_promise = (p) => {
72
- ps.add(p), p.then(() => ps.delete(p));
73
- }, resourceStore.run([api, $], () => $);
74
- }
75
- function tracer(name, options) {
76
- let sampler = options?.sampler ?? defaultSampler, scope = { name }, api = {
77
- root_id: typeof options?.traceparent == "string" ? parse(options.traceparent) : resourceStore.getStore()?.[0].root_id,
78
- scope,
79
- sampler
80
- };
81
- return wait_promises.set(scope, /* @__PURE__ */ new Set()), {
82
- span(name2) {
83
- return resourceStore.run([api, null], span, name2);
84
- }
85
- };
86
- }
87
- export {
88
- configure,
89
- currentSpan,
90
- report,
91
- span,
92
- tracer
93
- };
1
+ import*as e from"node:async_hooks";import{measure as t}from"rian/utils";import{make as n,parse as r,SAMPLED_FLAG as o}from"tctx";import{is_sampled as a}from"tctx";var s={};function c(e,t={}){s={...t,"service.name":e,"telemetry.sdk.name":"rian","telemetry.sdk.version":"0.3.1"}}var l=new Set,i=new WeakMap;async function p(e){let t=[],n=new Map;for(let[e,r]of l){let o;n.has(r)?o=n.get(r).spans:n.set(r,{scope:r,spans:o=[]}),o.push(e),i.has(r)&&(t.push(...i.get(r)),i.delete(r))}return l.clear(),t.length&&await Promise.all(t),e({resource:s,scopeSpans:n.values()})}function u(e,t){return a(t)}var d=new e.AsyncLocalStorage;function m(){let e=d.getStore()?.[1];if(null==e)throw new Error("no current span");return e}function f(e){let r=d.getStore();if(!r)throw Error("TODO");let o=r[0],a=o.scope,s=r[1],c=o.sampler,p=s?.traceparent??o.root_id,u=p?p.child():n(),m="boolean"!=typeof c?c(e,u,a):c;u.flags;let w={id:u,parent:p,start:o.clock.now(),name:e,events:[],context:{}};m&&l.add([w,a]);let g=e=>d.run([o,g],t,g,e);g.traceparent=u,g.span=e=>d.run([o,g],f,e),g.set_context=e=>{"function"!=typeof e?Object.assign(w.context,e):w.context=e(w.context)},g.add_event=(e,t)=>{w.events.push({name:e,timestamp:o.clock.now(),attributes:t||{}})},g.end=()=>{null==w.end&&(w.end=o.clock.now())};let h=i.get(a);return g.__add_promise=e=>{h.add(e),e.then((()=>h.delete(e)))},g}function w(e,t){let n=t?.sampler??u,o={name:e},a={root_id:"string"==typeof t?.traceparent?r(t.traceparent):void 0,scope:o,sampler:n,clock:t?.clock??Date};return i.set(o,new Set),function(e){let t=d.getStore();return a.root_id||(a.root_id=t?.[0].root_id),d.run([a,t?.[1]||null],e)}}export{c as configure,m as currentSpan,p as report,f as span,w as tracer};
@@ -1,77 +1 @@
1
- // src/exporter.otel.http.ts
2
- var convert_value_to_anyvalue = (value) => {
3
- let type = typeof value, any_value = {};
4
- return type === "string" ? any_value.stringValue = value : type === "number" ? Number.isInteger(value) ? any_value.intValue = value : any_value.doubleValue = value : type === "boolean" ? any_value.boolValue = value : Array.isArray(value) ? any_value.arrayValue = {
5
- values: value.map((i) => convert_value_to_anyvalue(i))
6
- } : value && (any_value.kvlistValue = { values: convert_object_to_kv(value) }), any_value;
7
- }, convert_object_to_kv = (input) => {
8
- let value = [];
9
- for (let key of Object.keys(input))
10
- value.push({
11
- key,
12
- value: convert_value_to_anyvalue(input[key])
13
- });
14
- return value;
15
- }, map_kind = (kind) => {
16
- switch (kind) {
17
- default:
18
- case "INTERNAL":
19
- return 1;
20
- case "SERVER":
21
- return 2;
22
- case "CLIENT":
23
- return 3;
24
- case "PRODUCER":
25
- return 4;
26
- case "CONSUMER":
27
- return 5;
28
- }
29
- }, exporter = (request) => (trace) => {
30
- let scopeSpans = [];
31
- for (let scope of trace.scopeSpans) {
32
- let spans = [];
33
- scopeSpans.push({
34
- scope: scope.scope,
35
- spans
36
- });
37
- for (let span of scope.spans) {
38
- let { kind, error, ...span_ctx } = span.context, status;
39
- error && (status = {
40
- code: 2
41
- }, "message" in error && (status.message = error.message)), spans.push({
42
- traceId: span.id.trace_id,
43
- spanId: span.id.parent_id,
44
- parentSpanId: span.parent?.parent_id,
45
- name: span.name,
46
- kind: map_kind(kind || "INTERNAL"),
47
- startTimeUnixNano: span.start * 1e6,
48
- endTimeUnixNano: span.end ? span.end * 1e6 : void 0,
49
- droppedAttributesCount: 0,
50
- droppedEventsCount: 0,
51
- droppedLinksCount: 0,
52
- attributes: convert_object_to_kv(span_ctx),
53
- status: status || { code: 0 },
54
- events: span.events.map((i) => ({
55
- name: i.name,
56
- attributes: convert_object_to_kv(i.attributes),
57
- droppedAttributesCount: 0,
58
- timeUnixNano: i.timestamp * 1e6
59
- }))
60
- });
61
- }
62
- }
63
- return request({
64
- resourceSpans: [
65
- {
66
- resource: {
67
- attributes: convert_object_to_kv(trace.resource),
68
- droppedAttributesCount: 0
69
- },
70
- scopeSpans
71
- }
72
- ]
73
- });
74
- };
75
-
76
-
77
- exports.exporter = exporter;
1
+ var e=r=>{let a=typeof r,s={};return"string"===a?s.stringValue=r:"number"===a?Number.isInteger(r)?s.intValue=r:s.doubleValue=r:"boolean"===a?s.boolValue=r:Array.isArray(r)?s.arrayValue={values:r.map((t=>e(t)))}:r&&(s.kvlistValue={values:t(r)}),s},t=t=>{let r=[];for(let a of Object.keys(t))r.push({key:a,value:e(t[a])});return r},r=e=>{switch(e){default:case"INTERNAL":return 1;case"SERVER":return 2;case"CLIENT":return 3;case"PRODUCER":return 4;case"CONSUMER":return 5}},a=e=>a=>{let s=[];for(let e of a.scopeSpans){let a=[];s.push({scope:e.scope,spans:a});for(let s of e.spans){let e,{kind:n,error:u,...o}=s.context;u&&(e={code:2},"message"in u&&(e.message=u.message)),a.push({traceId:s.id.trace_id,spanId:s.id.parent_id,parentSpanId:s.parent?.parent_id,name:s.name,kind:r(n||"INTERNAL"),startTimeUnixNano:1e6*s.start,endTimeUnixNano:s.end?1e6*s.end:void 0,droppedAttributesCount:0,droppedEventsCount:0,droppedLinksCount:0,attributes:t(o),status:e||{code:0},events:s.events.map((e=>({name:e.name,attributes:t(e.attributes),droppedAttributesCount:0,timeUnixNano:1e6*e.timestamp})))})}}return e({resourceSpans:[{resource:{attributes:t(a.resource),droppedAttributesCount:0},scopeSpans:s}]})};exports.exporter=a;
@@ -1,77 +1 @@
1
- // src/exporter.otel.http.ts
2
- var convert_value_to_anyvalue = (value) => {
3
- let type = typeof value, any_value = {};
4
- return type === "string" ? any_value.stringValue = value : type === "number" ? Number.isInteger(value) ? any_value.intValue = value : any_value.doubleValue = value : type === "boolean" ? any_value.boolValue = value : Array.isArray(value) ? any_value.arrayValue = {
5
- values: value.map((i) => convert_value_to_anyvalue(i))
6
- } : value && (any_value.kvlistValue = { values: convert_object_to_kv(value) }), any_value;
7
- }, convert_object_to_kv = (input) => {
8
- let value = [];
9
- for (let key of Object.keys(input))
10
- value.push({
11
- key,
12
- value: convert_value_to_anyvalue(input[key])
13
- });
14
- return value;
15
- }, map_kind = (kind) => {
16
- switch (kind) {
17
- default:
18
- case "INTERNAL":
19
- return 1;
20
- case "SERVER":
21
- return 2;
22
- case "CLIENT":
23
- return 3;
24
- case "PRODUCER":
25
- return 4;
26
- case "CONSUMER":
27
- return 5;
28
- }
29
- }, exporter = (request) => (trace) => {
30
- let scopeSpans = [];
31
- for (let scope of trace.scopeSpans) {
32
- let spans = [];
33
- scopeSpans.push({
34
- scope: scope.scope,
35
- spans
36
- });
37
- for (let span of scope.spans) {
38
- let { kind, error, ...span_ctx } = span.context, status;
39
- error && (status = {
40
- code: 2
41
- }, "message" in error && (status.message = error.message)), spans.push({
42
- traceId: span.id.trace_id,
43
- spanId: span.id.parent_id,
44
- parentSpanId: span.parent?.parent_id,
45
- name: span.name,
46
- kind: map_kind(kind || "INTERNAL"),
47
- startTimeUnixNano: span.start * 1e6,
48
- endTimeUnixNano: span.end ? span.end * 1e6 : void 0,
49
- droppedAttributesCount: 0,
50
- droppedEventsCount: 0,
51
- droppedLinksCount: 0,
52
- attributes: convert_object_to_kv(span_ctx),
53
- status: status || { code: 0 },
54
- events: span.events.map((i) => ({
55
- name: i.name,
56
- attributes: convert_object_to_kv(i.attributes),
57
- droppedAttributesCount: 0,
58
- timeUnixNano: i.timestamp * 1e6
59
- }))
60
- });
61
- }
62
- }
63
- return request({
64
- resourceSpans: [
65
- {
66
- resource: {
67
- attributes: convert_object_to_kv(trace.resource),
68
- droppedAttributesCount: 0
69
- },
70
- scopeSpans
71
- }
72
- ]
73
- });
74
- };
75
- export {
76
- exporter
77
- };
1
+ var e=r=>{let a=typeof r,s={};return"string"===a?s.stringValue=r:"number"===a?Number.isInteger(r)?s.intValue=r:s.doubleValue=r:"boolean"===a?s.boolValue=r:Array.isArray(r)?s.arrayValue={values:r.map((t=>e(t)))}:r&&(s.kvlistValue={values:t(r)}),s},t=t=>{let r=[];for(let a of Object.keys(t))r.push({key:a,value:e(t[a])});return r},r=e=>{switch(e){default:case"INTERNAL":return 1;case"SERVER":return 2;case"CLIENT":return 3;case"PRODUCER":return 4;case"CONSUMER":return 5}},a=e=>a=>{let s=[];for(let e of a.scopeSpans){let a=[];s.push({scope:e.scope,spans:a});for(let s of e.spans){let e,{kind:n,error:u,...o}=s.context;u&&(e={code:2},"message"in u&&(e.message=u.message)),a.push({traceId:s.id.trace_id,spanId:s.id.parent_id,parentSpanId:s.parent?.parent_id,name:s.name,kind:r(n||"INTERNAL"),startTimeUnixNano:1e6*s.start,endTimeUnixNano:s.end?1e6*s.end:void 0,droppedAttributesCount:0,droppedEventsCount:0,droppedLinksCount:0,attributes:t(o),status:e||{code:0},events:s.events.map((e=>({name:e.name,attributes:t(e.attributes),droppedAttributesCount:0,timeUnixNano:1e6*e.timestamp})))})}}return e({resourceSpans:[{resource:{attributes:t(a.resource),droppedAttributesCount:0},scopeSpans:s}]})};export{a as exporter};
@@ -1,41 +1 @@
1
- // src/exporter.zipkin.ts
2
- const { flattie } = require('flattie');
3
- var exporter = (request) => (trace) => {
4
- let zipkin = [];
5
- for (let scope of trace.scopeSpans)
6
- for (let span of scope.spans) {
7
- let { kind, error, ...span_ctx } = span.context;
8
- error && ("message" in error ? span_ctx.error = {
9
- name: error.name,
10
- message: error.message,
11
- stack: error.stack
12
- } : span_ctx.error = !0), zipkin.push({
13
- id: span.id.parent_id,
14
- traceId: span.id.trace_id,
15
- parentId: span.parent ? span.parent.parent_id : void 0,
16
- name: span.name,
17
- kind: kind === "INTERNAL" ? void 0 : kind,
18
- timestamp: span.start * 1e3,
19
- duration: span.end ? (span.end - span.start) * 1e3 : void 0,
20
- localEndpoint: {
21
- serviceName: `${trace.resource["service.name"]}@${scope.scope.name}`
22
- },
23
- tags: flattie(
24
- {
25
- ...trace.resource,
26
- ...span_ctx
27
- },
28
- ".",
29
- !0
30
- ),
31
- annotations: span.events.map((i) => ({
32
- value: `${i.name} :: ${JSON.stringify(i.attributes)}`,
33
- timestamp: i.timestamp * 1e3
34
- }))
35
- });
36
- }
37
- return request(zipkin);
38
- };
39
-
40
-
41
- exports.exporter = exporter;
1
+ const { flattie:e } = require('flattie');var t=t=>a=>{let r=[];for(let t of a.scopeSpans)for(let n of t.spans){let{kind:s,error:i,...o}=n.context;i&&(o.error=!("message"in i)||{name:i.name,message:i.message,stack:i.stack}),r.push({id:n.id.parent_id,traceId:n.id.trace_id,parentId:n.parent?n.parent.parent_id:void 0,name:n.name,kind:"INTERNAL"===s?void 0:s,timestamp:1e3*n.start,duration:n.end?1e3*(n.end-n.start):void 0,localEndpoint:{serviceName:`${a.resource["service.name"]}@${t.scope.name}`},tags:e({...a.resource,...o},".",!0),annotations:n.events.map((e=>({value:`${e.name} :: ${JSON.stringify(e.attributes)}`,timestamp:1e3*e.timestamp})))})}return t(r)};exports.exporter=t;
@@ -1,41 +1 @@
1
- // src/exporter.zipkin.ts
2
- import { flattie } from "flattie";
3
- var exporter = (request) => (trace) => {
4
- let zipkin = [];
5
- for (let scope of trace.scopeSpans)
6
- for (let span of scope.spans) {
7
- let { kind, error, ...span_ctx } = span.context;
8
- error && ("message" in error ? span_ctx.error = {
9
- name: error.name,
10
- message: error.message,
11
- stack: error.stack
12
- } : span_ctx.error = !0), zipkin.push({
13
- id: span.id.parent_id,
14
- traceId: span.id.trace_id,
15
- parentId: span.parent ? span.parent.parent_id : void 0,
16
- name: span.name,
17
- kind: kind === "INTERNAL" ? void 0 : kind,
18
- timestamp: span.start * 1e3,
19
- duration: span.end ? (span.end - span.start) * 1e3 : void 0,
20
- localEndpoint: {
21
- serviceName: `${trace.resource["service.name"]}@${scope.scope.name}`
22
- },
23
- tags: flattie(
24
- {
25
- ...trace.resource,
26
- ...span_ctx
27
- },
28
- ".",
29
- !0
30
- ),
31
- annotations: span.events.map((i) => ({
32
- value: `${i.name} :: ${JSON.stringify(i.attributes)}`,
33
- timestamp: i.timestamp * 1e3
34
- }))
35
- });
36
- }
37
- return request(zipkin);
38
- };
39
- export {
40
- exporter
41
- };
1
+ import{flattie as e}from"flattie";var t=t=>a=>{let r=[];for(let t of a.scopeSpans)for(let n of t.spans){let{kind:s,error:i,...o}=n.context;i&&(o.error=!("message"in i)||{name:i.name,message:i.message,stack:i.stack}),r.push({id:n.id.parent_id,traceId:n.id.trace_id,parentId:n.parent?n.parent.parent_id:void 0,name:n.name,kind:"INTERNAL"===s?void 0:s,timestamp:1e3*n.start,duration:n.end?1e3*(n.end-n.start):void 0,localEndpoint:{serviceName:`${a.resource["service.name"]}@${t.scope.name}`},tags:e({...a.resource,...o},".",!0),annotations:n.events.map((e=>({value:`${e.name} :: ${JSON.stringify(e.attributes)}`,timestamp:1e3*e.timestamp})))})}return t(r)};export{t as exporter};