feat: migrate to TypeScript, Spec Kit SDD, and lab observability stack #4
+1
-2
@@ -13,8 +13,7 @@ describe("greet", () => {
|
||||
});
|
||||
|
||||
it("main emits telemetry and logs greeting", async () => {
|
||||
process.env.OTEL_EXPORTER_OTLP_ENDPOINT =
|
||||
process.env.OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://127.0.0.1:4318";
|
||||
process.env.OTEL_EXPORTER_OTLP_ENDPOINT = "http://127.0.0.1:9";
|
||||
const logs: unknown[] = [];
|
||||
const original = console.log;
|
||||
console.log = (...args: unknown[]) => {
|
||||
|
||||
@@ -3,8 +3,7 @@ import test from "node:test";
|
||||
import { SeverityNumber, startTelemetry } from "./telemetry.js";
|
||||
|
||||
test("startTelemetry emits and shuts down without throwing", async () => {
|
||||
process.env.OTEL_EXPORTER_OTLP_ENDPOINT =
|
||||
process.env.OTEL_EXPORTER_OTLP_ENDPOINT ?? "http://127.0.0.1:4318";
|
||||
process.env.OTEL_EXPORTER_OTLP_ENDPOINT = "http://127.0.0.1:9";
|
||||
process.env.OTEL_SERVICE_NAME = "ticketlab-test";
|
||||
|
||||
const telemetry = startTelemetry("ticketlab-test");
|
||||
|
||||
+25
-10
@@ -71,21 +71,36 @@ export function startTelemetry(
|
||||
});
|
||||
logs.setGlobalLoggerProvider(loggerProvider);
|
||||
|
||||
const quiet = (p: Promise<unknown>) => p.catch(() => undefined);
|
||||
// ponytail: OTLP flush can hang when the collector is down; 1.5s ceiling, upgrade to exporter timeout config
|
||||
const bounded = async (work: Promise<unknown>) => {
|
||||
await Promise.race([
|
||||
work,
|
||||
new Promise<void>((resolve) => {
|
||||
setTimeout(resolve, 400);
|
||||
}),
|
||||
]);
|
||||
};
|
||||
|
||||
return {
|
||||
tracer: trace.getTracer(serviceName),
|
||||
meter: metrics.getMeter(serviceName),
|
||||
logger: logs.getLogger(serviceName),
|
||||
shutdown: async () => {
|
||||
await Promise.all([
|
||||
tracerProvider.forceFlush(),
|
||||
meterProvider.forceFlush(),
|
||||
loggerProvider.forceFlush(),
|
||||
]);
|
||||
await Promise.all([
|
||||
tracerProvider.shutdown(),
|
||||
meterProvider.shutdown(),
|
||||
loggerProvider.shutdown(),
|
||||
]);
|
||||
await bounded(
|
||||
Promise.all([
|
||||
quiet(tracerProvider.forceFlush()),
|
||||
quiet(meterProvider.forceFlush()),
|
||||
quiet(loggerProvider.forceFlush()),
|
||||
]),
|
||||
);
|
||||
await bounded(
|
||||
Promise.all([
|
||||
quiet(tracerProvider.shutdown()),
|
||||
quiet(meterProvider.shutdown()),
|
||||
quiet(loggerProvider.shutdown()),
|
||||
]),
|
||||
);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user