rsnext/packages/next/trace/report/index.ts
OJ Kwon 8d0561ebf8
feat(trace): postprocess trace reporter for datadog (#35032)
* feat(trace): include clocktime for span

* build(package): bump up devdependencies

* feat(trace): postprocess trace reporter for datadog

* build(package): update precompile pkgs

* update compiled

Co-authored-by: JJ Kasper <jj@jjsweb.site>
2022-03-08 08:15:09 -08:00

53 lines
1.1 KiB
TypeScript

import { SpanId } from '../shared'
import reportToTelemetry from './to-telemetry'
import reportToJson from './to-json'
type Reporter = {
flushAll: () => Promise<void> | void
report: (
spanName: string,
duration: number,
timestamp: number,
id: SpanId,
parentId?: SpanId,
attrs?: Object,
startTime?: number
) => void
}
class MultiReporter implements Reporter {
private reporters: Reporter[] = []
constructor(reporters: Reporter[]) {
this.reporters = reporters
}
async flushAll() {
await Promise.all(this.reporters.map((reporter) => reporter.flushAll()))
}
report(
spanName: string,
duration: number,
timestamp: number,
id: SpanId,
parentId?: SpanId,
attrs?: Object,
startTime?: number
) {
this.reporters.forEach((reporter) =>
reporter.report(
spanName,
duration,
timestamp,
id,
parentId,
attrs,
startTime
)
)
}
}
// JSON is always reported to allow for diagnostics
export const reporter = new MultiReporter([reportToJson, reportToTelemetry])