@lark-apaas/observable 1.0.2 → 1.0.3-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.cjs CHANGED
@@ -8844,7 +8844,7 @@ __name(hrTimeToNanosNumber, "hrTimeToNanosNumber");
8844
8844
 
8845
8845
  // package.json
8846
8846
  var package_default = {
8847
- version: "1.0.2-alpha.4"};
8847
+ version: "1.0.3-alpha.1"};
8848
8848
 
8849
8849
  // src/const.ts
8850
8850
  var AppEnv = /* @__PURE__ */ (function(AppEnv2) {
@@ -8857,6 +8857,7 @@ var defaultResourceAttr = {
8857
8857
  "sdk_type": "client-backend",
8858
8858
  "sdk_language": "node"
8859
8859
  };
8860
+ var TraceDropToken = "TraceDropToken";
8860
8861
 
8861
8862
  // src/utils/convertAllAttrIntoString.ts
8862
8863
  var safeStringify = /* @__PURE__ */ __name((obj) => {
@@ -8960,13 +8961,15 @@ var CustomTraceExporter = class {
8960
8961
  uuid: idGenerator.generateTraceId(),
8961
8962
  app_env: isDev ? AppEnv.Dev : AppEnv.Prod
8962
8963
  };
8964
+ const finalSpans = spans.filter((span) => !(span.attributes ?? {})[TraceDropToken]);
8965
+ if (!finalSpans.length) return;
8963
8966
  const otlpLikeStructure = {
8964
8967
  resource: {
8965
8968
  attributes: {
8966
8969
  ...defaultResourceAttr
8967
8970
  }
8968
8971
  },
8969
- spans: spans.map((span) => {
8972
+ spans: finalSpans.map((span) => {
8970
8973
  const rawAttributes = {
8971
8974
  ...defaultAttributes,
8972
8975
  ...span.attributes ?? {}
@@ -9038,6 +9041,7 @@ var AppOTelSDK = class _AppOTelSDK {
9038
9041
  /**
9039
9042
  * [框架专用 API] 开启一个根 Span (Root Span)
9040
9043
  * 该方法专供 Middleware/Interceptor 使用
9044
+ * wrapper 形式
9041
9045
  */
9042
9046
  startContext(headers, name, fn) {
9043
9047
  const carrier = {};
@@ -9052,6 +9056,22 @@ var AppOTelSDK = class _AppOTelSDK {
9052
9056
  });
9053
9057
  }
9054
9058
  /**
9059
+ * [框架专用 API] 开启一个根 Span (Root Span)
9060
+ * 该方法专供 Middleware/Interceptor 使用
9061
+ * wrapper 形式
9062
+ */
9063
+ startRootTrace(headers, name) {
9064
+ const carrier = {};
9065
+ const customTraceId = headers["rpc-persist-apaas-observability-trace"];
9066
+ if (customTraceId && _AppOTelSDK.CUSTOM_FORMAT_REGEX.test(customTraceId)) {
9067
+ carrier["traceparent"] = `00-${customTraceId}-01`;
9068
+ }
9069
+ const activeContext = api.propagation.extract(api.context.active(), carrier);
9070
+ const tracer = api.trace.getTracer("app-core");
9071
+ const rootSpan = tracer.startSpan(name, {}, activeContext);
9072
+ return rootSpan;
9073
+ }
9074
+ /**
9055
9075
  * [用户专用 API] 手动打点 (Child Span)
9056
9076
  * 用户在 Service 中调用此方法,会自动挂载到 Middleware 创建的 Root Span 下
9057
9077
  */
@@ -9105,6 +9125,31 @@ var AppOTelSDK = class _AppOTelSDK {
9105
9125
  });
9106
9126
  }
9107
9127
  /**
9128
+ * 启动 Span 的工厂函数
9129
+ * @param {string} name - Span 名称
9130
+ * @param {Object} [parentSpan] - (可选) 父 Span 对象
9131
+ */
9132
+ startTrace(name, parentSpan) {
9133
+ try {
9134
+ const tracer = api.trace.getTracer("app-core");
9135
+ let ctx = api.context.active();
9136
+ if (parentSpan) {
9137
+ ctx = api.trace.setSpan(ctx, parentSpan);
9138
+ }
9139
+ const span = tracer.startSpan(name, void 0, ctx);
9140
+ return span;
9141
+ } catch {
9142
+ return _AppOTelSDK.emptySpan;
9143
+ }
9144
+ }
9145
+ /**
9146
+ * 丢弃 Span 的工厂函数
9147
+ * @param {Span} span - 要被丢弃的 Span 对象
9148
+ */
9149
+ static dropTraceSpan(span) {
9150
+ span.setAttribute(TraceDropToken, true);
9151
+ }
9152
+ /**
9108
9153
  * [框架专用] 强制刷新
9109
9154
  */
9110
9155
  async flush() {