@grafana/faro-web-tracing
Version:
Faro web tracing implementation.
35 lines • 1.56 kB
JavaScript
import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
import { faro, getUrlFromResource, UserActionState } from '@grafana/faro-web-sdk';
export class FaroXhrInstrumentation extends XMLHttpRequestInstrumentation {
constructor(config = {}) {
super(config);
const self = this;
this.parentCreateSpan = self._createSpan.bind(this);
}
// Patching the parent's private method to handle url type string or URL
_patchOpen() {
return (original) => {
const plugin = this;
return function patchOpen(...args) {
let span;
try {
const method = args[0];
let url = getUrlFromResource(args[1]);
span = plugin.parentCreateSpan(this, url, method);
}
catch (error) {
faro.internalLogger.error(error);
}
const currentAction = faro.api.getActiveUserAction();
if (span &&
currentAction &&
(currentAction === null || currentAction === void 0 ? void 0 : currentAction.getState()) === UserActionState.Started) {
span.setAttribute('faro.action.user.name', currentAction.name);
span.setAttribute('faro.action.user.parentId', currentAction.parentId);
}
return original.apply(this, args);
};
};
}
}
//# sourceMappingURL=faroXhrInstrumentation.js.map