MCP Terminal Server

/** * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { SpanKind } from '@opentelemetry/api'; import { ExportResult } from '@opentelemetry/core'; import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base'; export class TestSpanExporter implements SpanExporter { exportedSpans: any[] = []; export( spans: ReadableSpan[], resultCallback: (result: ExportResult) => void ): void { this.exportedSpans.push(...spans.map((s) => this._exportInfo(s))); resultCallback({ code: 0 }); } shutdown(): Promise<void> { return this.forceFlush(); } private _exportInfo(span: ReadableSpan) { return { spanId: span.spanContext().spanId, traceId: span.spanContext().traceId, attributes: { ...span.attributes }, displayName: span.name, links: span.links, spanKind: SpanKind[span.kind], parentSpanId: span.parentSpanId, sameProcessAsParentSpan: { value: !span.spanContext().isRemote }, status: span.status, timeEvents: { timeEvent: span.events.map((e) => ({ annotation: { attributes: e.attributes ?? {}, description: e.name, }, })), }, }; } forceFlush(): Promise<void> { return Promise.resolve(); } }