mirror of
https://github.com/karakeep-app/karakeep.git
synced 2026-02-28 18:25:55 +01:00
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import type { DequeuedJob } from "@karakeep/shared/queueing";
|
|
import { getTracer, withSpan } from "@karakeep/shared-server";
|
|
|
|
const tracer = getTracer("@karakeep/workers");
|
|
|
|
type WorkerRunFn<TData, TResult = void> = (
|
|
job: DequeuedJob<TData>,
|
|
) => Promise<TResult>;
|
|
|
|
/**
|
|
* Wraps a worker run function with OpenTelemetry tracing.
|
|
* Creates a span for each job execution and automatically handles error recording.
|
|
*
|
|
* @param name - The name of the span (e.g., "feedWorker.run", "crawlerWorker.run")
|
|
* @param fn - The worker run function to wrap
|
|
* @returns A wrapped function that executes within a traced span
|
|
*
|
|
* @example
|
|
* ```ts
|
|
* const run = withWorkerTracing("feedWorker.run", async (job) => {
|
|
* // Your worker logic here
|
|
* });
|
|
* ```
|
|
*/
|
|
export function withWorkerTracing<TData, TResult = void>(
|
|
name: string,
|
|
fn: WorkerRunFn<TData, TResult>,
|
|
): WorkerRunFn<TData, TResult> {
|
|
return async (job: DequeuedJob<TData>): Promise<TResult> => {
|
|
return await withSpan(
|
|
tracer,
|
|
name,
|
|
{
|
|
attributes: {
|
|
"job.id": job.id,
|
|
"job.priority": job.priority,
|
|
"job.runNumber": job.runNumber,
|
|
},
|
|
},
|
|
() => fn(job),
|
|
);
|
|
};
|
|
}
|