@mastra/observability 1.8.0-alpha.0 → 1.8.0-alpha.1

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/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { MastraBase } from '@mastra/core/base';
2
2
  import { MastraError, ErrorCategory, ErrorDomain } from '@mastra/core/error';
3
3
  import { ConsoleLogger, LogLevel, RegisteredLogger } from '@mastra/core/logger';
4
- import { TracingEventType, DEFAULT_BLOCKED_LABELS, SpanType, noOpLoggerContext, InternalSpans } from '@mastra/core/observability';
4
+ import { SpanType, TracingEventType, DEFAULT_BLOCKED_LABELS, noOpLoggerContext, InternalSpans } from '@mastra/core/observability';
5
5
  import { fetchWithRetry, getNestedValue, setNestedValue } from '@mastra/core/utils';
6
6
  import { buildUpdateSpanRecord, buildFeedbackRecord, buildLogRecord, buildMetricRecord, buildScoreRecord, buildCreateSpanRecord } from '@mastra/core/storage';
7
7
  import fs from 'fs';
@@ -13847,17 +13847,36 @@ var serializationOptionsSchema = external_exports.object({
13847
13847
  maxArrayLength: external_exports.number().int().positive().optional(),
13848
13848
  maxObjectKeys: external_exports.number().int().positive().optional()
13849
13849
  }).optional();
13850
- var observabilityInstanceConfigSchema = external_exports.object({
13851
- name: external_exports.string().min(1, "Name is required"),
13850
+ var LOG_LEVELS = ["debug", "info", "warn", "error", "fatal"];
13851
+ var cardinalityConfigSchema = external_exports.object({
13852
+ blockedLabels: external_exports.array(external_exports.string()).optional(),
13853
+ blockUUIDs: external_exports.boolean().optional()
13854
+ }).optional();
13855
+ var loggingConfigSchema = external_exports.object({
13856
+ enabled: external_exports.boolean().optional(),
13857
+ level: external_exports.enum(LOG_LEVELS).optional()
13858
+ }).optional();
13859
+ var spanFilterSchema = external_exports.function({
13860
+ input: external_exports.tuple([external_exports.any()]),
13861
+ output: external_exports.boolean()
13862
+ }).optional();
13863
+ var observabilityInstanceConfigFields = {
13852
13864
  serviceName: external_exports.string().min(1, "Service name is required"),
13853
13865
  sampling: samplingStrategySchema.optional(),
13854
13866
  exporters: external_exports.array(external_exports.any()).optional(),
13855
13867
  bridge: external_exports.any().optional(),
13856
13868
  spanOutputProcessors: external_exports.array(external_exports.any()).optional(),
13857
13869
  includeInternalSpans: external_exports.boolean().optional(),
13870
+ excludeSpanTypes: external_exports.array(external_exports.nativeEnum(SpanType)).optional(),
13871
+ spanFilter: spanFilterSchema,
13858
13872
  requestContextKeys: external_exports.array(external_exports.string()).optional(),
13859
13873
  serializationOptions: serializationOptionsSchema,
13860
- cardinality: external_exports.any().optional()
13874
+ cardinality: cardinalityConfigSchema,
13875
+ logging: loggingConfigSchema
13876
+ };
13877
+ var observabilityInstanceConfigSchema = external_exports.object({
13878
+ name: external_exports.string().min(1, "Name is required"),
13879
+ ...observabilityInstanceConfigFields
13861
13880
  }).refine(
13862
13881
  (data) => {
13863
13882
  const hasExporters = data.exporters && data.exporters.length > 0;
@@ -13868,16 +13887,7 @@ var observabilityInstanceConfigSchema = external_exports.object({
13868
13887
  message: "At least one exporter or a bridge is required"
13869
13888
  }
13870
13889
  );
13871
- var observabilityConfigValueSchema = external_exports.object({
13872
- serviceName: external_exports.string().min(1, "Service name is required"),
13873
- sampling: samplingStrategySchema.optional(),
13874
- exporters: external_exports.array(external_exports.any()).optional(),
13875
- bridge: external_exports.any().optional(),
13876
- spanOutputProcessors: external_exports.array(external_exports.any()).optional(),
13877
- includeInternalSpans: external_exports.boolean().optional(),
13878
- requestContextKeys: external_exports.array(external_exports.string()).optional(),
13879
- serializationOptions: serializationOptionsSchema
13880
- }).refine(
13890
+ var observabilityConfigValueSchema = external_exports.object(observabilityInstanceConfigFields).refine(
13881
13891
  (data) => {
13882
13892
  const hasExporters = data.exporters && data.exporters.length > 0;
13883
13893
  const hasBridge = !!data.bridge;
@@ -16686,6 +16696,9 @@ var TestExporter = class extends BaseExporter {
16686
16696
  if (value instanceof Date) {
16687
16697
  return "<date>";
16688
16698
  }
16699
+ if (key === "createdAt" && typeof value === "number") {
16700
+ return "<date>";
16701
+ }
16689
16702
  if (typeof value === "string") {
16690
16703
  if (key === "traceId" && (uuidRegex.test(value) || hexId32Regex.test(value))) {
16691
16704
  if (!traceIdMap.has(value)) {
@@ -16714,7 +16727,23 @@ var TestExporter = class extends BaseExporter {
16714
16727
  if (value && typeof value === "object") {
16715
16728
  const normalized = {};
16716
16729
  for (const [k, v] of Object.entries(value)) {
16717
- normalized[k] = normalizeValue(v, k);
16730
+ if (key === "providerOptions" && k === "mastra" && v && typeof v === "object") {
16731
+ const mastraOptions = v;
16732
+ const remainingMastraOptions = Object.fromEntries(
16733
+ Object.entries(mastraOptions).filter(([mastraKey]) => mastraKey !== "createdAt")
16734
+ );
16735
+ if (Object.keys(remainingMastraOptions).length > 0) {
16736
+ normalized[k] = normalizeValue(remainingMastraOptions, k);
16737
+ }
16738
+ continue;
16739
+ }
16740
+ const normalizedValue = normalizeValue(v, k);
16741
+ if (normalizedValue !== void 0) {
16742
+ normalized[k] = normalizedValue;
16743
+ }
16744
+ }
16745
+ if (key === "providerOptions" && Object.keys(normalized).length === 0) {
16746
+ return void 0;
16718
16747
  }
16719
16748
  return normalized;
16720
16749
  }
@@ -19467,6 +19496,8 @@ var BaseObservabilityInstance = class extends MastraBase {
19467
19496
  spanOutputProcessors: config2.spanOutputProcessors ?? [],
19468
19497
  bridge: config2.bridge ?? void 0,
19469
19498
  includeInternalSpans: config2.includeInternalSpans ?? false,
19499
+ excludeSpanTypes: config2.excludeSpanTypes,
19500
+ spanFilter: config2.spanFilter,
19470
19501
  requestContextKeys: config2.requestContextKeys ?? [],
19471
19502
  serializationOptions: config2.serializationOptions,
19472
19503
  logging: config2.logging
@@ -19852,8 +19883,18 @@ var BaseObservabilityInstance = class extends MastraBase {
19852
19883
  getSpanForExport(span) {
19853
19884
  if (!span.isValid) return void 0;
19854
19885
  if (span.isInternal && !this.config.includeInternalSpans) return void 0;
19886
+ if (this.config.excludeSpanTypes?.includes(span.type)) return void 0;
19855
19887
  const processedSpan = this.processSpan(span);
19856
- return processedSpan?.exportSpan(this.config.includeInternalSpans);
19888
+ const exportedSpan = processedSpan?.exportSpan(this.config.includeInternalSpans);
19889
+ if (!exportedSpan) return void 0;
19890
+ if (this.config.spanFilter) {
19891
+ try {
19892
+ if (!this.config.spanFilter(exportedSpan)) return void 0;
19893
+ } catch (error48) {
19894
+ this.logger.error(`[Observability] spanFilter error`, error48);
19895
+ }
19896
+ }
19897
+ return exportedSpan;
19857
19898
  }
19858
19899
  /**
19859
19900
  * Emit a span started event.