@ogcio/o11y-sdk-node
Version:
Opentelemetry standard instrumentation SDK for NodeJS based project
40 lines (39 loc) • 1.33 kB
JavaScript
import { propagation, } from "@opentelemetry/api";
import { CF_GEO_HEADERS, createGeoAttributesFromHeaders, geoBaggageKeys, } from "../../../sdk-core/lib/index.js";
export class GeoBaggagePropagator {
_headerMap;
_fields;
_precision;
constructor(options = {}) {
this._headerMap = options.headerMap ?? CF_GEO_HEADERS;
this._fields = Object.values(this._headerMap);
this._precision = options.precision;
}
extract(ctx, carrier, getter) {
const existingBaggage = propagation.getBaggage(ctx);
for (const key of geoBaggageKeys) {
if (existingBaggage?.getEntry(key))
return ctx;
}
const attrs = createGeoAttributesFromHeaders(carrier, {
getter,
precision: this._precision,
headerMap: this._headerMap,
});
if (Object.keys(attrs).length === 0)
return ctx;
let baggage = existingBaggage ?? propagation.createBaggage();
for (const [key, value] of Object.entries(attrs)) {
baggage = baggage.setEntry(key, { value });
}
return propagation.setBaggage(ctx, baggage);
}
inject(ctx, carrier, setter) {
void ctx;
void carrier;
void setter;
}
fields() {
return this._fields;
}
}