packages/fxa-shared/tracing/exporters/fxa-gcp.ts (41 lines of code) (raw):
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import {
TraceExporter as GcpTraceExporter,
TraceExporterOptions as GcpTraceExporterOptions,
} from '@google-cloud/opentelemetry-cloud-trace-exporter';
import { ExportResult } from '@opentelemetry/core';
import { ReadableSpan } from '@opentelemetry/sdk-trace-node';
import { TracingOpts } from '../config';
import { TracingPiiFilter } from '../pii-filters';
import { checkDuration } from './util';
import { ILogger } from '../../log';
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
/** Gcp exporter customized for FxA */
export class FxaGcpTraceExporter extends GcpTraceExporter {
constructor(
protected readonly filter?: TracingPiiFilter,
config?: GcpTraceExporterOptions
) {
super(config);
}
override export(
spans: ReadableSpan[],
resultCallback: (result: ExportResult) => void
) {
spans.forEach((x) => {
checkDuration(x);
this.filter?.filter(x);
});
return super.export(spans, resultCallback);
}
}
export function getGcpTraceExporter(
opts: TracingOpts,
filter?: TracingPiiFilter,
logger?: ILogger
) {
if (!opts.gcp?.enabled) {
return;
}
logger?.debug('Adding Gcp Trace Exporter');
const exporter = new FxaGcpTraceExporter(filter);
return exporter;
}