diff --git a/apps/webapp/app/routes/otel.v1.logs.ts b/apps/webapp/app/routes/otel.v1.logs.ts index 0554a2942..88cf28589 100644 --- a/apps/webapp/app/routes/otel.v1.logs.ts +++ b/apps/webapp/app/routes/otel.v1.logs.ts @@ -1,13 +1,25 @@ -import { ActionFunctionArgs } from "@remix-run/server-runtime"; +import { ActionFunctionArgs, json } from "@remix-run/server-runtime"; import { ExportLogsServiceRequest, ExportLogsServiceResponse } from "@trigger.dev/otlp-importer"; import { otlpExporter } from "~/v3/otlpExporter.server"; export async function action({ request }: ActionFunctionArgs) { - const buffer = await request.arrayBuffer(); + const contentType = request.headers.get("content-type"); - const exportRequest = ExportLogsServiceRequest.decode(new Uint8Array(buffer)); + if (contentType === "application/json") { + const body = await request.json(); - const exportResponse = await otlpExporter.exportLogs(exportRequest); + const exportResponse = await otlpExporter.exportLogs(body as ExportLogsServiceRequest); - return new Response(ExportLogsServiceResponse.encode(exportResponse).finish(), { status: 200 }); + return json(exportResponse, { status: 200 }) + } else if (contentType === "application/x-protobuf") { + const buffer = await request.arrayBuffer(); + + const exportRequest = ExportLogsServiceRequest.decode(new Uint8Array(buffer)); + + const exportResponse = await otlpExporter.exportLogs(exportRequest); + + return new Response(ExportLogsServiceResponse.encode(exportResponse).finish(), { status: 200 }); + } else { + return new Response("Unsupported content type. Must be either application/x-protobuf or application/json", { status: 400 }); + } } diff --git a/apps/webapp/app/routes/otel.v1.traces.ts b/apps/webapp/app/routes/otel.v1.traces.ts index 2e0677877..9dfbfb64a 100644 --- a/apps/webapp/app/routes/otel.v1.traces.ts +++ b/apps/webapp/app/routes/otel.v1.traces.ts @@ -1,13 +1,25 @@ -import { ActionFunctionArgs } from "@remix-run/server-runtime"; +import { ActionFunctionArgs, json } from "@remix-run/server-runtime"; import { ExportTraceServiceRequest, ExportTraceServiceResponse } from "@trigger.dev/otlp-importer"; import { otlpExporter } from "~/v3/otlpExporter.server"; export async function action({ request }: ActionFunctionArgs) { - const buffer = await request.arrayBuffer(); + const contentType = request.headers.get("content-type"); - const exportRequest = ExportTraceServiceRequest.decode(new Uint8Array(buffer)); + if (contentType === "application/json") { + const body = await request.json(); - const exportResponse = await otlpExporter.exportTraces(exportRequest); + const exportResponse = await otlpExporter.exportTraces(body as ExportTraceServiceRequest); - return new Response(ExportTraceServiceResponse.encode(exportResponse).finish(), { status: 200 }); + return json(exportResponse, { status: 200 }) + } else if (contentType === "application/x-protobuf") { + const buffer = await request.arrayBuffer(); + + const exportRequest = ExportTraceServiceRequest.decode(new Uint8Array(buffer)); + + const exportResponse = await otlpExporter.exportTraces(exportRequest); + + return new Response(ExportTraceServiceResponse.encode(exportResponse).finish(), { status: 200 }); + } else { + return new Response("Unsupported content type. Must be either application/x-protobuf or application/json", { status: 400 }); + } } diff --git a/apps/webapp/app/v3/otlpExporter.server.ts b/apps/webapp/app/v3/otlpExporter.server.ts index 0696995c3..e233c6f80 100644 --- a/apps/webapp/app/v3/otlpExporter.server.ts +++ b/apps/webapp/app/v3/otlpExporter.server.ts @@ -35,7 +35,7 @@ class OTLPExporter { constructor( private readonly _eventRepository: EventRepository, private readonly _verbose: boolean - ) {} + ) { } async exportTraces(request: ExportTraceServiceRequest): Promise { this.#logExportTracesVerbose(request); @@ -109,7 +109,7 @@ class OTLPExporter { if (!triggerAttribute) return false; - return isBoolValue(triggerAttribute.value) ? triggerAttribute.value.value.boolValue : false; + return isBoolValue(triggerAttribute.value) ? triggerAttribute.value.boolValue : false; }); } @@ -123,7 +123,7 @@ class OTLPExporter { if (!attribute) return false; - return isBoolValue(attribute.value) ? attribute.value.value.boolValue : false; + return isBoolValue(attribute.value) ? attribute.value.boolValue : false; }); } } @@ -141,7 +141,7 @@ function convertLogsToCreateableEvents(resourceLog: ResourceLogs): Array