mirror of
https://github.com/denoland/deno.git
synced 2024-12-11 18:17:48 -05:00
77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
||
|
|
||
|
import { assert, assertEquals } from "@std/assert";
|
||
|
import { TextLineStream } from "@std/streams/text-line-stream";
|
||
|
|
||
|
const logs = [];
|
||
|
const spans = [];
|
||
|
let child: Deno.ChildProcess;
|
||
|
|
||
|
Deno.serve(
|
||
|
{
|
||
|
port: 0,
|
||
|
async onListen({ port }) {
|
||
|
const command = new Deno.Command(Deno.execPath(), {
|
||
|
args: ["run", "-A", "--unstable-otel", "child.ts"],
|
||
|
env: {
|
||
|
OTEL_EXPORTER_OTLP_PROTOCOL: "http/json",
|
||
|
OTEL_EXPORTER_OTLP_ENDPOINT: `http://localhost:${port}`,
|
||
|
OTEL_BSP_SCHEDULE_DELAY: "10",
|
||
|
OTEL_BLRP_SCHEDULE_DELAY: "10",
|
||
|
},
|
||
|
stdin: "piped",
|
||
|
stdout: "piped",
|
||
|
stderr: "inherit",
|
||
|
});
|
||
|
child = command.spawn();
|
||
|
const lines = child.stdout
|
||
|
.pipeThrough(new TextDecoderStream())
|
||
|
.pipeThrough(new TextLineStream())
|
||
|
.getReader();
|
||
|
const line = await lines.read();
|
||
|
await fetch(`http://localhost:${line.value}/`);
|
||
|
},
|
||
|
async handler(req) {
|
||
|
try {
|
||
|
const body = await req.json();
|
||
|
if (body.resourceLogs) {
|
||
|
logs.push(...body.resourceLogs[0].scopeLogs[0].logRecords);
|
||
|
}
|
||
|
if (body.resourceSpans) {
|
||
|
spans.push(...body.resourceSpans[0].scopeSpans[0].spans);
|
||
|
}
|
||
|
|
||
|
if (logs.length > 2 && spans.length > 1) {
|
||
|
child.kill();
|
||
|
|
||
|
const inner = spans.find((s) => s.name === "inner span");
|
||
|
const outer = spans.find((s) => s.name === "outer span");
|
||
|
|
||
|
assertEquals(inner.traceId, outer.traceId);
|
||
|
assertEquals(inner.parentSpanId, outer.spanId);
|
||
|
|
||
|
assertEquals(logs[1].body.stringValue, "log 1\n");
|
||
|
assertEquals(logs[1].traceId, inner.traceId);
|
||
|
assertEquals(logs[1].spanId, inner.spanId);
|
||
|
|
||
|
assertEquals(logs[2].body.stringValue, "log 2\n");
|
||
|
assertEquals(logs[2].traceId, inner.traceId);
|
||
|
assertEquals(logs[2].spanId, inner.spanId);
|
||
|
|
||
|
console.log("processed");
|
||
|
Deno.exit(0);
|
||
|
}
|
||
|
|
||
|
return Response.json({ partialSuccess: {} }, { status: 200 });
|
||
|
} catch (e) {
|
||
|
console.error(e);
|
||
|
Deno.exit(1);
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
);
|
||
|
|
||
|
setTimeout(() => {
|
||
|
assert(false, "test did not finish in time");
|
||
|
}, 10e3);
|