chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
# Redis
|
||||
|
||||
This is a simple package that is used to return a valid Redis client and provides an error callback. It will log and swallow errors if they're not handled.
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "@internal/tracing",
|
||||
"private": true,
|
||||
"version": "0.0.1",
|
||||
"main": "./src/index.ts",
|
||||
"types": "./src/index.ts",
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@opentelemetry/api": "1.9.1",
|
||||
"@opentelemetry/api-logs": "0.218.0",
|
||||
"@opentelemetry/semantic-conventions": "^1.41.1",
|
||||
"@trigger.dev/core": "workspace:*"
|
||||
},
|
||||
"scripts": {
|
||||
"typecheck": "tsc --noEmit"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
import {
|
||||
type Meter,
|
||||
context,
|
||||
metrics,
|
||||
propagation,
|
||||
ROOT_CONTEXT,
|
||||
SpanKind,
|
||||
SpanStatusCode,
|
||||
trace,
|
||||
ValueType,
|
||||
type Attributes,
|
||||
type Context,
|
||||
type Counter,
|
||||
type Gauge,
|
||||
type Histogram,
|
||||
type Meter as MeterType,
|
||||
type MetricOptions,
|
||||
type ObservableCounter,
|
||||
type ObservableGauge,
|
||||
type ObservableResult,
|
||||
type ObservableUpDownCounter,
|
||||
type Span,
|
||||
type SpanOptions,
|
||||
type Tracer,
|
||||
type UpDownCounter,
|
||||
} from "@opentelemetry/api";
|
||||
import { type Logger, SeverityNumber } from "@opentelemetry/api-logs";
|
||||
import { flattenAttributes } from "@trigger.dev/core/v3/utils/flattenAttributes";
|
||||
|
||||
export * from "@opentelemetry/semantic-conventions";
|
||||
|
||||
export type {
|
||||
Attributes,
|
||||
Counter,
|
||||
Gauge,
|
||||
Histogram,
|
||||
MeterType as Meter,
|
||||
MetricOptions,
|
||||
ObservableCounter,
|
||||
ObservableGauge,
|
||||
ObservableResult,
|
||||
ObservableUpDownCounter,
|
||||
Span,
|
||||
SpanOptions,
|
||||
Tracer,
|
||||
UpDownCounter,
|
||||
};
|
||||
export {
|
||||
context,
|
||||
metrics,
|
||||
propagation,
|
||||
ROOT_CONTEXT,
|
||||
SpanKind,
|
||||
SpanStatusCode,
|
||||
trace,
|
||||
ValueType,
|
||||
type Context,
|
||||
};
|
||||
|
||||
export function getTracer(name: string): Tracer {
|
||||
return trace.getTracer(name);
|
||||
}
|
||||
|
||||
export function getMeter(name: string): Meter {
|
||||
return metrics.getMeter(name);
|
||||
}
|
||||
|
||||
export async function startSpan<T>(
|
||||
tracer: Tracer | undefined,
|
||||
name: string,
|
||||
fn: (span: Span) => Promise<T>,
|
||||
options?: SpanOptions
|
||||
): Promise<T> {
|
||||
tracer ??= getTracer("default");
|
||||
|
||||
return tracer.startActiveSpan(name, options ?? {}, async (span) => {
|
||||
try {
|
||||
return await fn(span);
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
span.recordException(error);
|
||||
} else if (typeof error === "string") {
|
||||
span.recordException(new Error(error));
|
||||
} else {
|
||||
span.recordException(new Error(String(error)));
|
||||
}
|
||||
|
||||
span.setStatus({
|
||||
code: SpanStatusCode.ERROR,
|
||||
message: error instanceof Error ? error.message : String(error),
|
||||
});
|
||||
|
||||
throw error;
|
||||
} finally {
|
||||
span.end();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export function recordSpanError(span: Span, error: Error) {
|
||||
span.recordException(error);
|
||||
span.setStatus({
|
||||
code: SpanStatusCode.ERROR,
|
||||
message: error.message,
|
||||
});
|
||||
}
|
||||
|
||||
export async function emitDebugLog(
|
||||
logger: Logger,
|
||||
message: string,
|
||||
params: Record<string, unknown> = {}
|
||||
) {
|
||||
logger.emit({
|
||||
severityNumber: SeverityNumber.DEBUG,
|
||||
body: message,
|
||||
attributes: { ...flattenAttributes(params, "params") },
|
||||
});
|
||||
}
|
||||
|
||||
export async function emitInfoLog(
|
||||
logger: Logger,
|
||||
message: string,
|
||||
params: Record<string, unknown> = {}
|
||||
) {
|
||||
logger.emit({
|
||||
severityNumber: SeverityNumber.INFO,
|
||||
body: message,
|
||||
attributes: { ...flattenAttributes(params, "params") },
|
||||
});
|
||||
}
|
||||
|
||||
export async function emitErrorLog(
|
||||
logger: Logger,
|
||||
message: string,
|
||||
params: Record<string, unknown> = {}
|
||||
) {
|
||||
logger.emit({
|
||||
severityNumber: SeverityNumber.ERROR,
|
||||
body: message,
|
||||
attributes: { ...flattenAttributes(params, "params") },
|
||||
});
|
||||
}
|
||||
|
||||
export async function emitWarnLog(
|
||||
logger: Logger,
|
||||
message: string,
|
||||
params: Record<string, unknown> = {}
|
||||
) {
|
||||
logger.emit({
|
||||
severityNumber: SeverityNumber.WARN,
|
||||
body: message,
|
||||
attributes: { ...flattenAttributes(params, "params") },
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2019",
|
||||
"lib": ["ES2019", "DOM", "DOM.Iterable", "DOM.AsyncIterable"],
|
||||
"module": "Node16",
|
||||
"moduleResolution": "Node16",
|
||||
"moduleDetection": "force",
|
||||
"verbatimModuleSyntax": false,
|
||||
"types": ["vitest/globals"],
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"isolatedModules": true,
|
||||
"preserveWatchOutput": true,
|
||||
"skipLibCheck": true,
|
||||
"noEmit": true,
|
||||
"strict": true,
|
||||
"paths": {
|
||||
"@trigger.dev/core": ["../../packages/core/src/index"],
|
||||
"@trigger.dev/core/*": ["../../packages/core/src/*"]
|
||||
}
|
||||
},
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
Reference in New Issue
Block a user