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 8ebb52dd19 Adapt new Browser data upload protocol (#13009)
8ebb52dd19 is described below
commit 8ebb52dd190d74da479d0d7f06e38c0ba54f3468
Author: mrproliu <[email protected]>
AuthorDate: Fri Jan 24 14:41:30 2025 +0800
Adapt new Browser data upload protocol (#13009)
---
apm-protocol/apm-network/src/main/proto | 2 +-
docs/en/changes/changes.md | 2 +-
.../apache/skywalking/oal/rt/grammar/OALLexer.g4 | 1 +
.../apache/skywalking/oal/rt/grammar/OALParser.g4 | 2 +-
.../source/BrowserAppWebInteractionPerf.java | 58 +++++++++
.../oap/server/core/source/DefaultScopeDefine.java | 1 +
.../browser/provider/BrowserModuleProvider.java | 3 +
.../handler/grpc/BrowserPerfServiceHandler.java | 21 ++++
.../rest/BrowserPerfServiceHTTPHandler.java | 17 +++
.../BrowserWebInteractionPerfDataDecorator.java | 67 +++++++++++
...wserWebInteractionPerfDataAnalysisListener.java | 74 ++++++++++++
.../src/main/resources/oal/browser.oal | 2 +
.../browser/browser-page.json | 130 ++++++++++++++++++++-
13 files changed, 372 insertions(+), 8 deletions(-)
diff --git a/apm-protocol/apm-network/src/main/proto
b/apm-protocol/apm-network/src/main/proto
index 385fb8b005..1717f5c753 160000
--- a/apm-protocol/apm-network/src/main/proto
+++ b/apm-protocol/apm-network/src/main/proto
@@ -1 +1 @@
-Subproject commit 385fb8b0057b98c9350f7a94d228b977f5154d4b
+Subproject commit 1717f5c753a4d6c644f056d69fed85873482648f
diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 0a65118fd2..f186b87739 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -58,7 +58,7 @@
* MQE: Support `top_n_of` function for merging multiple metrics topn query.
* Support `labelAvg` function in the OAL engine.
* Added `maxLabelCount` parameter in the `labelCount` function of OAL to limit
the number of labels can be counted.
-* Adapt the new Browser API(`/browser/perfData/webVitals`,
`/browser/perfData/resources`) protocol.
+* Adapt the new Browser API(`/browser/perfData/webVitals`,
`/browser/perfData/webInteractions`, `/browser/perfData/resources`) protocol.
* Add Circuit Breaking mechanism.
* BanyanDB: Add support for compatibility checks based on the BanyanDB
server's API version.
* MQE: Support `&&(and)`, `||(or)` bool operators.
diff --git
a/oap-server/oal-grammar/src/main/antlr4/org/apache/skywalking/oal/rt/grammar/OALLexer.g4
b/oap-server/oal-grammar/src/main/antlr4/org/apache/skywalking/oal/rt/grammar/OALLexer.g4
index 6ddd83d600..75a37da627 100644
---
a/oap-server/oal-grammar/src/main/antlr4/org/apache/skywalking/oal/rt/grammar/OALLexer.g4
+++
b/oap-server/oal-grammar/src/main/antlr4/org/apache/skywalking/oal/rt/grammar/OALLexer.g4
@@ -75,6 +75,7 @@ SRC_BROWSER_APP_PAGE_TRAFFIC: 'BrowserAppPageTraffic';
SRC_BROWSER_APP_SINGLE_VERSION_TRAFFIC: 'BrowserAppSingleVersionTraffic';
SRC_BROWSER_APP_RESOURCE_PERF: 'BrowserAppResourcePerf';
SRC_BROWSER_APP_WEB_VITALS_PERF: 'BrowserAppWebVitalsPerf';
+SRC_BROWSER_APP_WEB_INTERACTION_PERF: 'BrowserAppWebInteractionPerf';
// Constructors symbols
diff --git
a/oap-server/oal-grammar/src/main/antlr4/org/apache/skywalking/oal/rt/grammar/OALParser.g4
b/oap-server/oal-grammar/src/main/antlr4/org/apache/skywalking/oal/rt/grammar/OALParser.g4
index f1ec8c4045..38713ff208 100644
---
a/oap-server/oal-grammar/src/main/antlr4/org/apache/skywalking/oal/rt/grammar/OALParser.g4
+++
b/oap-server/oal-grammar/src/main/antlr4/org/apache/skywalking/oal/rt/grammar/OALParser.g4
@@ -59,7 +59,7 @@ source
SRC_SERVICE_INSTANCE_CLR_CPU | SRC_SERVICE_INSTANCE_CLR_GC |
SRC_SERVICE_INSTANCE_CLR_THREAD |
SRC_SERVICE_INSTANCE_JVM_CPU | SRC_SERVICE_INSTANCE_JVM_MEMORY |
SRC_SERVICE_INSTANCE_JVM_MEMORY_POOL | SRC_SERVICE_INSTANCE_JVM_GC |
SRC_SERVICE_INSTANCE_JVM_THREAD | SRC_SERVICE_INSTANCE_JVM_CLASS |// JVM source
of service instance
SRC_ENVOY_INSTANCE_METRIC |
- SRC_BROWSER_APP_PERF | SRC_BROWSER_APP_PAGE_PERF |
SRC_BROWSER_APP_SINGLE_VERSION_PERF | SRC_BROWSER_APP_RESOURCE_PERF |
SRC_BROWSER_APP_WEB_VITALS_PERF |
+ SRC_BROWSER_APP_PERF | SRC_BROWSER_APP_PAGE_PERF |
SRC_BROWSER_APP_SINGLE_VERSION_PERF | SRC_BROWSER_APP_RESOURCE_PERF |
SRC_BROWSER_APP_WEB_VITALS_PERF | SRC_BROWSER_APP_WEB_INTERACTION_PERF |
SRC_BROWSER_APP_TRAFFIC | SRC_BROWSER_APP_PAGE_TRAFFIC |
SRC_BROWSER_APP_SINGLE_VERSION_TRAFFIC |
SRC_EVENT | SRC_MQ_ACCESS | SRC_MQ_ENDPOINT_ACCESS |
SRC_K8S_SERVICE | SRC_K8S_SERVICE_INSTANCE | SRC_K8S_ENDPOINT |
SRC_K8S_SERVICE_RELATION | SRC_K8S_SERVICE_INSTANCE_RELATION |
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/browser/source/BrowserAppWebInteractionPerf.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/browser/source/BrowserAppWebInteractionPerf.java
new file mode 100644
index 0000000000..50a6f84cee
--- /dev/null
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/browser/source/BrowserAppWebInteractionPerf.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.core.browser.source;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.skywalking.oap.server.core.analysis.IDManager;
+import org.apache.skywalking.oap.server.core.source.ScopeDeclaration;
+import org.apache.skywalking.oap.server.core.source.ScopeDefaultColumn;
+import org.apache.skywalking.oap.server.core.source.Source;
+
+import static
org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.BROWSER_APP_WEB_INTERACTION_PAGE_PERF;
+import static
org.apache.skywalking.oap.server.core.source.DefaultScopeDefine.ENDPOINT_CATALOG_NAME;
+
+@ScopeDeclaration(id = BROWSER_APP_WEB_INTERACTION_PAGE_PERF, name =
"BrowserAppWebInteractionPerf", catalog = ENDPOINT_CATALOG_NAME)
[email protected](fieldName = "entityId", columnName
= "entity_id", isID = true, type = String.class)
+@Setter
+@Getter
+public class BrowserAppWebInteractionPerf extends Source {
+ @Override
+ public int scope() {
+ return BROWSER_APP_WEB_INTERACTION_PAGE_PERF;
+ }
+
+ @Override
+ public String getEntityId() {
+ return IDManager.EndpointID.buildId(serviceId, path);
+ }
+
+ @ScopeDefaultColumn.DefinedByField(columnName = "service_id")
+ @ScopeDefaultColumn.BanyanDB(groupByCondInTopN = true)
+ private String serviceId;
+ @ScopeDefaultColumn.DefinedByField(columnName = "service_name",
requireDynamicActive = true)
+ private String serviceName;
+ private String path;
+ private int inpTime;
+
+ @Override
+ public void prepare() {
+ serviceId = IDManager.ServiceID.buildId(serviceName, true);
+ }
+}
diff --git
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java
index 15eed04799..61ec1edcd6 100644
---
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java
+++
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DefaultScopeDefine.java
@@ -149,6 +149,7 @@ public class DefaultScopeDefine {
public static final int BROWSER_APP_WEB_VITALS_PAGE_PERF = 87;
public static final int BROWSER_APP_RESOURCE_PERF = 88;
+ public static final int BROWSER_APP_WEB_INTERACTION_PAGE_PERF = 89;
/**
* Catalog of scope, the metrics processor could use this to group all
generated metrics by oal rt.
diff --git
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/BrowserModuleProvider.java
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/BrowserModuleProvider.java
index 2ee5969356..7ffb0fa848 100644
---
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/BrowserModuleProvider.java
+++
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/BrowserModuleProvider.java
@@ -38,8 +38,10 @@ import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.errorlo
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.PerfDataParserListenerManager;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserPerfDataDecorator;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserResourcePerfDataDecorator;
+import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserWebInteractionPerfDataDecorator;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserWebVitalsPerfDataDecorator;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.listener.BrowserPerfDataAnalysisListener;
+import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.listener.BrowserWebInteractionPerfDataAnalysisListener;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.listener.BrowserWebResourcePerfDataAnalysisListener;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.listener.BrowserWebVitalsPerfDataAnalysisListener;
import
org.apache.skywalking.oap.server.receiver.sharing.server.SharingServerModule;
@@ -126,6 +128,7 @@ public class BrowserModuleProvider extends ModuleProvider {
listenerManager.add(BrowserPerfDataDecorator.class, new
BrowserPerfDataAnalysisListener.Factory(getManager(), moduleConfig));
listenerManager.add(BrowserWebVitalsPerfDataDecorator.class, new
BrowserWebVitalsPerfDataAnalysisListener.Factory(getManager(), moduleConfig));
listenerManager.add(BrowserResourcePerfDataDecorator.class, new
BrowserWebResourcePerfDataAnalysisListener.Factory(getManager(), moduleConfig));
+ listenerManager.add(BrowserWebInteractionPerfDataDecorator.class, new
BrowserWebInteractionPerfDataAnalysisListener.Factory(getManager(),
moduleConfig));
return listenerManager;
}
diff --git
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/grpc/BrowserPerfServiceHandler.java
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/grpc/BrowserPerfServiceHandler.java
index f9fe795a17..ad5741d60c 100644
---
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/grpc/BrowserPerfServiceHandler.java
+++
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/grpc/BrowserPerfServiceHandler.java
@@ -24,6 +24,7 @@ import
org.apache.skywalking.apm.network.language.agent.v3.BrowserErrorLog;
import org.apache.skywalking.apm.network.language.agent.v3.BrowserPerfData;
import
org.apache.skywalking.apm.network.language.agent.v3.BrowserPerfServiceGrpc;
import
org.apache.skywalking.apm.network.language.agent.v3.BrowserResourcePerfData;
+import
org.apache.skywalking.apm.network.language.agent.v3.BrowserWebInteractionsPerfData;
import
org.apache.skywalking.apm.network.language.agent.v3.BrowserWebVitalsPerfData;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
@@ -34,6 +35,7 @@ import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.perform
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.PerfDataAnalyzer;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.PerfDataParserListenerManager;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserResourcePerfDataDecorator;
+import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserWebInteractionPerfDataDecorator;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserWebVitalsPerfDataDecorator;
import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
import org.apache.skywalking.oap.server.telemetry.api.CounterMetrics;
@@ -150,6 +152,25 @@ public class BrowserPerfServiceHandler extends
BrowserPerfServiceGrpc.BrowserPer
}
}
+ @Override
+ public void collectWebInteractionsPerfData(BrowserWebInteractionsPerfData
request, StreamObserver<Commands> responseObserver) {
+ if (log.isDebugEnabled()) {
+ log.debug("receive browser web interaction performance data");
+ }
+ HistogramMetrics.Timer timer = perfHistogram.createTimer();
+ try {
+ PerfDataAnalyzer analyzer = new
PerfDataAnalyzer(perfDataListenerManager);
+ analyzer.doAnalysis(new
BrowserWebInteractionPerfDataDecorator(request));
+ } catch (Throwable e) {
+ log.error(e.getMessage(), e);
+ perfErrorCounter.inc();
+ } finally {
+ timer.finish();
+ responseObserver.onNext(Commands.newBuilder().build());
+ responseObserver.onCompleted();
+ }
+ }
+
@Override
public StreamObserver<BrowserErrorLog> collectErrorLogs(final
StreamObserver<Commands> responseObserver) {
return new StreamObserver<BrowserErrorLog>() {
diff --git
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/rest/BrowserPerfServiceHTTPHandler.java
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/rest/BrowserPerfServiceHTTPHandler.java
index 203ba75ee8..0a23fdf8d4 100644
---
a/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/rest/BrowserPerfServiceHTTPHandler.java
+++
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/handler/rest/BrowserPerfServiceHTTPHandler.java
@@ -24,6 +24,7 @@ import org.apache.skywalking.apm.network.common.v3.Commands;
import org.apache.skywalking.apm.network.language.agent.v3.BrowserErrorLog;
import org.apache.skywalking.apm.network.language.agent.v3.BrowserPerfData;
import
org.apache.skywalking.apm.network.language.agent.v3.BrowserResourcePerfData;
+import
org.apache.skywalking.apm.network.language.agent.v3.BrowserWebInteractionsPerfData;
import
org.apache.skywalking.apm.network.language.agent.v3.BrowserWebVitalsPerfData;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
import
org.apache.skywalking.oap.server.receiver.browser.provider.BrowserServiceModuleConfig;
@@ -33,6 +34,7 @@ import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.perform
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.PerfDataAnalyzer;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.PerfDataParserListenerManager;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserResourcePerfDataDecorator;
+import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserWebInteractionPerfDataDecorator;
import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserWebVitalsPerfDataDecorator;
import org.apache.skywalking.oap.server.telemetry.TelemetryModule;
import org.apache.skywalking.oap.server.telemetry.api.CounterMetrics;
@@ -159,4 +161,19 @@ public class BrowserPerfServiceHTTPHandler {
throw e;
}
}
+
+ @Post("/browser/perfData/webInteractions")
+ public Commands collectWebInteractionsPerfData(final
List<BrowserWebInteractionsPerfData> perfDataList) {
+ try (HistogramMetrics.Timer ignored = perfHistogram.createTimer()) {
+ perfDataList.forEach(perfData -> {
+ final PerfDataAnalyzer analyzer = new
PerfDataAnalyzer(perfDataListenerManager);
+ analyzer.doAnalysis(new
BrowserWebInteractionPerfDataDecorator(perfData));
+ });
+ return Commands.newBuilder().build();
+ } catch (Throwable e) {
+ log.error(e.getMessage(), e);
+ perfErrorCounter.inc();
+ throw e;
+ }
+ }
}
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/decorators/BrowserWebInteractionPerfDataDecorator.java
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/decorators/BrowserWebInteractionPerfDataDecorator.java
new file mode 100644
index 0000000000..3b5f0445a7
--- /dev/null
+++
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/decorators/BrowserWebInteractionPerfDataDecorator.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators;
+
+import
org.apache.skywalking.apm.network.language.agent.v3.BrowserWebInteractionsPerfData;
+
+public class BrowserWebInteractionPerfDataDecorator implements
BrowserPerfDecorator {
+ private BrowserWebInteractionsPerfData.Builder builder;
+
+ public
BrowserWebInteractionPerfDataDecorator(BrowserWebInteractionsPerfData data) {
+ this.builder = data.toBuilder();
+ }
+
+ @Override
+ public String getService() {
+ return builder.getService();
+ }
+
+ @Override
+ public void setTime(long time) {
+ builder.setTime(time);
+ }
+
+ @Override
+ public String getServiceVersion() {
+ return builder.getServiceVersion();
+ }
+
+ @Override
+ public void setServiceVersion(String serviceVersion) {
+ builder.setServiceVersion(serviceVersion);
+ }
+
+ @Override
+ public String getPagePath() {
+ return builder.getPagePath();
+ }
+
+ @Override
+ public void setPagePath(String pagePath) {
+ builder.setPagePath(pagePath);
+ }
+
+ public int getInpTime() {
+ return builder.getInpTime();
+ }
+
+ public long getTime() {
+ return builder.getTime();
+ }
+}
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/listener/BrowserWebInteractionPerfDataAnalysisListener.java
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/listener/BrowserWebInteractionPerfDataAnalysisListener.java
new file mode 100644
index 0000000000..7bdcd5505c
--- /dev/null
+++
b/oap-server/server-receiver-plugin/skywalking-browser-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/browser/provider/parser/performance/listener/BrowserWebInteractionPerfDataAnalysisListener.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.listener;
+
+import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
+import
org.apache.skywalking.oap.server.core.browser.source.BrowserAppWebInteractionPerf;
+import org.apache.skywalking.oap.server.core.config.NamingControl;
+import org.apache.skywalking.oap.server.core.source.SourceReceiver;
+import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import
org.apache.skywalking.oap.server.receiver.browser.provider.BrowserServiceModuleConfig;
+import
org.apache.skywalking.oap.server.receiver.browser.provider.parser.performance.decorators.BrowserWebInteractionPerfDataDecorator;
+
+public class BrowserWebInteractionPerfDataAnalysisListener implements
PerfDataAnalysisListener<BrowserWebInteractionPerfDataDecorator> {
+ private final SourceReceiver sourceReceiver;
+ private final NamingControl namingControl;
+ private BrowserAppWebInteractionPerf browserAppWebInteractionPerf;
+
+ public BrowserWebInteractionPerfDataAnalysisListener(SourceReceiver
sourceReceiver, NamingControl namingControl) {
+ this.sourceReceiver = sourceReceiver;
+ this.namingControl = namingControl;
+ }
+
+ @Override
+ public void build() {
+ sourceReceiver.receive(browserAppWebInteractionPerf);
+ }
+
+ @Override
+ public void parse(BrowserWebInteractionPerfDataDecorator decorator) {
+ browserAppWebInteractionPerf = new BrowserAppWebInteractionPerf();
+
browserAppWebInteractionPerf.setTimeBucket(TimeBucket.getMinuteTimeBucket(decorator.getTime()));
+
browserAppWebInteractionPerf.setServiceName(namingControl.formatServiceName(decorator.getService()));
+
browserAppWebInteractionPerf.setPath(namingControl.formatEndpointName(browserAppWebInteractionPerf.getServiceName(),
decorator.getPagePath()));
+ browserAppWebInteractionPerf.setInpTime(decorator.getInpTime());
+ }
+
+ public static class Factory implements
PerfDataListenerFactory<BrowserWebInteractionPerfDataDecorator> {
+
+ private final SourceReceiver sourceReceiver;
+ private final NamingControl namingControl;
+
+ public Factory(ModuleManager moduleManager, BrowserServiceModuleConfig
moduleConfig) {
+ this.sourceReceiver = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(SourceReceiver.class);
+
+ this.namingControl = moduleManager.find(CoreModule.NAME)
+ .provider()
+ .getService(NamingControl.class);
+ }
+
+ @Override
+ public
PerfDataAnalysisListener<BrowserWebInteractionPerfDataDecorator>
create(ModuleManager moduleManager, BrowserServiceModuleConfig moduleConfig) {
+ return new
BrowserWebInteractionPerfDataAnalysisListener(sourceReceiver, namingControl);
+ }
+ }
+}
diff --git a/oap-server/server-starter/src/main/resources/oal/browser.oal
b/oap-server/server-starter/src/main/resources/oal/browser.oal
index 5c60e5450e..5c0d1e4ddc 100644
--- a/oap-server/server-starter/src/main/resources/oal/browser.oal
+++ b/oap-server/server-starter/src/main/resources/oal/browser.oal
@@ -68,6 +68,8 @@ browser_app_web_vitals_fmp_avg =
from(BrowserAppWebVitalsPerf.fmpTime).filter(fm
browser_app_web_vitals_cls_avg =
from(BrowserAppWebVitalsPerf.clsTime).filter(clsTime > 0).longAvg();
browser_app_web_vitals_lcp_avg =
from(BrowserAppWebVitalsPerf.lcpTime).filter(lcpTime > 0).longAvg();
+browser_app_web_interaction_inp_percentile =
from(BrowserAppWebInteractionPerf.inpTime).percentile2(10);
+
// Disable unnecessary hard core stream, targeting @Stream#name
/////////
//disable(browser_error_log);
diff --git
a/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-page.json
b/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-page.json
index fad1fd7459..c25500e6a5 100644
---
a/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-page.json
+++
b/oap-server/server-starter/src/main/resources/ui-initialized-templates/browser/browser-page.json
@@ -84,6 +84,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -157,6 +160,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -230,6 +236,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -303,6 +312,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -376,6 +388,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -449,6 +464,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -525,6 +543,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
],
"metricConfig": [
@@ -623,6 +644,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
],
"metricConfig": [
@@ -643,7 +667,7 @@
{
"x": 0,
"y": 45,
- "w": 8,
+ "w": 6,
"h": 15,
"i": "11",
"type": "Widget",
@@ -703,13 +727,16 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
{
- "x": 8,
+ "x": 6,
"y": 45,
- "w": 8,
+ "w": 6,
"h": 15,
"i": "12",
"type": "Widget",
@@ -769,13 +796,16 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
{
- "x": 16,
+ "x": 12,
"y": 45,
- "w": 8,
+ "w": 6,
"h": 15,
"i": "13",
"type": "Widget",
@@ -835,6 +865,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -901,6 +934,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -967,6 +1003,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -1033,6 +1072,9 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
}
]
},
@@ -1099,6 +1141,84 @@
},
{
"widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
+ }
+ ]
+ },
+ {
+ "x": 18,
+ "y": 45,
+ "w": 6,
+ "h": 15,
+ "i": "18",
+ "type": "Widget",
+ "expressions": [
+
"relabels(browser_app_web_interaction_inp_percentile{p='50,75,90,95,99'},p='50,75,90,95,99',percentile='50,75,90,95,99')"
+ ],
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": true,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "widget": {
+ "title": "Web Interaction to Next Paint Use Time(ms)"
+ },
+ "associate": [
+ {
+ "widgetId": "12-0-1"
+ },
+ {
+ "widgetId": "12-0-2"
+ },
+ {
+ "widgetId": "12-0-3"
+ },
+ {
+ "widgetId": "12-0-4"
+ },
+ {
+ "widgetId": "12-0-8"
+ },
+ {
+ "widgetId": "12-0-0"
+ },
+ {
+ "widgetId": "12-0-10"
+ },
+ {
+ "widgetId": "12-0-11"
+ },
+ {
+ "widgetId": "12-0-12"
+ },
+ {
+ "widgetId": "12-0-13"
+ },
+ {
+ "widgetId": "12-0-14"
+ },
+ {
+ "widgetId": "12-0-15"
+ },
+ {
+ "widgetId": "12-0-16"
+ },
+ {
+ "widgetId": "12-0-17"
+ },
+ {
+ "widgetId": "12-0-18"
+ }
+ ],
+ "metricConfig": [
+ {
+ "unit": "ms",
+ "label": "Time"
}
]
}