opentelemetry-js/selenium-tests/pages/xhr/index.js

57 lines
1.6 KiB
JavaScript

'use strict';
import '../helper';
import { context, trace } from '@opentelemetry/api';
import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
import { loadOtel } from '../tracing';
const provider = loadOtel([
new XMLHttpRequestInstrumentation({
ignoreUrls: [/localhost:8090\/sockjs-node/],
propagateTraceHeaderCorsUrls: [
'https://httpstat.us/200',
],
clearTimingResources: true,
}),
]);
const webTracerWithZone = provider.getTracer('example-tracer-web');
const getData = (url) => new Promise((resolve, reject) => {
// eslint-disable-next-line no-undef
const req = new XMLHttpRequest();
req.open('GET', url, true);
req.setRequestHeader('Content-Type', 'application/json');
req.setRequestHeader('Accept', 'application/json');
req.onload = () => {
resolve();
};
req.onerror = () => {
reject();
};
req.send();
});
// example of keeping track of context between async operations
const prepareClickEvent = () => {
const url = 'https://httpstat.us/200';
const element = document.getElementById('button1');
const onClick = () => {
const singleSpan = webTracerWithZone.startSpan(`files-series-info`);
context.with(trace.setSpan(context.active(), singleSpan), () => {
getData(url).then((_data) => {
trace.getSpan(context.active()).addEvent('fetching-single-span-completed');
singleSpan.end();
}).finally(() => {
otel.OTELSeleniumDone();
});
});
};
element.addEventListener('click', onClick);
};
window.addEventListener('load', prepareClickEvent);