You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2022/10/07 13:09:36 UTC

[skywalking] branch master updated: Support skywalking-client-js report empty `service version` and `page path` (#9735)

This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new ba84b8af3e Support skywalking-client-js report empty `service version` and `page path` (#9735)
ba84b8af3e is described below

commit ba84b8af3e52bc48f5c3441dc90a237e070af664
Author: 吴晟 Wu Sheng <wu...@foxmail.com>
AuthorDate: Fri Oct 7 21:09:24 2022 +0800

    Support skywalking-client-js report empty `service version` and `page path` (#9735)
---
 docs/en/changes/changes.md                         | 15 ++++--
 .../performance/BrowserPerfDataDecorator.java      | 58 +++++++++++-----------
 .../parser/performance/PerfDataAnalyzer.java       | 13 +++++
 3 files changed, 52 insertions(+), 34 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 25db4ed4da..eb9cba8c25 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -20,15 +20,19 @@
   in `no-init` mode.
 * Make sure instance list ordered in TTL processor to avoid TTL timer never runs.
 * Support monitoring PostgreSQL slow SQLs.
-* [**Breaking Change**] Support sharding MySQL database instances and tables by [Shardingsphere-Proxy](https://shardingsphere.apache.org/document/current/en/overview/#shardingsphere-proxy).
-  SQL-Database requires removing tables `log_tag/segment_tag/zipkin_query` before OAP starts, if bump up from previous releases.
+* [**Breaking Change**] Support sharding MySQL database instances and tables
+  by [Shardingsphere-Proxy](https://shardingsphere.apache.org/document/current/en/overview/#shardingsphere-proxy).
+  SQL-Database requires removing tables `log_tag/segment_tag/zipkin_query` before OAP starts, if bump up from previous
+  releases.
 * Fix meter functions `avgHistogram`, `avgHistogramPercentile`, `avgLabeled`, `sumHistogram` having data conflict when
   downsampling.
 * Do sorting `readLabeledMetricsValues` result forcedly in case the storage(database) doesn't return data consistent
   with the parameter list.
-* Fix the wrong watch semantics in Kubernetes watchers, which causes heavy traffic to API server in some Kubernetes clusters,
+* Fix the wrong watch semantics in Kubernetes watchers, which causes heavy traffic to API server in some Kubernetes
+  clusters,
   we should use `Get State and Start at Most Recent` semantic instead of `Start at Exact`
-  because we don't need the changing history events, see https://kubernetes.io/docs/reference/using-api/api-concepts/#semantics-for-watch.
+  because we don't need the changing history events,
+  see https://kubernetes.io/docs/reference/using-api/api-concepts/#semantics-for-watch.
 * Unify query services and DAOs codes time range condition to `Duration`.
 * [**Breaking Change**]: Remove prometheus-fetcher plugin, please use OpenTelemetry to scrape Prometheus metrics and
   set up SkyWalking OpenTelemetry receiver instead.
@@ -39,6 +43,9 @@
   (explicit_bounds[i-1], +infinity) for i == size(explicit_bounds)
   ```
 * Add APISIX metrics monitoring
+* Support skywalking-client-js report empty `service version` and `page path` , set default version as `latest` and
+  default page path as `/`(root). Fix the
+  error `fetching data (/browser_app_page_pv0) : Can't split endpoint id into 2 parts`.
 
 #### UI
 
diff --git a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/BrowserPerfDataDecorator.java b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/BrowserPerfDataDecorator.java
index f486375902..119c6f3229 100644
--- a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/BrowserPerfDataDecorator.java
+++ b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/BrowserPerfDataDecorator.java
@@ -17,98 +17,96 @@
 
 package org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance;
 
-import lombok.RequiredArgsConstructor;
 import org.apache.skywalking.apm.network.language.agent.v3.BrowserPerfData;
 
-@RequiredArgsConstructor
 public class BrowserPerfDataDecorator {
-    private boolean isOrigin = true;
-    private final BrowserPerfData browserPerfData;
     private BrowserPerfData.Builder builder;
 
+    public BrowserPerfDataDecorator(final BrowserPerfData browserPerfData) {
+        this.builder = browserPerfData.toBuilder();
+    }
+
     public String getService() {
-        return isOrigin ? browserPerfData.getService() : builder.getService();
+        return builder.getService();
     }
 
     public String getServiceVersion() {
-        return isOrigin ? browserPerfData.getServiceVersion() : builder.getServiceVersion();
+        return builder.getServiceVersion();
     }
 
     public long getTime() {
-        return isOrigin ? browserPerfData.getTime() : builder.getTime();
+        return builder.getTime();
     }
 
     public String getPagePath() {
-        return isOrigin ? browserPerfData.getPagePath() : builder.getPagePath();
+        return builder.getPagePath();
     }
 
     public int getRedirectTime() {
-        return isOrigin ? browserPerfData.getRedirectTime() : builder.getRedirectTime();
+        return builder.getRedirectTime();
     }
 
     public int getDnsTime() {
-        return isOrigin ? browserPerfData.getDnsTime() : builder.getDnsTime();
+        return builder.getDnsTime();
     }
 
     public int getTtfbTime() {
-        return isOrigin ? browserPerfData.getTtfbTime() : builder.getTtfbTime();
+        return builder.getTtfbTime();
     }
 
     public int getTcpTime() {
-        return isOrigin ? browserPerfData.getTcpTime() : builder.getTcpTime();
+        return builder.getTcpTime();
     }
 
     public int getTransTime() {
-        return isOrigin ? browserPerfData.getTransTime() : builder.getTransTime();
+        return builder.getTransTime();
     }
 
     public int getDomAnalysisTime() {
-        return isOrigin ? browserPerfData.getDomAnalysisTime() : builder.getDomAnalysisTime();
+        return builder.getDomAnalysisTime();
     }
 
     public int getFptTime() {
-        return isOrigin ? browserPerfData.getFptTime() : builder.getFptTime();
+        return builder.getFptTime();
     }
 
     public int getDomReadyTime() {
-        return isOrigin ? browserPerfData.getDomReadyTime() : builder.getDomReadyTime();
+        return builder.getDomReadyTime();
     }
 
     public int getLoadPageTime() {
-        return isOrigin ? browserPerfData.getLoadPageTime() : builder.getLoadPageTime();
+        return builder.getLoadPageTime();
     }
 
     public int getResTime() {
-        return isOrigin ? browserPerfData.getResTime() : builder.getResTime();
+        return builder.getResTime();
     }
 
     public int getSslTime() {
-        return isOrigin ? browserPerfData.getSslTime() : builder.getSslTime();
+        return builder.getSslTime();
     }
 
     public int getTtlTime() {
-        return isOrigin ? browserPerfData.getTtlTime() : builder.getTtlTime();
+        return builder.getTtlTime();
     }
 
     public int getFirstPackTime() {
-        return isOrigin ? browserPerfData.getFirstPackTime() : builder.getFirstPackTime();
+        return builder.getFirstPackTime();
     }
 
     public int getFmpTime() {
-        return isOrigin ? browserPerfData.getFmpTime() : builder.getFmpTime();
+        return builder.getFmpTime();
     }
 
     public void setTime(long time) {
-        if (isOrigin) {
-            toBuilder();
-        }
         builder.setTime(time);
     }
 
-    void toBuilder() {
-        if (isOrigin) {
-            this.isOrigin = false;
-            this.builder = browserPerfData.toBuilder();
-        }
+    public void setServiceVersion(String version) {
+        builder.setServiceVersion(version);
+    }
+
+    public void setPagePath(String pagePath) {
+        builder.setPagePath(pagePath);
     }
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/PerfDataAnalyzer.java b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/PerfDataAnalyzer.java
index f99a2e4cd9..f39a948025 100644
--- a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/PerfDataAnalyzer.java
+++ b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/PerfDataAnalyzer.java
@@ -23,6 +23,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.language.agent.v3.BrowserPerfData;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
 import org.apache.skywalking.oap.server.receiver.browser.provider.BrowserServiceModuleConfig;
 import org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.listener.PerfDataAnalysisListener;
 
@@ -36,12 +37,24 @@ public class PerfDataAnalyzer {
     private final List<PerfDataAnalysisListener> analysisListeners = new LinkedList<>();
 
     public void doAnalysis(BrowserPerfData browserPerfData) {
+        if (StringUtil.isBlank(browserPerfData.getService())) {
+            return;
+        }
+
         createAnalysisListeners();
 
         BrowserPerfDataDecorator decorator = new BrowserPerfDataDecorator(browserPerfData);
         // Use the server side current time.
         long nowMillis = System.currentTimeMillis();
         decorator.setTime(nowMillis);
+        if (StringUtil.isBlank(decorator.getServiceVersion())) {
+            // Set the default version as latest, considering it is running.
+            decorator.setServiceVersion("latest");
+        }
+        if (StringUtil.isBlank(decorator.getPagePath())) {
+            // Set the default page path as root(/).
+            decorator.setPagePath("/");
+        }
 
         notifyListener(decorator);