react-native-otel 0.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/LICENSE +20 -0
- package/README.md +37 -0
- package/lib/module/context/span-context.js +14 -0
- package/lib/module/context/span-context.js.map +1 -0
- package/lib/module/core/attributes.js +43 -0
- package/lib/module/core/attributes.js.map +1 -0
- package/lib/module/core/clock.js +8 -0
- package/lib/module/core/clock.js.map +1 -0
- package/lib/module/core/ids.js +16 -0
- package/lib/module/core/ids.js.map +1 -0
- package/lib/module/core/log-record.js +41 -0
- package/lib/module/core/log-record.js.map +1 -0
- package/lib/module/core/meter.js +70 -0
- package/lib/module/core/meter.js.map +1 -0
- package/lib/module/core/resource.js +20 -0
- package/lib/module/core/resource.js.map +1 -0
- package/lib/module/core/span.js +96 -0
- package/lib/module/core/span.js.map +1 -0
- package/lib/module/core/tracer.js +48 -0
- package/lib/module/core/tracer.js.map +1 -0
- package/lib/module/exporters/console-exporter.js +53 -0
- package/lib/module/exporters/console-exporter.js.map +1 -0
- package/lib/module/exporters/otlp-http-exporter.js +317 -0
- package/lib/module/exporters/otlp-http-exporter.js.map +1 -0
- package/lib/module/exporters/types.js +4 -0
- package/lib/module/exporters/types.js.map +1 -0
- package/lib/module/index.js +24 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/instrumentation/errors.js +63 -0
- package/lib/module/instrumentation/errors.js.map +1 -0
- package/lib/module/instrumentation/lifecycle.js +15 -0
- package/lib/module/instrumentation/lifecycle.js.map +1 -0
- package/lib/module/instrumentation/navigation.js +51 -0
- package/lib/module/instrumentation/navigation.js.map +1 -0
- package/lib/module/instrumentation/network.js +183 -0
- package/lib/module/instrumentation/network.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/react/OtelProvider.js +57 -0
- package/lib/module/react/OtelProvider.js.map +1 -0
- package/lib/module/react/useOtel.js +12 -0
- package/lib/module/react/useOtel.js.map +1 -0
- package/lib/module/sdk.js +127 -0
- package/lib/module/sdk.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/context/span-context.d.ts +9 -0
- package/lib/typescript/src/context/span-context.d.ts.map +1 -0
- package/lib/typescript/src/core/attributes.d.ts +6 -0
- package/lib/typescript/src/core/attributes.d.ts.map +1 -0
- package/lib/typescript/src/core/clock.d.ts +2 -0
- package/lib/typescript/src/core/clock.d.ts.map +1 -0
- package/lib/typescript/src/core/ids.d.ts +3 -0
- package/lib/typescript/src/core/ids.d.ts.map +1 -0
- package/lib/typescript/src/core/log-record.d.ts +15 -0
- package/lib/typescript/src/core/log-record.d.ts.map +1 -0
- package/lib/typescript/src/core/meter.d.ts +30 -0
- package/lib/typescript/src/core/meter.d.ts.map +1 -0
- package/lib/typescript/src/core/resource.d.ts +25 -0
- package/lib/typescript/src/core/resource.d.ts.map +1 -0
- package/lib/typescript/src/core/span.d.ts +77 -0
- package/lib/typescript/src/core/span.d.ts.map +1 -0
- package/lib/typescript/src/core/tracer.d.ts +21 -0
- package/lib/typescript/src/core/tracer.d.ts.map +1 -0
- package/lib/typescript/src/exporters/console-exporter.d.ts +17 -0
- package/lib/typescript/src/exporters/console-exporter.d.ts.map +1 -0
- package/lib/typescript/src/exporters/otlp-http-exporter.d.ts +58 -0
- package/lib/typescript/src/exporters/otlp-http-exporter.d.ts.map +1 -0
- package/lib/typescript/src/exporters/types.d.ts +25 -0
- package/lib/typescript/src/exporters/types.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +25 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/instrumentation/errors.d.ts +15 -0
- package/lib/typescript/src/instrumentation/errors.d.ts.map +1 -0
- package/lib/typescript/src/instrumentation/lifecycle.d.ts +3 -0
- package/lib/typescript/src/instrumentation/lifecycle.d.ts.map +1 -0
- package/lib/typescript/src/instrumentation/navigation.d.ts +7 -0
- package/lib/typescript/src/instrumentation/navigation.d.ts.map +1 -0
- package/lib/typescript/src/instrumentation/network.d.ts +33 -0
- package/lib/typescript/src/instrumentation/network.d.ts.map +1 -0
- package/lib/typescript/src/react/OtelProvider.d.ts +21 -0
- package/lib/typescript/src/react/OtelProvider.d.ts.map +1 -0
- package/lib/typescript/src/react/useOtel.d.ts +3 -0
- package/lib/typescript/src/react/useOtel.d.ts.map +1 -0
- package/lib/typescript/src/sdk.d.ts +50 -0
- package/lib/typescript/src/sdk.d.ts.map +1 -0
- package/package.json +125 -0
- package/src/context/span-context.ts +17 -0
- package/src/core/attributes.ts +61 -0
- package/src/core/clock.ts +5 -0
- package/src/core/ids.ts +15 -0
- package/src/core/log-record.ts +58 -0
- package/src/core/meter.ts +82 -0
- package/src/core/resource.ts +50 -0
- package/src/core/span.ts +161 -0
- package/src/core/tracer.ts +75 -0
- package/src/exporters/console-exporter.ts +89 -0
- package/src/exporters/otlp-http-exporter.ts +377 -0
- package/src/exporters/types.ts +29 -0
- package/src/index.ts +63 -0
- package/src/instrumentation/errors.ts +95 -0
- package/src/instrumentation/lifecycle.ts +17 -0
- package/src/instrumentation/navigation.ts +61 -0
- package/src/instrumentation/network.ts +253 -0
- package/src/react/OtelProvider.tsx +98 -0
- package/src/react/useOtel.ts +14 -0
- package/src/sdk.ts +179 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// ─── OTLP attribute value serialization ──────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
function toOtlpValue(value) {
|
|
6
|
+
if (typeof value === 'boolean') return {
|
|
7
|
+
boolValue: value
|
|
8
|
+
};
|
|
9
|
+
if (typeof value === 'string') return {
|
|
10
|
+
stringValue: value
|
|
11
|
+
};
|
|
12
|
+
if (typeof value === 'number') {
|
|
13
|
+
return Number.isInteger(value) ? {
|
|
14
|
+
intValue: String(value)
|
|
15
|
+
} : {
|
|
16
|
+
doubleValue: value
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (Array.isArray(value)) {
|
|
20
|
+
return {
|
|
21
|
+
arrayValue: {
|
|
22
|
+
values: value.map(toOtlpValue)
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
stringValue: String(value)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function toOtlpAttributes(attrs) {
|
|
31
|
+
return Object.entries(attrs).map(([key, value]) => ({
|
|
32
|
+
key,
|
|
33
|
+
value: toOtlpValue(value)
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Milliseconds → nanoseconds as string (exceeds JS safe integer range).
|
|
38
|
+
function msToNano(ms) {
|
|
39
|
+
return String(ms * 1_000_000);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ─── SpanKind + SpanStatus mappings ──────────────────────────────────────────
|
|
43
|
+
|
|
44
|
+
const SPAN_KIND = {
|
|
45
|
+
INTERNAL: 1,
|
|
46
|
+
SERVER: 2,
|
|
47
|
+
CLIENT: 3,
|
|
48
|
+
PRODUCER: 4,
|
|
49
|
+
CONSUMER: 5
|
|
50
|
+
};
|
|
51
|
+
const SPAN_STATUS_CODE = {
|
|
52
|
+
UNSET: 0,
|
|
53
|
+
OK: 1,
|
|
54
|
+
ERROR: 2
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// ─── Exporter ─────────────────────────────────────────────────────────────────
|
|
58
|
+
|
|
59
|
+
export class OtlpHttpExporter {
|
|
60
|
+
buffer = [];
|
|
61
|
+
constructor(options) {
|
|
62
|
+
this.tracesEndpoint = options.endpoint.replace(/\/$/, '') + '/v1/traces';
|
|
63
|
+
this.headers = {
|
|
64
|
+
'Content-Type': 'application/json',
|
|
65
|
+
...options.headers
|
|
66
|
+
};
|
|
67
|
+
this.batchSize = options.batchSize ?? 50;
|
|
68
|
+
const interval = options.flushIntervalMs ?? 30_000;
|
|
69
|
+
this.timer_ = setInterval(() => {
|
|
70
|
+
this.flush();
|
|
71
|
+
}, interval);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Called by OtelSDK.init() after buildResource() — not part of SpanExporter.
|
|
75
|
+
setResource(resource) {
|
|
76
|
+
this.resource_ = resource;
|
|
77
|
+
}
|
|
78
|
+
export(spans) {
|
|
79
|
+
this.buffer.push(...spans);
|
|
80
|
+
if (this.buffer.length >= this.batchSize) {
|
|
81
|
+
this.flush();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
flush() {
|
|
85
|
+
if (this.buffer.length === 0) return;
|
|
86
|
+
const batch = this.buffer.splice(0);
|
|
87
|
+
this.send(batch);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Clear the flush timer and send any remaining buffered spans.
|
|
91
|
+
destroy() {
|
|
92
|
+
if (this.timer_ !== undefined) {
|
|
93
|
+
clearInterval(this.timer_);
|
|
94
|
+
this.timer_ = undefined;
|
|
95
|
+
}
|
|
96
|
+
this.flush();
|
|
97
|
+
}
|
|
98
|
+
send(spans) {
|
|
99
|
+
const resourceAttrs = this.resource_ ? toOtlpAttributes(this.resource_) : [];
|
|
100
|
+
const body = JSON.stringify({
|
|
101
|
+
resourceSpans: [{
|
|
102
|
+
resource: {
|
|
103
|
+
attributes: resourceAttrs
|
|
104
|
+
},
|
|
105
|
+
scopeSpans: [{
|
|
106
|
+
scope: {
|
|
107
|
+
name: 'react-native-otel',
|
|
108
|
+
version: '0.1.0'
|
|
109
|
+
},
|
|
110
|
+
spans: spans.map(s => this.toOtlpSpan(s))
|
|
111
|
+
}]
|
|
112
|
+
}]
|
|
113
|
+
});
|
|
114
|
+
fetch(this.tracesEndpoint, {
|
|
115
|
+
method: 'POST',
|
|
116
|
+
headers: this.headers,
|
|
117
|
+
body
|
|
118
|
+
}).catch(() => {});
|
|
119
|
+
}
|
|
120
|
+
toOtlpSpan(span) {
|
|
121
|
+
return {
|
|
122
|
+
traceId: span.traceId,
|
|
123
|
+
spanId: span.spanId,
|
|
124
|
+
// Root spans must omit parentSpanId — empty string breaks trace tree assembly.
|
|
125
|
+
...(span.parentSpanId ? {
|
|
126
|
+
parentSpanId: span.parentSpanId
|
|
127
|
+
} : {}),
|
|
128
|
+
name: span.name,
|
|
129
|
+
kind: SPAN_KIND[span.kind] ?? 1,
|
|
130
|
+
startTimeUnixNano: msToNano(span.startTimeMs),
|
|
131
|
+
endTimeUnixNano: msToNano(span.endTimeMs ?? span.startTimeMs),
|
|
132
|
+
attributes: toOtlpAttributes(span.attributes),
|
|
133
|
+
events: span.events.map(event => ({
|
|
134
|
+
name: event.name,
|
|
135
|
+
timeUnixNano: msToNano(event.timestampMs),
|
|
136
|
+
attributes: toOtlpAttributes(event.attributes)
|
|
137
|
+
})),
|
|
138
|
+
droppedEventsCount: span.droppedEventsCount,
|
|
139
|
+
status: {
|
|
140
|
+
code: SPAN_STATUS_CODE[span.status] ?? 0,
|
|
141
|
+
// Omit message when empty — some parsers reject the empty string.
|
|
142
|
+
...(span.statusMessage ? {
|
|
143
|
+
message: span.statusMessage
|
|
144
|
+
} : {})
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// ─── Metric exporter ──────────────────────────────────────────────────────────
|
|
151
|
+
|
|
152
|
+
// OTLP aggregation temporality: 2 = CUMULATIVE
|
|
153
|
+
const AGGREGATION_TEMPORALITY_CUMULATIVE = 2;
|
|
154
|
+
export class OtlpHttpMetricExporter {
|
|
155
|
+
constructor(options) {
|
|
156
|
+
this.metricsEndpoint = options.endpoint.replace(/\/$/, '') + '/v1/metrics';
|
|
157
|
+
this.headers = {
|
|
158
|
+
'Content-Type': 'application/json',
|
|
159
|
+
...options.headers
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
setResource(resource) {
|
|
163
|
+
this.resource_ = resource;
|
|
164
|
+
}
|
|
165
|
+
export(metrics) {
|
|
166
|
+
if (metrics.length === 0) return;
|
|
167
|
+
this.send(metrics);
|
|
168
|
+
}
|
|
169
|
+
send(metrics) {
|
|
170
|
+
const resourceAttrs = this.resource_ ? toOtlpAttributes(this.resource_) : [];
|
|
171
|
+
|
|
172
|
+
// Group records by name so each unique metric name becomes one OTLP metric.
|
|
173
|
+
const byName = new Map();
|
|
174
|
+
for (const record of metrics) {
|
|
175
|
+
const group = byName.get(record.name);
|
|
176
|
+
if (group) {
|
|
177
|
+
group.push(record);
|
|
178
|
+
} else {
|
|
179
|
+
byName.set(record.name, [record]);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
const otlpMetrics = Array.from(byName.entries()).map(([name, records]) => {
|
|
183
|
+
const type = records[0]?.type;
|
|
184
|
+
|
|
185
|
+
// Counters → sum; histograms + gauges → gauge (no bucket data available).
|
|
186
|
+
if (type === 'counter') {
|
|
187
|
+
return {
|
|
188
|
+
name,
|
|
189
|
+
sum: {
|
|
190
|
+
dataPoints: records.map(r => ({
|
|
191
|
+
asDouble: r.value,
|
|
192
|
+
startTimeUnixNano: msToNano(r.timestampMs),
|
|
193
|
+
timeUnixNano: msToNano(r.timestampMs),
|
|
194
|
+
attributes: toOtlpAttributes(r.attributes)
|
|
195
|
+
})),
|
|
196
|
+
aggregationTemporality: AGGREGATION_TEMPORALITY_CUMULATIVE,
|
|
197
|
+
isMonotonic: true
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
name,
|
|
203
|
+
gauge: {
|
|
204
|
+
dataPoints: records.map(r => ({
|
|
205
|
+
asDouble: r.value,
|
|
206
|
+
timeUnixNano: msToNano(r.timestampMs),
|
|
207
|
+
attributes: toOtlpAttributes(r.attributes)
|
|
208
|
+
}))
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
});
|
|
212
|
+
const body = JSON.stringify({
|
|
213
|
+
resourceMetrics: [{
|
|
214
|
+
resource: {
|
|
215
|
+
attributes: resourceAttrs
|
|
216
|
+
},
|
|
217
|
+
scopeMetrics: [{
|
|
218
|
+
scope: {
|
|
219
|
+
name: 'react-native-otel',
|
|
220
|
+
version: '0.1.0'
|
|
221
|
+
},
|
|
222
|
+
metrics: otlpMetrics
|
|
223
|
+
}]
|
|
224
|
+
}]
|
|
225
|
+
});
|
|
226
|
+
fetch(this.metricsEndpoint, {
|
|
227
|
+
method: 'POST',
|
|
228
|
+
headers: this.headers,
|
|
229
|
+
body
|
|
230
|
+
}).catch(() => {});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// ─── Log exporter ─────────────────────────────────────────────────────────────
|
|
235
|
+
|
|
236
|
+
// OTLP severity number mapping (spec: https://opentelemetry.io/docs/specs/otel/logs/data-model/)
|
|
237
|
+
const LOG_SEVERITY_NUMBER = {
|
|
238
|
+
TRACE: 1,
|
|
239
|
+
DEBUG: 5,
|
|
240
|
+
INFO: 9,
|
|
241
|
+
WARN: 13,
|
|
242
|
+
ERROR: 17,
|
|
243
|
+
FATAL: 21
|
|
244
|
+
};
|
|
245
|
+
export class OtlpHttpLogExporter {
|
|
246
|
+
buffer = [];
|
|
247
|
+
constructor(options) {
|
|
248
|
+
this.logsEndpoint = options.endpoint.replace(/\/$/, '') + '/v1/logs';
|
|
249
|
+
this.headers = {
|
|
250
|
+
'Content-Type': 'application/json',
|
|
251
|
+
...options.headers
|
|
252
|
+
};
|
|
253
|
+
this.batchSize = options.batchSize ?? 50;
|
|
254
|
+
const interval = options.flushIntervalMs ?? 30_000;
|
|
255
|
+
this.timer_ = setInterval(() => {
|
|
256
|
+
this.flush();
|
|
257
|
+
}, interval);
|
|
258
|
+
}
|
|
259
|
+
setResource(resource) {
|
|
260
|
+
this.resource_ = resource;
|
|
261
|
+
}
|
|
262
|
+
export(logs) {
|
|
263
|
+
this.buffer.push(...logs);
|
|
264
|
+
if (this.buffer.length >= this.batchSize) {
|
|
265
|
+
this.flush();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
flush() {
|
|
269
|
+
if (this.buffer.length === 0) return;
|
|
270
|
+
const batch = this.buffer.splice(0);
|
|
271
|
+
this.send(batch);
|
|
272
|
+
}
|
|
273
|
+
destroy() {
|
|
274
|
+
if (this.timer_ !== undefined) {
|
|
275
|
+
clearInterval(this.timer_);
|
|
276
|
+
this.timer_ = undefined;
|
|
277
|
+
}
|
|
278
|
+
this.flush();
|
|
279
|
+
}
|
|
280
|
+
send(logs) {
|
|
281
|
+
const resourceAttrs = this.resource_ ? toOtlpAttributes(this.resource_) : [];
|
|
282
|
+
const body = JSON.stringify({
|
|
283
|
+
resourceLogs: [{
|
|
284
|
+
resource: {
|
|
285
|
+
attributes: resourceAttrs
|
|
286
|
+
},
|
|
287
|
+
scopeLogs: [{
|
|
288
|
+
scope: {
|
|
289
|
+
name: 'react-native-otel',
|
|
290
|
+
version: '0.1.0'
|
|
291
|
+
},
|
|
292
|
+
logRecords: logs.map(log => ({
|
|
293
|
+
timeUnixNano: msToNano(log.timestampMs),
|
|
294
|
+
severityNumber: LOG_SEVERITY_NUMBER[log.severity] ?? 9,
|
|
295
|
+
severityText: log.severity,
|
|
296
|
+
body: {
|
|
297
|
+
stringValue: log.body
|
|
298
|
+
},
|
|
299
|
+
...(log.traceId ? {
|
|
300
|
+
traceId: log.traceId
|
|
301
|
+
} : {}),
|
|
302
|
+
...(log.spanId ? {
|
|
303
|
+
spanId: log.spanId
|
|
304
|
+
} : {}),
|
|
305
|
+
attributes: toOtlpAttributes(log.attributes)
|
|
306
|
+
}))
|
|
307
|
+
}]
|
|
308
|
+
}]
|
|
309
|
+
});
|
|
310
|
+
fetch(this.logsEndpoint, {
|
|
311
|
+
method: 'POST',
|
|
312
|
+
headers: this.headers,
|
|
313
|
+
body
|
|
314
|
+
}).catch(() => {});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
//# sourceMappingURL=otlp-http-exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["toOtlpValue","value","boolValue","stringValue","Number","isInteger","intValue","String","doubleValue","Array","isArray","arrayValue","values","map","toOtlpAttributes","attrs","Object","entries","key","msToNano","ms","SPAN_KIND","INTERNAL","SERVER","CLIENT","PRODUCER","CONSUMER","SPAN_STATUS_CODE","UNSET","OK","ERROR","OtlpHttpExporter","buffer","constructor","options","tracesEndpoint","endpoint","replace","headers","batchSize","interval","flushIntervalMs","timer_","setInterval","flush","setResource","resource","resource_","export","spans","push","length","batch","splice","send","destroy","undefined","clearInterval","resourceAttrs","body","JSON","stringify","resourceSpans","attributes","scopeSpans","scope","name","version","s","toOtlpSpan","fetch","method","catch","span","traceId","spanId","parentSpanId","kind","startTimeUnixNano","startTimeMs","endTimeUnixNano","endTimeMs","events","event","timeUnixNano","timestampMs","droppedEventsCount","status","code","statusMessage","message","AGGREGATION_TEMPORALITY_CUMULATIVE","OtlpHttpMetricExporter","metricsEndpoint","metrics","byName","Map","record","group","get","set","otlpMetrics","from","records","type","sum","dataPoints","r","asDouble","aggregationTemporality","isMonotonic","gauge","resourceMetrics","scopeMetrics","LOG_SEVERITY_NUMBER","TRACE","DEBUG","INFO","WARN","FATAL","OtlpHttpLogExporter","logsEndpoint","logs","resourceLogs","scopeLogs","logRecords","log","severityNumber","severity","severityText"],"sourceRoot":"../../../src","sources":["exporters/otlp-http-exporter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["exporters/types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// SDK
|
|
4
|
+
export { otel } from "./sdk.js";
|
|
5
|
+
// Core
|
|
6
|
+
export { Span, NoopSpan } from "./core/span.js";
|
|
7
|
+
export { Tracer } from "./core/tracer.js";
|
|
8
|
+
export { Meter, Counter, Histogram, Gauge } from "./core/meter.js";
|
|
9
|
+
export { OtelLogger } from "./core/log-record.js";
|
|
10
|
+
// Context
|
|
11
|
+
export { spanContext } from "./context/span-context.js";
|
|
12
|
+
|
|
13
|
+
// Exporters
|
|
14
|
+
|
|
15
|
+
export { ConsoleSpanExporter, ConsoleMetricExporter, ConsoleLogExporter } from "./exporters/console-exporter.js";
|
|
16
|
+
export { OtlpHttpExporter, OtlpHttpMetricExporter, OtlpHttpLogExporter } from "./exporters/otlp-http-exporter.js";
|
|
17
|
+
// Instrumentation
|
|
18
|
+
export { createNavigationInstrumentation } from "./instrumentation/navigation.js";
|
|
19
|
+
export { createAxiosInstrumentation } from "./instrumentation/network.js";
|
|
20
|
+
export { installErrorInstrumentation } from "./instrumentation/errors.js";
|
|
21
|
+
// React
|
|
22
|
+
export { OtelProvider, OtelContext } from "./react/OtelProvider.js";
|
|
23
|
+
export { useOtel } from "./react/useOtel.js";
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["otel","Span","NoopSpan","Tracer","Meter","Counter","Histogram","Gauge","OtelLogger","spanContext","ConsoleSpanExporter","ConsoleMetricExporter","ConsoleLogExporter","OtlpHttpExporter","OtlpHttpMetricExporter","OtlpHttpLogExporter","createNavigationInstrumentation","createAxiosInstrumentation","installErrorInstrumentation","OtelProvider","OtelContext","useOtel"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA,SAASA,IAAI,QAAQ,UAAO;AAG5B;AACA,SAASC,IAAI,EAAEC,QAAQ,QAAQ,gBAAa;AAO5C,SAASC,MAAM,QAAQ,kBAAe;AACtC,SAASC,KAAK,EAAEC,OAAO,EAAEC,SAAS,EAAEC,KAAK,QAAQ,iBAAc;AAC/D,SAASC,UAAU,QAAQ,sBAAmB;AAK9C;AACA,SAASC,WAAW,QAAQ,2BAAwB;;AAEpD;;AAQA,SACEC,mBAAmB,EACnBC,qBAAqB,EACrBC,kBAAkB,QACb,iCAA8B;AACrC,SACEC,gBAAgB,EAChBC,sBAAsB,EACtBC,mBAAmB,QACd,mCAAgC;AAOvC;AACA,SAASC,+BAA+B,QAAQ,iCAA8B;AAE9E,SAASC,0BAA0B,QAAQ,8BAA2B;AAOtE,SAASC,2BAA2B,QAAQ,6BAA0B;AAGtE;AACA,SAASC,YAAY,EAAEC,WAAW,QAAQ,yBAAsB;AAEhE,SAASC,OAAO,QAAQ,oBAAiB","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { ATTR_EXCEPTION_MESSAGE, ATTR_EXCEPTION_STACKTRACE, ATTR_EXCEPTION_TYPE } from '@opentelemetry/semantic-conventions';
|
|
4
|
+
import { Span } from "../core/span.js";
|
|
5
|
+
const CRASH_KEY = '@react-native-otel/pending-crash';
|
|
6
|
+
|
|
7
|
+
// Serialized crash span shape for storage
|
|
8
|
+
|
|
9
|
+
export function installErrorInstrumentation(params) {
|
|
10
|
+
const {
|
|
11
|
+
tracer,
|
|
12
|
+
storage,
|
|
13
|
+
exporter
|
|
14
|
+
} = params;
|
|
15
|
+
|
|
16
|
+
// Flush any pending crash span from previous session
|
|
17
|
+
if (storage && exporter) {
|
|
18
|
+
const pending = storage.getSync(CRASH_KEY);
|
|
19
|
+
if (pending) {
|
|
20
|
+
try {
|
|
21
|
+
const crashRecord = JSON.parse(pending);
|
|
22
|
+
exporter.export([crashRecord]);
|
|
23
|
+
} catch {
|
|
24
|
+
// Ignore parse errors
|
|
25
|
+
}
|
|
26
|
+
storage.deleteSync(CRASH_KEY);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Wrap the global JS error handler
|
|
31
|
+
const originalHandler = ErrorUtils.getGlobalHandler?.();
|
|
32
|
+
ErrorUtils.setGlobalHandler((error, isFatal) => {
|
|
33
|
+
const span = tracer.startSpan(`crash.${error.name}`, {
|
|
34
|
+
kind: 'INTERNAL',
|
|
35
|
+
attributes: {
|
|
36
|
+
[ATTR_EXCEPTION_TYPE]: error.name,
|
|
37
|
+
[ATTR_EXCEPTION_MESSAGE]: error.message,
|
|
38
|
+
[ATTR_EXCEPTION_STACKTRACE]: error.stack ?? '',
|
|
39
|
+
'crash.is_fatal': isFatal ?? false // custom — no OTel equivalent
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
span.setStatus('ERROR', error.message);
|
|
43
|
+
span.end();
|
|
44
|
+
|
|
45
|
+
// Persist crash span synchronously for next session retrieval
|
|
46
|
+
if (isFatal && storage && span instanceof Span) {
|
|
47
|
+
const record = {
|
|
48
|
+
traceId: span.traceId,
|
|
49
|
+
spanId: span.spanId,
|
|
50
|
+
name: span.name,
|
|
51
|
+
startTimeMs: span.startTimeMs,
|
|
52
|
+
endTimeMs: span.endTimeMs ?? Date.now(),
|
|
53
|
+
attributes: span.attributes,
|
|
54
|
+
events: span.events,
|
|
55
|
+
status: span.status,
|
|
56
|
+
statusMessage: span.statusMessage
|
|
57
|
+
};
|
|
58
|
+
storage.setSync(CRASH_KEY, JSON.stringify(record));
|
|
59
|
+
}
|
|
60
|
+
originalHandler?.(error, isFatal);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ATTR_EXCEPTION_MESSAGE","ATTR_EXCEPTION_STACKTRACE","ATTR_EXCEPTION_TYPE","Span","CRASH_KEY","installErrorInstrumentation","params","tracer","storage","exporter","pending","getSync","crashRecord","JSON","parse","export","deleteSync","originalHandler","ErrorUtils","getGlobalHandler","setGlobalHandler","error","isFatal","span","startSpan","name","kind","attributes","message","stack","setStatus","end","record","traceId","spanId","startTimeMs","endTimeMs","Date","now","events","status","statusMessage","setSync","stringify"],"sourceRoot":"../../../src","sources":["instrumentation/errors.ts"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,yBAAyB,EACzBC,mBAAmB,QACd,qCAAqC;AAE5C,SAASC,IAAI,QAAQ,iBAAc;AAInC,MAAMC,SAAS,GAAG,kCAAkC;;AAUpD;;AAiBA,OAAO,SAASC,2BAA2BA,CAACC,MAI3C,EAAQ;EACP,MAAM;IAAEC,MAAM;IAAEC,OAAO;IAAEC;EAAS,CAAC,GAAGH,MAAM;;EAE5C;EACA,IAAIE,OAAO,IAAIC,QAAQ,EAAE;IACvB,MAAMC,OAAO,GAAGF,OAAO,CAACG,OAAO,CAACP,SAAS,CAAC;IAC1C,IAAIM,OAAO,EAAE;MACX,IAAI;QACF,MAAME,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACJ,OAAO,CAAoB;QAC1DD,QAAQ,CAACM,MAAM,CAAC,CAACH,WAAW,CAA4B,CAAC;MAC3D,CAAC,CAAC,MAAM;QACN;MAAA;MAEFJ,OAAO,CAACQ,UAAU,CAACZ,SAAS,CAAC;IAC/B;EACF;;EAEA;EACA,MAAMa,eAAe,GACnBC,UAAU,CACVC,gBAAgB,GAAG,CAAC;EAEtBD,UAAU,CAACE,gBAAgB,CAAC,CAACC,KAAY,EAAEC,OAAiB,KAAK;IAC/D,MAAMC,IAAI,GAAGhB,MAAM,CAACiB,SAAS,CAAC,SAASH,KAAK,CAACI,IAAI,EAAE,EAAE;MACnDC,IAAI,EAAE,UAAU;MAChBC,UAAU,EAAE;QACV,CAACzB,mBAAmB,GAAGmB,KAAK,CAACI,IAAI;QACjC,CAACzB,sBAAsB,GAAGqB,KAAK,CAACO,OAAO;QACvC,CAAC3B,yBAAyB,GAAGoB,KAAK,CAACQ,KAAK,IAAI,EAAE;QAC9C,gBAAgB,EAAEP,OAAO,IAAI,KAAK,CAAE;MACtC;IACF,CAAC,CAAC;IACFC,IAAI,CAACO,SAAS,CAAC,OAAO,EAAET,KAAK,CAACO,OAAO,CAAC;IACtCL,IAAI,CAACQ,GAAG,CAAC,CAAC;;IAEV;IACA,IAAIT,OAAO,IAAId,OAAO,IAAIe,IAAI,YAAYpB,IAAI,EAAE;MAC9C,MAAM6B,MAAuB,GAAG;QAC9BC,OAAO,EAAEV,IAAI,CAACU,OAAO;QACrBC,MAAM,EAAEX,IAAI,CAACW,MAAM;QACnBT,IAAI,EAAEF,IAAI,CAACE,IAAI;QACfU,WAAW,EAAEZ,IAAI,CAACY,WAAW;QAC7BC,SAAS,EAAEb,IAAI,CAACa,SAAS,IAAIC,IAAI,CAACC,GAAG,CAAC,CAAC;QACvCX,UAAU,EAAEJ,IAAI,CAACI,UAAqC;QACtDY,MAAM,EAAEhB,IAAI,CAACgB,MAAM;QACnBC,MAAM,EAAEjB,IAAI,CAACiB,MAAM;QACnBC,aAAa,EAAElB,IAAI,CAACkB;MACtB,CAAC;MACDjC,OAAO,CAACkC,OAAO,CAACtC,SAAS,EAAES,IAAI,CAAC8B,SAAS,CAACX,MAAM,CAAC,CAAC;IACpD;IAEAf,eAAe,GAAGI,KAAK,EAAEC,OAAO,CAAC;EACnC,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { AppState } from 'react-native';
|
|
4
|
+
import { spanContext } from "../context/span-context.js";
|
|
5
|
+
export function installLifecycleInstrumentation(meter) {
|
|
6
|
+
AppState.addEventListener('change', state => {
|
|
7
|
+
spanContext.current()?.addEvent(`app.lifecycle.${state}`, {
|
|
8
|
+
'app.state': state
|
|
9
|
+
});
|
|
10
|
+
if (state === 'background') {
|
|
11
|
+
meter.flush();
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AppState","spanContext","installLifecycleInstrumentation","meter","addEventListener","state","current","addEvent","flush"],"sourceRoot":"../../../src","sources":["instrumentation/lifecycle.ts"],"mappings":";;AACA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,SAASC,WAAW,QAAQ,4BAAyB;AAGrD,OAAO,SAASC,+BAA+BA,CAACC,KAAY,EAAQ;EAClEH,QAAQ,CAACI,gBAAgB,CAAC,QAAQ,EAAGC,KAAqB,IAAK;IAC7DJ,WAAW,CAACK,OAAO,CAAC,CAAC,EAAEC,QAAQ,CAAC,iBAAiBF,KAAK,EAAE,EAAE;MACxD,WAAW,EAAEA;IACf,CAAC,CAAC;IAEF,IAAIA,KAAK,KAAK,YAAY,EAAE;MAC1BF,KAAK,CAACK,KAAK,CAAC,CAAC;IACf;EACF,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { ATTR_APP_SCREEN_NAME } from '@opentelemetry/semantic-conventions/incubating';
|
|
4
|
+
import { spanContext } from "../context/span-context.js";
|
|
5
|
+
// Keyed by React Navigation route key — handles modals + tabs coexisting
|
|
6
|
+
const screenSpans = new Map();
|
|
7
|
+
export function createNavigationInstrumentation(tracer) {
|
|
8
|
+
return {
|
|
9
|
+
onRouteChange(currentName, previousName, currentKey, previousKey, params) {
|
|
10
|
+
// End previous screen span looked up by key (not stack pop)
|
|
11
|
+
if (previousKey) {
|
|
12
|
+
const prevSpan = screenSpans.get(previousKey);
|
|
13
|
+
if (prevSpan) {
|
|
14
|
+
prevSpan.end();
|
|
15
|
+
screenSpans.delete(previousKey);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Start new screen span
|
|
20
|
+
const span = tracer.startSpan(`screen.${currentName}`, {
|
|
21
|
+
kind: 'INTERNAL',
|
|
22
|
+
attributes: {
|
|
23
|
+
[ATTR_APP_SCREEN_NAME]: currentName,
|
|
24
|
+
// 'app.screen.name'
|
|
25
|
+
'app.screen.previous_name': previousName ?? '',
|
|
26
|
+
// custom
|
|
27
|
+
...(params ? {
|
|
28
|
+
'app.screen.params': JSON.stringify(params)
|
|
29
|
+
} : {}) // custom
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
screenSpans.set(currentKey, span);
|
|
33
|
+
spanContext.setCurrent(span);
|
|
34
|
+
},
|
|
35
|
+
endCurrentScreen() {
|
|
36
|
+
const current = spanContext.current();
|
|
37
|
+
if (current) {
|
|
38
|
+
current.end();
|
|
39
|
+
// Remove from map
|
|
40
|
+
for (const [key, span] of screenSpans.entries()) {
|
|
41
|
+
if (span === current) {
|
|
42
|
+
screenSpans.delete(key);
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
spanContext.setCurrent(undefined);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ATTR_APP_SCREEN_NAME","spanContext","screenSpans","Map","createNavigationInstrumentation","tracer","onRouteChange","currentName","previousName","currentKey","previousKey","params","prevSpan","get","end","delete","span","startSpan","kind","attributes","JSON","stringify","set","setCurrent","endCurrentScreen","current","key","entries","undefined"],"sourceRoot":"../../../src","sources":["instrumentation/navigation.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,gDAAgD;AAErF,SAASC,WAAW,QAAQ,4BAAyB;AAIrD;AACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAA0B,CAAC;AAEtD,OAAO,SAASC,+BAA+BA,CAACC,MAAc,EAAE;EAC9D,OAAO;IACLC,aAAaA,CACXC,WAAmB,EACnBC,YAAgC,EAChCC,UAAkB,EAClBC,WAA+B,EAC/BC,MAAgC,EAC1B;MACN;MACA,IAAID,WAAW,EAAE;QACf,MAAME,QAAQ,GAAGV,WAAW,CAACW,GAAG,CAACH,WAAW,CAAC;QAC7C,IAAIE,QAAQ,EAAE;UACZA,QAAQ,CAACE,GAAG,CAAC,CAAC;UACdZ,WAAW,CAACa,MAAM,CAACL,WAAW,CAAC;QACjC;MACF;;MAEA;MACA,MAAMM,IAAI,GAAGX,MAAM,CAACY,SAAS,CAAC,UAAUV,WAAW,EAAE,EAAE;QACrDW,IAAI,EAAE,UAAU;QAChBC,UAAU,EAAE;UACV,CAACnB,oBAAoB,GAAGO,WAAW;UAAE;UACrC,0BAA0B,EAAEC,YAAY,IAAI,EAAE;UAAE;UAChD,IAAIG,MAAM,GAAG;YAAE,mBAAmB,EAAES,IAAI,CAACC,SAAS,CAACV,MAAM;UAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE;QACtE;MACF,CAAC,CAAC;MAEFT,WAAW,CAACoB,GAAG,CAACb,UAAU,EAAEO,IAAI,CAAC;MACjCf,WAAW,CAACsB,UAAU,CAACP,IAAI,CAAC;IAC9B,CAAC;IAEDQ,gBAAgBA,CAAA,EAAS;MACvB,MAAMC,OAAO,GAAGxB,WAAW,CAACwB,OAAO,CAAC,CAAC;MACrC,IAAIA,OAAO,EAAE;QACXA,OAAO,CAACX,GAAG,CAAC,CAAC;QACb;QACA,KAAK,MAAM,CAACY,GAAG,EAAEV,IAAI,CAAC,IAAId,WAAW,CAACyB,OAAO,CAAC,CAAC,EAAE;UAC/C,IAAIX,IAAI,KAAKS,OAAO,EAAE;YACpBvB,WAAW,CAACa,MAAM,CAACW,GAAG,CAAC;YACvB;UACF;QACF;QACAzB,WAAW,CAACsB,UAAU,CAACK,SAAS,CAAC;MACnC;IACF;EACF,CAAC;AACH","ignoreList":[]}
|