rian 0.0.2-alpha.13 → 0.0.2-alpha.14

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.
@@ -57,17 +57,15 @@ const map_kind = (kind) => {
57
57
  const exporter = (config) => (spans, context) => {
58
58
  const otel_spans = [];
59
59
  for (let span of spans) {
60
- const kind = span.context.kind;
61
- delete span.context.kind;
60
+ const { kind, error, ...span_ctx } = span.context;
62
61
  let status;
63
- if ('error' in span.context) {
62
+ if (error) {
64
63
  status = {
65
64
  code: SpanStatusCode_ERROR,
66
65
  };
67
- if ('message' in span.context.error) {
68
- status.message = span.context.error.message;
66
+ if ('message' in error) {
67
+ status.message = error.message;
69
68
  }
70
- delete span.context.error;
71
69
  }
72
70
  otel_spans.push({
73
71
  traceId: span.id.trace_id,
@@ -80,7 +78,7 @@ const exporter = (config) => (spans, context) => {
80
78
  droppedAttributesCount: 0,
81
79
  droppedEventsCount: 0,
82
80
  droppedLinksCount: 0,
83
- attributes: convert_object_to_kv(span.context),
81
+ attributes: convert_object_to_kv(span_ctx),
84
82
  status: status || { code: SpanStatusCode_UNSET },
85
83
  });
86
84
  }
@@ -55,17 +55,15 @@ const map_kind = (kind) => {
55
55
  const exporter = (config) => (spans, context) => {
56
56
  const otel_spans = [];
57
57
  for (let span of spans) {
58
- const kind = span.context.kind;
59
- delete span.context.kind;
58
+ const { kind, error, ...span_ctx } = span.context;
60
59
  let status;
61
- if ('error' in span.context) {
60
+ if (error) {
62
61
  status = {
63
62
  code: SpanStatusCode_ERROR,
64
63
  };
65
- if ('message' in span.context.error) {
66
- status.message = span.context.error.message;
64
+ if ('message' in error) {
65
+ status.message = error.message;
67
66
  }
68
- delete span.context.error;
69
67
  }
70
68
  otel_spans.push({
71
69
  traceId: span.id.trace_id,
@@ -78,7 +76,7 @@ const exporter = (config) => (spans, context) => {
78
76
  droppedAttributesCount: 0,
79
77
  droppedEventsCount: 0,
80
78
  droppedLinksCount: 0,
81
- attributes: convert_object_to_kv(span.context),
79
+ attributes: convert_object_to_kv(span_ctx),
82
80
  status: status || { code: SpanStatusCode_UNSET },
83
81
  });
84
82
  }
@@ -5,31 +5,29 @@ const flattie = require('flattie');
5
5
  const exporter = (config) => (spans, context) => {
6
6
  const zipkin = [];
7
7
  for (let span of spans) {
8
- const kind = span.context.kind;
9
- delete span.context.kind;
10
- if ('error' in span.context) {
11
- const error = span.context.error;
8
+ const { kind, error, ...span_ctx } = span.context;
9
+ if (error) {
12
10
  if ('message' in error) {
13
- span.context.error = {
11
+ span_ctx.error = {
14
12
  name: error.name,
15
13
  message: error.message,
16
14
  stack: error.stack,
17
15
  };
18
16
  }
19
17
  else {
20
- span.context.error = true;
18
+ span_ctx.error = true;
21
19
  }
22
20
  }
23
21
  zipkin.push({
24
22
  id: span.id.parent_id,
25
23
  traceId: span.id.trace_id,
26
- parentId: span.parent?.parent_id,
24
+ parentId: span.parent ? span.parent.parent_id : undefined,
27
25
  name: span.name,
28
26
  kind: kind === 'INTERNAL' ? undefined : kind,
29
27
  timestamp: span.start * 1000,
30
28
  duration: span.end ? (span.end - span.start) * 1000 : undefined,
31
29
  localEndpoint: context.localEndpoint,
32
- tags: flattie.flattie(Object.assign({}, context, span.context), '.', true),
30
+ tags: flattie.flattie(Object.assign({}, context, span_ctx), '.', true),
33
31
  });
34
32
  }
35
33
  return config.onRequest(zipkin);
@@ -3,31 +3,29 @@ import { flattie } from 'flattie';
3
3
  const exporter = (config) => (spans, context) => {
4
4
  const zipkin = [];
5
5
  for (let span of spans) {
6
- const kind = span.context.kind;
7
- delete span.context.kind;
8
- if ('error' in span.context) {
9
- const error = span.context.error;
6
+ const { kind, error, ...span_ctx } = span.context;
7
+ if (error) {
10
8
  if ('message' in error) {
11
- span.context.error = {
9
+ span_ctx.error = {
12
10
  name: error.name,
13
11
  message: error.message,
14
12
  stack: error.stack,
15
13
  };
16
14
  }
17
15
  else {
18
- span.context.error = true;
16
+ span_ctx.error = true;
19
17
  }
20
18
  }
21
19
  zipkin.push({
22
20
  id: span.id.parent_id,
23
21
  traceId: span.id.trace_id,
24
- parentId: span.parent?.parent_id,
22
+ parentId: span.parent ? span.parent.parent_id : undefined,
25
23
  name: span.name,
26
24
  kind: kind === 'INTERNAL' ? undefined : kind,
27
25
  timestamp: span.start * 1000,
28
26
  duration: span.end ? (span.end - span.start) * 1000 : undefined,
29
27
  localEndpoint: context.localEndpoint,
30
- tags: flattie(Object.assign({}, context, span.context), '.', true),
28
+ tags: flattie(Object.assign({}, context, span_ctx), '.', true),
31
29
  });
32
30
  }
33
31
  return config.onRequest(zipkin);
package/index.d.ts CHANGED
@@ -79,7 +79,7 @@ interface Span {
79
79
  * An exporter is a method called when the parent scope ends, gets given a Set of all spans traced
80
80
  * during this execution.
81
81
  */
82
- declare type Exporter = (spans: ReadonlySet<Span>, context: Context) => any;
82
+ declare type Exporter = (spans: ReadonlySet<Readonly<Span>>, context: Context) => any;
83
83
  /**
84
84
  * @borrows {@link Span.context}
85
85
  */
@@ -118,12 +118,37 @@ interface CallableScope extends Scope {
118
118
  (cb: (scope: Omit<Scope, 'end'>) => void): ReturnType<typeof cb>;
119
119
  }
120
120
  interface Scope {
121
+ /**
122
+ * A W3C traceparent. One can .toString() this if you want to cross a network.
123
+ */
121
124
  traceparent: Traceparent;
125
+ /**
126
+ * Forks the span into a new child span.
127
+ */
122
128
  fork(name: string): CallableScope;
129
+ /**
130
+ * With a passed function — will start a span, and run the function, when the function finishes
131
+ * the span finishes.
132
+ *
133
+ * The measure method will return whatever the function is, so if it's a promise, it returns a
134
+ * promise and so on. Any error is caught and re thrown, and automatically tracked in the
135
+ * context under the `error` property.
136
+ *
137
+ * All promises are tracked, and awaited on a `tracer.end`
138
+ */
123
139
  measure<Fn extends MeasureFn>(name: string, fn: Fn, // TODO: fn doesnt see scope correctly
124
140
  ...args: RealMeasureFnParams<Parameters<Fn>>): ReturnType<Fn>;
125
- set_context(contextFn: (context: Context) => Context): void;
126
- set_context(context: Context): void;
141
+ /**
142
+ * Allows the span's context to be set. Passing an object will be `Object.assign`ed into the
143
+ * current context.
144
+ *
145
+ * Passing a function will be available to return a new context.
146
+ */
147
+ set_context(contextFn: Context | ((context: Context) => Context)): void;
148
+ /**
149
+ * Ends the current span — setting its `end` timestamp. Not calling this, will have its `end`
150
+ * timestamp nulled out — when the tracer ends.
151
+ */
127
152
  end(): void;
128
153
  }
129
154
  interface Tracer extends Omit<Scope, 'end'> {
package/index.js CHANGED
@@ -71,16 +71,16 @@ const sdk_object = {
71
71
  const create = (name, options) => {
72
72
  const spans = new Set();
73
73
  const promises = [];
74
+ const sampler = options.sampler || defaultSampler;
74
75
  const span = (name, parent) => {
75
- const should_sample = (options.sampler || defaultSampler)(name, parent, options.context);
76
+ const should_sample = sampler(name, parent, options.context);
76
77
  const id = parent
77
78
  ? parent.child(should_sample)
78
79
  : tctx__namespace.make(should_sample);
79
- const start = Date.now();
80
80
  const span_obj = {
81
81
  id,
82
82
  parent,
83
- start,
83
+ start: Date.now(),
84
84
  name,
85
85
  context: {},
86
86
  };
package/index.mjs CHANGED
@@ -49,16 +49,16 @@ const sdk_object = {
49
49
  const create = (name, options) => {
50
50
  const spans = new Set();
51
51
  const promises = [];
52
+ const sampler = options.sampler || defaultSampler;
52
53
  const span = (name, parent) => {
53
- const should_sample = (options.sampler || defaultSampler)(name, parent, options.context);
54
+ const should_sample = sampler(name, parent, options.context);
54
55
  const id = parent
55
56
  ? parent.child(should_sample)
56
57
  : tctx.make(should_sample);
57
- const start = Date.now();
58
58
  const span_obj = {
59
59
  id,
60
60
  parent,
61
- start,
61
+ start: Date.now(),
62
62
  name,
63
63
  context: {},
64
64
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rian",
3
- "version": "0.0.2-alpha.13",
3
+ "version": "0.0.2-alpha.14",
4
4
  "description": "A tracer for the edge",
5
5
  "keywords": [
6
6
  "TODO"