@veryfront/ext-observability-opentelemetry 0.1.1040 → 0.1.1042
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/deno.js +1 -1
- package/esm/extensions/ext-observability-opentelemetry/src/index.d.ts +6 -0
- package/esm/extensions/ext-observability-opentelemetry/src/index.d.ts.map +1 -1
- package/esm/extensions/ext-observability-opentelemetry/src/index.js +109 -7
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +2 -2
package/esm/deno.js
CHANGED
|
@@ -64,6 +64,12 @@ export declare function unifiedServiceResourceAttributes(options: {
|
|
|
64
64
|
export declare function logAttributes(record: NodeTelemetryLogRecord): Record<string, string | number | boolean>;
|
|
65
65
|
export declare function resolveOtlpSignalUrl(endpoint: string | undefined, signal: "traces" | "metrics" | "logs"): string | undefined;
|
|
66
66
|
export declare function resolveOtlpExtensionConfig(read?: EnvReader): ResolvedOtlpExtensionConfig;
|
|
67
|
+
type LlmObservabilityServiceIdentity = {
|
|
68
|
+
serviceName: string;
|
|
69
|
+
serviceVersion: string;
|
|
70
|
+
deploymentEnvironment: string;
|
|
71
|
+
};
|
|
72
|
+
export declare function rewriteLlmObservabilitySpanResource(span: unknown, fallback?: LlmObservabilityServiceIdentity): unknown;
|
|
67
73
|
declare class OtlpTracingExporter implements TracingExporter {
|
|
68
74
|
private sdkProvider;
|
|
69
75
|
private meterProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-observability-opentelemetry/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,4BAA4B,CAAC;AAKpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,EACR,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAG5C;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpD;AA4BD,KAAK,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AACpF,KAAK,QAAQ,GAAG;IACd,aAAa,IAAI,OAAO,CAAC;IACzB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC;IAC/B,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CAC/C,CAAC;AACF,KAAK,UAAU,GAAG;IAChB,MAAM,IAAI,OAAO,CAAC;IAClB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CACvC,CAAC;AAgHF,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;IACjC,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,2BAA2B,EAAE,MAAM,CAAC;IACpC,4BAA4B,EAAE,OAAO,GAAG,YAAY,GAAG,WAAW,CAAC;CACpE;AA6ED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUzB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/extensions/ext-observability-opentelemetry/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,4BAA4B,CAAC;AAKpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EACV,8BAA8B,EAC9B,sBAAsB,EACtB,qBAAqB,EACrB,QAAQ,EACR,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAG5C;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACpD;AA4BD,KAAK,UAAU,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AACpF,KAAK,QAAQ,GAAG;IACd,aAAa,IAAI,OAAO,CAAC;IACzB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC;IAC/B,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;CAC/C,CAAC;AACF,KAAK,UAAU,GAAG;IAChB,MAAM,IAAI,OAAO,CAAC;IAClB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;CACvC,CAAC;AAgHF,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;IACjC,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,2BAA2B,EAAE,MAAM,CAAC;IACpC,4BAA4B,EAAE,OAAO,GAAG,YAAY,GAAG,WAAW,CAAC;CACpE;AA6ED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUzB;AAwKD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,sBAAsB,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAkC3C;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GACpC,MAAM,GAAG,SAAS,CAKpB;AAqCD,wBAAgB,0BAA0B,CACxC,IAAI,GAAE,SAAmB,GACxB,2BAA2B,CA0D7B;AA0BD,KAAK,+BAA+B,GAAG;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAmGF,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,OAAO,EACb,QAAQ,CAAC,EAAE,+BAA+B,GACzC,OAAO,CAcT;AA6CD,cAAM,mBAAoB,YAAW,eAAe;IAClD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,gBAAgB,CAA2D;IAE7E,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0KzD,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B/B,WAAW,IAAI,kBAAkB;IAKjC,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC,WAAW,IAAI,QAAQ,GAAG,IAAI;IAI9B,aAAa,IAAI,UAAU,GAAG,IAAI;IAIlC,mBAAmB,IAAI,CAAC,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC,GAAG,IAAI;CAGzE;AAED,cAAM,kCAAmC,YAAW,qBAAqB;IACvE,OAAO,CAAC,GAAG,CAA8C;IAEnD,UAAU,CAAC,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,OAAO,CAAC;IAmJrE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAQhC;AAED;;;;;GAKG;AACH,QAAA,MAAM,gBAAgB,EAAE,gBAgEvB,CAAC;AAEF,eAAe,gBAAgB,CAAC;AAChC,OAAO,EAAE,kCAAkC,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -195,7 +195,7 @@ function resolveLlmObservabilityEnabled(read, tracesHeaders) {
|
|
|
195
195
|
return explicitFlag;
|
|
196
196
|
return getHeaderValue(tracesHeaders, "dd-otlp-source") === "llmobs";
|
|
197
197
|
}
|
|
198
|
-
function resolveLlmObservabilityHeaders(read, tracesHeaders) {
|
|
198
|
+
function resolveLlmObservabilityHeaders(read, tracesHeaders, mlAppFallback) {
|
|
199
199
|
const headers = { ...tracesHeaders };
|
|
200
200
|
const datadogApiKey = getHeaderValue(headers, "dd-api-key") ??
|
|
201
201
|
read("DD_API_KEY") ??
|
|
@@ -204,7 +204,9 @@ function resolveLlmObservabilityHeaders(read, tracesHeaders) {
|
|
|
204
204
|
setHeaderValue(headers, "dd-api-key", datadogApiKey);
|
|
205
205
|
}
|
|
206
206
|
setHeaderValue(headers, "dd-otlp-source", "llmobs");
|
|
207
|
-
const mlApp = read("DD_LLMOBS_ML_APP")
|
|
207
|
+
const mlApp = read("DD_LLMOBS_ML_APP")?.trim() ||
|
|
208
|
+
getHeaderValue(headers, "dd-ml-app")?.trim() ||
|
|
209
|
+
mlAppFallback?.trim();
|
|
208
210
|
if (mlApp) {
|
|
209
211
|
setHeaderValue(headers, "dd-ml-app", mlApp);
|
|
210
212
|
}
|
|
@@ -383,11 +385,14 @@ export function resolveOtlpExtensionConfig(read = readEnv) {
|
|
|
383
385
|
const tracesHeaders = mergeHeaders(headers, parseHeaders(read("OTEL_EXPORTER_OTLP_TRACES_HEADERS")));
|
|
384
386
|
const metricsHeaders = mergeHeaders(headers, parseHeaders(read("OTEL_EXPORTER_OTLP_METRICS_HEADERS")));
|
|
385
387
|
const logsHeaders = mergeHeaders(headers, parseHeaders(read("OTEL_EXPORTER_OTLP_LOGS_HEADERS")));
|
|
386
|
-
const
|
|
388
|
+
const serviceName = resolveServiceName(read, resourceAttributes);
|
|
389
|
+
const serviceVersion = resolveServiceVersion(read, resourceAttributes);
|
|
390
|
+
const deploymentEnvironment = resolveDeploymentEnvironment(read, resourceAttributes);
|
|
391
|
+
const llmObservabilityHeaders = resolveLlmObservabilityHeaders(read, tracesHeaders, serviceName);
|
|
387
392
|
return {
|
|
388
|
-
serviceName
|
|
389
|
-
serviceVersion
|
|
390
|
-
deploymentEnvironment
|
|
393
|
+
serviceName,
|
|
394
|
+
serviceVersion,
|
|
395
|
+
deploymentEnvironment,
|
|
391
396
|
headers,
|
|
392
397
|
tracesHeaders,
|
|
393
398
|
metricsHeaders,
|
|
@@ -411,6 +416,103 @@ function isGenAiSpan(span) {
|
|
|
411
416
|
const attributes = span.attributes;
|
|
412
417
|
return typeof attributes?.["gen_ai.operation.name"] === "string";
|
|
413
418
|
}
|
|
419
|
+
function getStringAttribute(attributes, key) {
|
|
420
|
+
const value = attributes?.[key];
|
|
421
|
+
if (typeof value !== "string")
|
|
422
|
+
return undefined;
|
|
423
|
+
const trimmed = value.trim();
|
|
424
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
425
|
+
}
|
|
426
|
+
function getSpanTraceId(span) {
|
|
427
|
+
const context = span.spanContext;
|
|
428
|
+
const spanContext = typeof context === "function" ? context.call(span) : context;
|
|
429
|
+
return typeof spanContext?.traceId === "string" ? spanContext.traceId : undefined;
|
|
430
|
+
}
|
|
431
|
+
function resolveLlmObservabilityServiceIdentity(span, fallback) {
|
|
432
|
+
const readableSpan = span;
|
|
433
|
+
const spanAttributes = readableSpan.attributes;
|
|
434
|
+
const resourceAttributes = readableSpan.resource?.attributes;
|
|
435
|
+
const serviceName = getStringAttribute(spanAttributes, "service.name") ??
|
|
436
|
+
getStringAttribute(spanAttributes, "service") ??
|
|
437
|
+
fallback?.serviceName;
|
|
438
|
+
if (!serviceName)
|
|
439
|
+
return null;
|
|
440
|
+
const serviceVersion = getStringAttribute(spanAttributes, "service.version") ??
|
|
441
|
+
getStringAttribute(spanAttributes, "version") ??
|
|
442
|
+
fallback?.serviceVersion ??
|
|
443
|
+
getStringAttribute(resourceAttributes, "service.version") ??
|
|
444
|
+
getStringAttribute(resourceAttributes, "version") ??
|
|
445
|
+
VERSION;
|
|
446
|
+
const deploymentEnvironment = getStringAttribute(spanAttributes, "deployment.environment.name") ??
|
|
447
|
+
getStringAttribute(spanAttributes, "deployment.environment") ??
|
|
448
|
+
getStringAttribute(spanAttributes, "env") ??
|
|
449
|
+
fallback?.deploymentEnvironment ??
|
|
450
|
+
getStringAttribute(resourceAttributes, "deployment.environment.name") ??
|
|
451
|
+
getStringAttribute(resourceAttributes, "deployment.environment") ??
|
|
452
|
+
getStringAttribute(resourceAttributes, "env") ??
|
|
453
|
+
"development";
|
|
454
|
+
return { serviceName, serviceVersion, deploymentEnvironment };
|
|
455
|
+
}
|
|
456
|
+
function cloneResourceWithAttributes(resource, attributes) {
|
|
457
|
+
if (!resource)
|
|
458
|
+
return { attributes };
|
|
459
|
+
const clone = Object.create(Object.getPrototypeOf(resource));
|
|
460
|
+
Object.defineProperties(clone, Object.getOwnPropertyDescriptors(resource));
|
|
461
|
+
Object.defineProperty(clone, "attributes", {
|
|
462
|
+
configurable: true,
|
|
463
|
+
enumerable: true,
|
|
464
|
+
writable: true,
|
|
465
|
+
value: {
|
|
466
|
+
...(resource.attributes ?? {}),
|
|
467
|
+
...attributes,
|
|
468
|
+
},
|
|
469
|
+
});
|
|
470
|
+
return clone;
|
|
471
|
+
}
|
|
472
|
+
function cloneInstrumentationScopeWithName(instrumentationScope, name) {
|
|
473
|
+
return {
|
|
474
|
+
...(instrumentationScope ?? {}),
|
|
475
|
+
name,
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
function cloneReadableSpanWithResource(span, resource, instrumentationScope) {
|
|
479
|
+
const clone = Object.create(Object.getPrototypeOf(span));
|
|
480
|
+
Object.defineProperties(clone, Object.getOwnPropertyDescriptors(span));
|
|
481
|
+
Object.defineProperty(clone, "resource", {
|
|
482
|
+
configurable: true,
|
|
483
|
+
enumerable: true,
|
|
484
|
+
writable: true,
|
|
485
|
+
value: resource,
|
|
486
|
+
});
|
|
487
|
+
Object.defineProperty(clone, "instrumentationScope", {
|
|
488
|
+
configurable: true,
|
|
489
|
+
enumerable: true,
|
|
490
|
+
writable: true,
|
|
491
|
+
value: instrumentationScope,
|
|
492
|
+
});
|
|
493
|
+
return clone;
|
|
494
|
+
}
|
|
495
|
+
export function rewriteLlmObservabilitySpanResource(span, fallback) {
|
|
496
|
+
const identity = resolveLlmObservabilityServiceIdentity(span, fallback);
|
|
497
|
+
if (!identity)
|
|
498
|
+
return span;
|
|
499
|
+
const readableSpan = span;
|
|
500
|
+
const resource = cloneResourceWithAttributes(readableSpan.resource, unifiedServiceResourceAttributes(identity));
|
|
501
|
+
const instrumentationScope = cloneInstrumentationScopeWithName(readableSpan.instrumentationScope, identity.serviceName);
|
|
502
|
+
return cloneReadableSpanWithResource(span, resource, instrumentationScope);
|
|
503
|
+
}
|
|
504
|
+
function rewriteLlmObservabilitySpanResources(spans) {
|
|
505
|
+
const identitiesByTraceId = new Map();
|
|
506
|
+
for (const span of spans) {
|
|
507
|
+
const traceId = getSpanTraceId(span);
|
|
508
|
+
if (!traceId)
|
|
509
|
+
continue;
|
|
510
|
+
const identity = resolveLlmObservabilityServiceIdentity(span);
|
|
511
|
+
if (identity)
|
|
512
|
+
identitiesByTraceId.set(traceId, identity);
|
|
513
|
+
}
|
|
514
|
+
return spans.map((span) => rewriteLlmObservabilitySpanResource(span, identitiesByTraceId.get(getSpanTraceId(span) ?? "")));
|
|
515
|
+
}
|
|
414
516
|
class FilteringSpanExporter {
|
|
415
517
|
delegate;
|
|
416
518
|
includeSpan;
|
|
@@ -421,7 +523,7 @@ class FilteringSpanExporter {
|
|
|
421
523
|
this.successCode = successCode;
|
|
422
524
|
}
|
|
423
525
|
export(spans, resultCallback) {
|
|
424
|
-
const includedSpans = spans.filter(this.includeSpan);
|
|
526
|
+
const includedSpans = rewriteLlmObservabilitySpanResources(spans.filter(this.includeSpan));
|
|
425
527
|
if (includedSpans.length === 0) {
|
|
426
528
|
resultCallback({ code: this.successCode });
|
|
427
529
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veryfront/ext-observability-opentelemetry",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1042",
|
|
4
4
|
"description": "Veryfront first-party extension package for ext-observability-opentelemetry",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"veryfront",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"@opentelemetry/semantic-conventions": "1.41.1"
|
|
110
110
|
},
|
|
111
111
|
"peerDependencies": {
|
|
112
|
-
"veryfront": "^0.1.
|
|
112
|
+
"veryfront": "^0.1.1042"
|
|
113
113
|
},
|
|
114
114
|
"type": "module",
|
|
115
115
|
"types": "./esm/extensions/ext-observability-opentelemetry/src/index.d.ts",
|