cherry-studio/packages/mcp-trace/trace-web/webTracer.ts
alickreborn0 3b123863b5
feat: Support LLM Tracing by Alibaba Cloud EDAS product (#7895)
* feat: add tracing modules

* Initial commit

* fix: problem

* fix: update trace web

* fix: trace view

* fix: trace view

* fix: fix some problem

* fix: knowledge and mcp trace

* feat: save trace to user home dir

* feat: open trace with electron browser window

* fix: root trace outputs

* feat: trace internationalization and add trace icon

* feat: add trace title

* feat: update

* package.json添加windows运行script

* feat: update window title

* fix: mcp trace param

* fix: error show

* fix: listTool result

* fix: merge error

* feat: add stream usage and response

* feat: change trace stream

* fix: change stream adapter

* fix: span detail show problem

* fix: process show by time

* fix: stream outputs

* fix: merge problem

* fix: stream outputs

* fix: output text

* fix: EDAS support text

* fix: change trace footer style

* fix: topicId is loaded multiple times

* fix: span reload problem & attribute with cache

* fix: refresh optimization

* Change Powered by text.

* resolve upstream conflicts

* fix: build-time type exception

* fix: exceptions not used when building

* fix: recend no trace

* fix: resend trace list

* fix: delete temporary files

* feat: trace for resend

* fix: trace for resend message with edit

* fix: directory structure and construction method of mcp-trace

* fix: change CRLF to LF

* fix: add function call outputs

* Revert "fix: change CRLF to LF"

* fix: reorganize multi-model display

* fix: append model trace binding topic

* fix: some problems

* fix: code optimization

* fix: delete async

* fix: UI optimization

* fix: sort import

---------

Co-authored-by: 崔顺发 <csf01409784@alibaba-inc.com>
Co-authored-by: 管鑫荣 <gxr01409783@alibaba-inc.com>
2025-07-20 14:53:35 +08:00

47 lines
1.9 KiB
TypeScript

import { W3CTraceContextPropagator } from '@opentelemetry/core'
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'
import { BatchSpanProcessor, ConsoleSpanExporter, SpanProcessor } from '@opentelemetry/sdk-trace-base'
import { WebTracerProvider } from '@opentelemetry/sdk-trace-web'
import { defaultConfig, TraceConfig } from '../trace-core/types/config'
import { TopicContextManager } from './TopicContextManager'
export const contextManager = new TopicContextManager()
export class WebTracer {
private static provider: WebTracerProvider
private static processor: SpanProcessor
static init(config?: TraceConfig, spanProcessor?: SpanProcessor) {
if (config) {
defaultConfig.serviceName = config.serviceName || defaultConfig.serviceName
defaultConfig.endpoint = config.endpoint || defaultConfig.endpoint
defaultConfig.headers = config.headers || defaultConfig.headers
defaultConfig.defaultTracerName = config.defaultTracerName || defaultConfig.defaultTracerName
}
this.processor = spanProcessor || new BatchSpanProcessor(this.getExporter())
this.provider = new WebTracerProvider({
spanProcessors: [this.processor]
})
this.provider.register({
propagator: new W3CTraceContextPropagator(),
contextManager: contextManager
})
}
private static getExporter() {
if (defaultConfig.endpoint) {
return new OTLPTraceExporter({
url: `${defaultConfig.endpoint}/v1/traces`,
headers: defaultConfig.headers
})
}
return new ConsoleSpanExporter()
}
}
export const startContext = contextManager.startContextForTopic.bind(contextManager)
export const getContext = contextManager.getContextForTopic.bind(contextManager)
export const endContext = contextManager.endContextForTopic.bind(contextManager)
export const cleanContext = contextManager.cleanContextForTopic.bind(contextManager)