From 6b0628a7e151ff011d9c9c7992245582c7fc800a Mon Sep 17 00:00:00 2001 From: wankai123 Date: Tue, 21 Apr 2026 14:23:01 +0800 Subject: [PATCH 1/2] Fix: remove the dependency from `VirtualServiceAnalysisListener` if `GenAIAnalyzerModule` is disabled. --- docs/en/changes/changes.md | 1 + .../VirtualServiceAnalysisListener.java | 29 ++++++++++--------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index 44d8371be5e0..b95d8e3eb927 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -35,6 +35,7 @@ * Add iOS/iPadOS app monitoring via OpenTelemetry Swift SDK (SWIP-11). Includes the `IOS` layer, `IOSHTTPSpanListener` for outbound HTTP client metrics (supports OTel Swift `.old`/`.stable`/`.httpDup` semantic-convention modes via stable-then-legacy attribute fallback), `IOSMetricKitSpanListener` for daily MetricKit metrics (exit counts split by foreground/background, app-launch / hang-time percentile histograms with finite 30 s overflow ceiling), LAL rules for crash/hang diagnostics, Mobile menu, and iOS dashboards. * Fix LAL `layer: auto` mode dropping logs after extractor set the layer. Codegen now propagates `layer "..."` assignments to `LogMetadata.layer` so `FilterSpec.doSink()` sees the script-decided layer. * Fix MetricKit histogram percentile metrics being reported at 1000× their true value — the listener now marks its `SampleFamily` with `defaultHistogramBucketUnit(MILLISECONDS)` so MAL's default SECONDS→MS rescale of `le` labels is not applied. +* Fix: remove the dependency from `VirtualServiceAnalysisListener` if `GenAIAnalyzerModule` is disabled. #### UI * Add mobile menu icon and i18n labels for the iOS layer. diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/VirtualServiceAnalysisListener.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/VirtualServiceAnalysisListener.java index 1d48dd2a386b..74ef7986fd49 100644 --- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/VirtualServiceAnalysisListener.java +++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/VirtualServiceAnalysisListener.java @@ -18,7 +18,7 @@ package org.apache.skywalking.oap.server.analyzer.provider.trace.parser.listener; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; import lombok.RequiredArgsConstructor; @@ -82,22 +82,25 @@ public Factory(ModuleManager moduleManager) { this.namingControl = moduleManager.find(CoreModule.NAME) .provider() .getService(NamingControl.class); - this.genAIMeterAnalyzerService = moduleManager.find(GenAIAnalyzerModule.NAME) - .provider() - .getService(IGenAIMeterAnalyzerService.class); + if (moduleManager.has(GenAIAnalyzerModule.NAME)) { + this.genAIMeterAnalyzerService = moduleManager.find(GenAIAnalyzerModule.NAME) + .provider() + .getService(IGenAIMeterAnalyzerService.class); + } else { + this.genAIMeterAnalyzerService = null; + } } @Override public AnalysisListener create(ModuleManager moduleManager, AnalyzerModuleConfig config) { - return new VirtualServiceAnalysisListener( - sourceReceiver, - Arrays.asList( - new VirtualCacheProcessor(namingControl, config), - new VirtualDatabaseProcessor(namingControl, config), - new VirtualMQProcessor(namingControl), - new VirtualGenAIProcessor(genAIMeterAnalyzerService) - ) - ); + List processors = new ArrayList<>(); + processors.add(new VirtualCacheProcessor(namingControl, config)); + processors.add(new VirtualDatabaseProcessor(namingControl, config)); + processors.add(new VirtualMQProcessor(namingControl)); + if (genAIMeterAnalyzerService != null) { + processors.add(new VirtualGenAIProcessor(genAIMeterAnalyzerService)); + } + return new VirtualServiceAnalysisListener(sourceReceiver, processors); } } From 259d7f023e3545338ae9c7ad677d69450ff944f7 Mon Sep 17 00:00:00 2001 From: Wan Kai Date: Tue, 21 Apr 2026 14:28:54 +0800 Subject: [PATCH 2/2] Update docs/en/changes/changes.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/en/changes/changes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index b95d8e3eb927..8a9749c7d936 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -35,7 +35,7 @@ * Add iOS/iPadOS app monitoring via OpenTelemetry Swift SDK (SWIP-11). Includes the `IOS` layer, `IOSHTTPSpanListener` for outbound HTTP client metrics (supports OTel Swift `.old`/`.stable`/`.httpDup` semantic-convention modes via stable-then-legacy attribute fallback), `IOSMetricKitSpanListener` for daily MetricKit metrics (exit counts split by foreground/background, app-launch / hang-time percentile histograms with finite 30 s overflow ceiling), LAL rules for crash/hang diagnostics, Mobile menu, and iOS dashboards. * Fix LAL `layer: auto` mode dropping logs after extractor set the layer. Codegen now propagates `layer "..."` assignments to `LogMetadata.layer` so `FilterSpec.doSink()` sees the script-decided layer. * Fix MetricKit histogram percentile metrics being reported at 1000× their true value — the listener now marks its `SampleFamily` with `defaultHistogramBucketUnit(MILLISECONDS)` so MAL's default SECONDS→MS rescale of `le` labels is not applied. -* Fix: remove the dependency from `VirtualServiceAnalysisListener` if `GenAIAnalyzerModule` is disabled. +* Fix: remove `VirtualServiceAnalysisListener`'s dependency on `GenAIAnalyzerModule` if it is disabled. #### UI * Add mobile menu icon and i18n labels for the iOS layer.