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/04/02 10:03:55 UTC
[skywalking] branch master updated: Add template of OpenFunction (#8789)
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 bfdbd55 Add template of OpenFunction (#8789)
bfdbd55 is described below
commit bfdbd55285d04aba40fc8a0da2aae07a92e216c0
Author: zhang-wei <zh...@apache.org>
AuthorDate: Sat Apr 2 18:03:43 2022 +0800
Add template of OpenFunction (#8789)
---
CHANGES.md | 1 +
apm-protocol/apm-network/src/main/proto | 2 +-
.../trace/parser/listener/RPCAnalysisListener.java | 28 +-
.../skywalking/oap/server/core/analysis/Layer.java | 15 +-
.../ui/template/UITemplateInitializer.java | 1 +
.../handler/v8/ManagementServiceHandler.java | 19 +-
.../parser/listener/RPCAnalysisListenerTest.java | 18 +-
.../faas/faas-function-relation.json | 368 +++++++++++++++
.../faas/faas-function.json | 508 +++++++++++++++++++++
.../faas/faas-instance-relation.json | 263 +++++++++++
.../faas/faas-instance.json | 166 +++++++
.../ui-initialized-templates/faas/faas-root.json | 239 ++++++++++
12 files changed, 1601 insertions(+), 27 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index c6eec71..4765afa 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -168,6 +168,7 @@ NOTICE, this sharding concept is NOT just for splitting data into different data
* Re-implement UI template initialization for Booster UI.
* Add environment variable `SW_ENABLE_UPDATE_UI_TEMPLATE` to control user edit UI template.
* Add the Self Observability template of the SkyWalking Satellite.
+* Add the template of OpenFunction observability.
#### Documentation
diff --git a/apm-protocol/apm-network/src/main/proto b/apm-protocol/apm-network/src/main/proto
index b7548df..6882545 160000
--- a/apm-protocol/apm-network/src/main/proto
+++ b/apm-protocol/apm-network/src/main/proto
@@ -1 +1 @@
-Subproject commit b7548df896330bd4cd0ae42d95df9b9cc511f139
+Subproject commit 68825459980d14702de8fb2303c7997624129991
diff --git a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java
index 8e56c6a..78bff0e 100644
--- a/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java
+++ b/oap-server/analyzer/agent-analyzer/src/main/java/org/apache/skywalking/oap/server/analyzer/provider/trace/parser/listener/RPCAnalysisListener.java
@@ -286,20 +286,24 @@ public class RPCAnalysisListener extends CommonAnalysisListener implements Entry
callingIn.prepare();
sourceReceiver.receive(callingIn.toService());
sourceReceiver.receive(callingIn.toServiceInstance());
- sourceReceiver.receive(callingIn.toEndpoint());
sourceReceiver.receive(callingIn.toServiceRelation());
sourceReceiver.receive(callingIn.toServiceInstanceRelation());
- EndpointRelation endpointRelation = callingIn.toEndpointRelation();
- /*
- * Parent endpoint could be none, because in SkyWalking Cross Process Propagation Headers Protocol v2,
- * endpoint in ref could be empty, based on that, endpoint relation maybe can't be established.
- * So, I am making this source as optional.
- *
- * Also, since 6.6.0, source endpoint could be none, if this trace begins by an internal task(local span or exit span), such as Timer,
- * rather than, normally begin as an entry span, like a RPC server side.
- */
- if (endpointRelation != null) {
- sourceReceiver.receive(endpointRelation);
+ // Service is equivalent to endpoint in FaaS (function as a service)
+ // Don't generate endpoint and endpoint dependency to avoid unnecessary costs.
+ if (Layer.FAAS != callingIn.getDestLayer()) {
+ sourceReceiver.receive(callingIn.toEndpoint());
+ EndpointRelation endpointRelation = callingIn.toEndpointRelation();
+ /*
+ * Parent endpoint could be none, because in SkyWalking Cross Process Propagation Headers Protocol v2,
+ * endpoint in ref could be empty, based on that, endpoint relation maybe can't be established.
+ * So, I am making this source as optional.
+ *
+ * Also, since 6.6.0, source endpoint could be none, if this trace begins by an internal task(local span or exit span), such as Timer,
+ * rather than, normally begin as an entry span, like a RPC server side.
+ */
+ if (endpointRelation != null) {
+ sourceReceiver.receive(endpointRelation);
+ }
}
});
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java
index 4f443c6..584596c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/Layer.java
@@ -21,7 +21,6 @@ package org.apache.skywalking.oap.server.core.analysis;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
-import java.util.stream.Collectors;
import org.apache.skywalking.oap.server.core.UnexpectedException;
/**
@@ -126,9 +125,13 @@ public enum Layer {
*/
private final boolean isNormal;
private static final Map<Integer, Layer> DICTIONARY = new HashMap<>();
+ private static final Map<String, Layer> DICTIONARY_NAME = new HashMap<>();
static {
- Arrays.stream(Layer.values()).collect(Collectors.toMap(Layer::value, layer -> layer)).forEach(DICTIONARY::put);
+ Arrays.stream(Layer.values()).forEach(l -> {
+ DICTIONARY.put(l.value, l);
+ DICTIONARY_NAME.put(l.name(), l);
+ });
}
Layer(int value, boolean isNormal) {
@@ -148,6 +151,14 @@ public enum Layer {
return layer;
}
+ public static Layer nameOf(String name) {
+ Layer layer = DICTIONARY_NAME.get(name);
+ if (layer == null) {
+ throw new UnexpectedException("Unknown Layer name");
+ }
+ return layer;
+ }
+
public boolean isNormal() {
return isNormal;
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java
index 6101308..7bf5181 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/management/ui/template/UITemplateInitializer.java
@@ -52,6 +52,7 @@ public class UITemplateInitializer {
Layer.VIRTUAL_DATABASE.name(),
Layer.K8S_SERVICE.name(),
Layer.SO11Y_SATELLITE.name(),
+ Layer.FAAS.name(),
"custom"
};
private final UITemplateManagementService uiTemplateManagementService;
diff --git a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/ManagementServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/ManagementServiceHandler.java
index 1372d5d..7dbb90b 100644
--- a/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/ManagementServiceHandler.java
+++ b/oap-server/server-receiver-plugin/skywalking-management-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/handler/v8/ManagementServiceHandler.java
@@ -35,6 +35,7 @@ import org.apache.skywalking.oap.server.core.source.ServiceInstanceUpdate;
import org.apache.skywalking.oap.server.core.source.ServiceMeta;
import org.apache.skywalking.oap.server.core.source.SourceReceiver;
import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.apache.skywalking.oap.server.library.util.StringUtil;
public final class ManagementServiceHandler {
private final SourceReceiver sourceReceiver;
@@ -47,13 +48,24 @@ public final class ManagementServiceHandler {
.getService(NamingControl.class);
}
+ /**
+ * Identify the layer of instance. Such as ${@link Layer#FAAS}.
+ */
+ private Layer identifyInstanceLayer(String layer) {
+ if (StringUtil.isEmpty(layer)) {
+ return Layer.GENERAL;
+ } else {
+ return Layer.nameOf(layer);
+ }
+ }
+
public Commands reportInstanceProperties(final InstanceProperties request) {
ServiceInstanceUpdate serviceInstanceUpdate = new ServiceInstanceUpdate();
final String serviceName = namingControl.formatServiceName(request.getService());
final String instanceName = namingControl.formatInstanceName(request.getServiceInstance());
serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(serviceName, true));
serviceInstanceUpdate.setName(instanceName);
- serviceInstanceUpdate.setLayer(Layer.GENERAL);
+ serviceInstanceUpdate.setLayer(identifyInstanceLayer(request.getLayer()));
JsonObject properties = new JsonObject();
List<String> ipv4List = new ArrayList<>();
@@ -77,18 +89,19 @@ public final class ManagementServiceHandler {
final long timeBucket = TimeBucket.getTimeBucket(System.currentTimeMillis(), DownSampling.Minute);
final String serviceName = namingControl.formatServiceName(request.getService());
final String instanceName = namingControl.formatInstanceName(request.getServiceInstance());
+ final Layer layer = identifyInstanceLayer(request.getLayer());
ServiceInstanceUpdate serviceInstanceUpdate = new ServiceInstanceUpdate();
serviceInstanceUpdate.setServiceId(IDManager.ServiceID.buildId(serviceName, true));
serviceInstanceUpdate.setName(instanceName);
serviceInstanceUpdate.setTimeBucket(timeBucket);
- serviceInstanceUpdate.setLayer(Layer.GENERAL);
+ serviceInstanceUpdate.setLayer(layer);
sourceReceiver.receive(serviceInstanceUpdate);
ServiceMeta serviceMeta = new ServiceMeta();
serviceMeta.setName(serviceName);
serviceMeta.setTimeBucket(timeBucket);
- serviceMeta.setLayer(Layer.GENERAL);
+ serviceMeta.setLayer(layer);
sourceReceiver.receive(serviceMeta);
return Commands.newBuilder().build();
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java
index 6884430..93f9287 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/RPCAnalysisListenerTest.java
@@ -155,9 +155,9 @@ public class RPCAnalysisListenerTest {
Assert.assertEquals(6, receivedSources.size());
final Service service = (Service) receivedSources.get(0);
final ServiceInstance serviceInstance = (ServiceInstance) receivedSources.get(1);
- final Endpoint endpoint = (Endpoint) receivedSources.get(2);
- final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(3);
- final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(4);
+ final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(2);
+ final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(3);
+ final Endpoint endpoint = (Endpoint) receivedSources.get(4);
final EndpointRelation endpointRelation = (EndpointRelation) receivedSources.get(5);
Assert.assertEquals("mock-service", service.getName());
Assert.assertEquals(500, service.getHttpResponseStatusCode());
@@ -220,9 +220,9 @@ public class RPCAnalysisListenerTest {
Assert.assertEquals(6, receivedSources.size());
final Service service = (Service) receivedSources.get(0);
final ServiceInstance serviceInstance = (ServiceInstance) receivedSources.get(1);
- final Endpoint endpoint = (Endpoint) receivedSources.get(2);
- final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(3);
- final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(4);
+ final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(2);
+ final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(3);
+ final Endpoint endpoint = (Endpoint) receivedSources.get(4);
final EndpointRelation endpointRelation = (EndpointRelation) receivedSources.get(5);
Assert.assertEquals("mock-service", service.getName());
Assert.assertEquals("mock-instance", serviceInstance.getName());
@@ -282,9 +282,9 @@ public class RPCAnalysisListenerTest {
Assert.assertEquals(6, receivedSources.size());
final Service service = (Service) receivedSources.get(0);
final ServiceInstance serviceInstance = (ServiceInstance) receivedSources.get(1);
- final Endpoint endpoint = (Endpoint) receivedSources.get(2);
- final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(3);
- final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(4);
+ final ServiceRelation serviceRelation = (ServiceRelation) receivedSources.get(2);
+ final ServiceInstanceRelation serviceInstanceRelation = (ServiceInstanceRelation) receivedSources.get(3);
+ final Endpoint endpoint = (Endpoint) receivedSources.get(4);
final EndpointRelation endpointRelation = (EndpointRelation) receivedSources.get(5);
Assert.assertEquals("mock-service", service.getName());
Assert.assertEquals("mock-instance", serviceInstance.getName());
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function-relation.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function-relation.json
new file mode 100644
index 0000000..f1f85ca
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function-relation.json
@@ -0,0 +1,368 @@
+/**
+ * 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.
+ */
+
+[
+ {
+ "id": "FaaS-Function-Relation",
+ "configuration": {
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 52,
+ "i": "0",
+ "type": "Tab",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {},
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "activedTabIndex": 1,
+ "children": [
+ {
+ "name": "Overview",
+ "children": [
+ {
+ "x": 12,
+ "y": 24,
+ "w": 12,
+ "h": 12,
+ "i": "0",
+ "type": "Widget",
+ "widget": {
+ "title": "Load (Server) (calls / min)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_relation_server_cpm"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ },
+ {
+ "x": 0,
+ "y": 24,
+ "w": 12,
+ "h": 12,
+ "i": "1",
+ "type": "Widget",
+ "widget": {
+ "title": "Success Rate (Server) (%)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_relation_server_call_sla"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "calculation": "percentage"
+ }
+ ]
+ },
+ {
+ "x": 12,
+ "y": 0,
+ "w": 12,
+ "h": 12,
+ "i": "2",
+ "type": "Widget",
+ "widget": {
+ "title": "Response Time Percentile (Server) (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_relation_server_percentile"
+ ],
+ "metricTypes": [
+ "readLabeledMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "key": "P50, P75, P90, P95, P99",
+ "labelsIndex": "0,1,2,3,4",
+ "label": "P50, P75, P90, P95, P99"
+ }
+ ]
+ },
+ {
+ "x": 0,
+ "y": 0,
+ "w": 12,
+ "h": 12,
+ "i": "3",
+ "type": "Widget",
+ "widget": {
+ "title": "Response Time (Server) (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_relation_server_resp_time"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ },
+ {
+ "x": 0,
+ "y": 12,
+ "w": 12,
+ "h": 12,
+ "i": "4",
+ "type": "Widget",
+ "widget": {
+ "title": "Response Time (Client) (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_relation_client_resp_time"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ },
+ {
+ "x": 12,
+ "y": 12,
+ "w": 12,
+ "h": 12,
+ "i": "5",
+ "type": "Widget",
+ "widget": {
+ "title": "Response Time Percentile (Client) (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_relation_client_percentile"
+ ],
+ "metricTypes": [
+ "readLabeledMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "key": "P50, P75, P90, P95, P99",
+ "labelsIndex": "0,1,2,3,4",
+ "label": "P50, P75, P90, P95, P99"
+ }
+ ]
+ },
+ {
+ "x": 0,
+ "y": 36,
+ "w": 12,
+ "h": 12,
+ "i": "6",
+ "type": "Widget",
+ "widget": {
+ "title": "Success Rate (Client) (%)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_relation_client_call_sla"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "calculation": "percentage"
+ }
+ ]
+ },
+ {
+ "x": 12,
+ "y": 36,
+ "w": 12,
+ "h": 12,
+ "i": "7",
+ "type": "Widget",
+ "widget": {
+ "title": "Load (Client) (calls / min)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_relation_client_cpm"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ }
+ ]
+ },
+ {
+ "name": "Topology",
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 49,
+ "i": "0",
+ "type": "Topology",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {
+ "showDepth": true
+ },
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "moved": false,
+ "linkDashboard": "FaaS-Instance-Relation",
+ "nodeDashboard": "FaaS-Instance",
+ "linkServerMetrics": [
+ "service_instance_relation_server_resp_time",
+ "service_instance_relation_server_cpm"
+ ],
+ "linkClientMetrics": [
+ "service_instance_relation_client_resp_time",
+ "service_instance_relation_client_cpm"
+ ],
+ "nodeMetrics": [
+ "service_instance_sla",
+ "service_instance_cpm",
+ "service_instance_resp_time"
+ ],
+ "legend": [],
+ "description": {},
+ "nodeMetricConfig": [
+ {
+ "unit": "%",
+ "calculation": "percentage",
+ "label": "Success Rate"
+ },
+ {
+ "unit": "calls / min",
+ "label": "Load"
+ },
+ {
+ "unit": "ms",
+ "label": "Latency"
+ }
+ ],
+ "linkServerMetricConfig": [
+ {
+ "unit": "ms",
+ "label": "Server Latency"
+ },
+ {
+ "unit": "calls / min ",
+ "label": "Server Load"
+ }
+ ],
+ "linkClientMetricConfig": [
+ {
+ "unit": "ms",
+ "label": "Client Latency"
+ },
+ {
+ "unit": "calls / min",
+ "label": "Client Load"
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "moved": false
+ }
+ ],
+ "layer": "FAAS",
+ "entity": "ServiceRelation",
+ "name": "FaaS-Function-Relation",
+ "id": "FaaS-Function-Relation",
+ "isRoot": false
+ }
+ }
+]
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function.json
new file mode 100644
index 0000000..496e234
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-function.json
@@ -0,0 +1,508 @@
+/**
+ * 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.
+ */
+
+[
+ {
+ "id": "FaaS-Function",
+ "configuration": {
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 52,
+ "i": "4",
+ "type": "Tab",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {},
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "activedTabIndex": 0,
+ "children": [
+ {
+ "name": "Overview",
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 8,
+ "h": 5,
+ "i": "0",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Apdex"
+ },
+ "graph": {
+ "type": "Card",
+ "fontSize": 14,
+ "textAlign": "center"
+ },
+ "metrics": [
+ "service_apdex"
+ ],
+ "metricTypes": [
+ "readMetricsValue"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "calculation": "apdex"
+ }
+ ]
+ },
+ {
+ "x": 8,
+ "y": 0,
+ "w": 8,
+ "h": 5,
+ "i": "1",
+ "type": "Widget",
+ "widget": {
+ "title": "Success Rate"
+ },
+ "graph": {
+ "type": "Card",
+ "fontSize": 14,
+ "textAlign": "center",
+ "showUnit": true
+ },
+ "metrics": [
+ "service_sla"
+ ],
+ "metricTypes": [
+ "readMetricsValue"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "calculation": "percentage",
+ "unit": "%"
+ }
+ ]
+ },
+ {
+ "x": 16,
+ "y": 0,
+ "w": 8,
+ "h": 5,
+ "i": "2",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Load (calls / min)",
+ "tips": "For HTTP 1/2, gRPC, RPC functions, this means Calls Per Minute (calls / min)"
+ },
+ "graph": {
+ "type": "Card",
+ "fontSize": 14,
+ "textAlign": "center",
+ "showUnit": true
+ },
+ "metrics": [
+ "service_cpm"
+ ],
+ "metricTypes": [
+ "readMetricsValue"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "unit": "calls / min"
+ }
+ ]
+ },
+ {
+ "x": 0,
+ "y": 5,
+ "w": 6,
+ "h": 11,
+ "i": "3",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Avg Response Time (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_resp_time"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {}
+ ]
+ },
+ {
+ "x": 6,
+ "y": 5,
+ "w": 6,
+ "h": 11,
+ "i": "5",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Response Time Percentile (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_percentile"
+ ],
+ "metricTypes": [
+ "readLabeledMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "label": "P50, P75, P90, P95, P99",
+ "labelsIndex": "0, 1, 2, 3, 4"
+ }
+ ]
+ },
+ {
+ "x": 12,
+ "y": 5,
+ "w": 6,
+ "h": 11,
+ "i": "6",
+ "type": "Widget",
+ "widget": {
+ "title": "Success Rate (%)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_sla"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "calculation": "percentage"
+ }
+ ]
+ },
+ {
+ "x": 18,
+ "y": 5,
+ "w": 6,
+ "h": 11,
+ "i": "7",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Load (calls / min)",
+ "tips": "For HTTP 1/2, gRPC, RPC functions, this means Calls Per Minute (calls / min)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_cpm"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ },
+ {
+ "x": 0,
+ "y": 16,
+ "w": 8,
+ "h": 14,
+ "i": "11",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Instances Load (calls / min)",
+ "tips": "For HTTP 1/2, gRPC, RPC functions, this means Calls Per Minute (calls / min),"
+ },
+ "graph": {
+ "type": "TopList"
+ },
+ "metrics": [
+ "service_instance_cpm"
+ ],
+ "metricTypes": [
+ "sortMetrics"
+ ],
+ "metricConfig": [
+ {
+ "sortOrder": "DES",
+ "calculation": "percentage"
+ }
+ ],
+ "moved": false
+ },
+ {
+ "x": 8,
+ "y": 16,
+ "w": 8,
+ "h": 14,
+ "i": "12",
+ "type": "Widget",
+ "widget": {
+ "title": "Slow Function Instance (ms)"
+ },
+ "graph": {
+ "type": "TopList",
+ "topN": "10"
+ },
+ "metrics": [
+ "service_instance_resp_time"
+ ],
+ "metricTypes": [
+ "sortMetrics"
+ ],
+ "metricConfig": [
+ {
+ "sortOrder": "DES",
+ "calculation": "percentage"
+ }
+ ],
+ "moved": false
+ },
+ {
+ "x": 16,
+ "y": 16,
+ "w": 8,
+ "h": 14,
+ "i": "13",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Instance Success Rate (%)"
+ },
+ "graph": {
+ "type": "TopList",
+ "topN": "10"
+ },
+ "metrics": [
+ "service_instance_sla"
+ ],
+ "metricTypes": [
+ "sortMetrics"
+ ],
+ "metricConfig": [
+ {
+ "sortOrder": "ASC",
+ "calculation": "percentage"
+ }
+ ],
+ "moved": false
+ }
+ ]
+ },
+ {
+ "name": "Instance",
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 49,
+ "i": "0",
+ "type": "Widget",
+ "widget": {
+ "title": ""
+ },
+ "graph": {
+ "type": "InstanceList",
+ "dashboardName": "FaaS-Instance",
+ "fontSize": 12
+ },
+ "metrics": [
+ "service_instance_cpm"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "label": "Load",
+ "unit": "calls / min"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "Topology",
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 48,
+ "i": "0",
+ "type": "Topology",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {
+ "showDepth": true
+ },
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "moved": false,
+ "linkDashboard": "FaaS-Function-Relation",
+ "nodeDashboard": [
+ {
+ "scope": "Service",
+ "dashboard": "FaaS-Function"
+ },
+ {
+ "scope": "ServiceInstance",
+ "dashboard": "FaaS-Instance"
+ }
+ ],
+ "linkServerMetrics": [
+ "service_relation_server_resp_time",
+ "service_relation_server_cpm"
+ ],
+ "linkClientMetrics": [
+ "service_relation_client_cpm",
+ "service_relation_client_resp_time"
+ ],
+ "nodeMetrics": [
+ "service_cpm",
+ "service_sla",
+ "service_resp_time"
+ ],
+ "legend": [
+ {
+ "name": "service_sla",
+ "condition": "<",
+ "value": "9500"
+ },
+ {
+ "name": "service_cpm",
+ "condition": ">",
+ "value": "1"
+ }
+ ],
+ "description": {
+ "healthy": "Healthy",
+ "unhealthy": "Success Rate < 95% and Traffic > 1 call/min"
+ },
+ "nodeMetricConfig": [
+ {
+ "unit": "calls / min",
+ "label": "Load"
+ },
+ {
+ "calculation": "percentage",
+ "unit": "%",
+ "label": "Success Rate"
+ },
+ {
+ "unit": "ms",
+ "label": "Latency"
+ }
+ ],
+ "linkServerMetricConfig": [
+ {
+ "unit": "ms",
+ "label": "Server Latency"
+ },
+ {
+ "unit": "calls / min",
+ "label": "Server Load"
+ }
+ ],
+ "linkClientMetricConfig": [
+ {
+ "unit": "calls / min",
+ "label": "Client Load"
+ },
+ {
+ "unit": "ms",
+ "label": "Client Latency"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "Trace",
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 48,
+ "i": "0",
+ "type": "Trace",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {},
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "moved": false
+ }
+ ]
+ }
+ ],
+ "moved": false
+ }
+ ],
+ "layer": "FAAS",
+ "entity": "Service",
+ "name": "FaaS-Function",
+ "id": "FaaS-Function",
+ "isRoot": false
+ }
+ }
+]
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance-relation.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance-relation.json
new file mode 100644
index 0000000..84479ee
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance-relation.json
@@ -0,0 +1,263 @@
+/**
+ * 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.
+ */
+
+[
+ {
+ "id": "FaaS-Instance-Relation",
+ "configuration": {
+ "children": [
+ {
+ "x": 12,
+ "y": 12,
+ "w": 12,
+ "h": 12,
+ "i": "1",
+ "type": "Widget",
+ "widget": {
+ "title": "Response Time Percentile (Client) (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_relation_client_percentile"
+ ],
+ "metricTypes": [
+ "readLabeledMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "key": "P50, P75, P90, P95, P99",
+ "labelsIndex": "0,1,2,3,4",
+ "label": "P50, P75, P90, P95, P99"
+ }
+ ]
+ },
+ {
+ "x": 0,
+ "y": 24,
+ "w": 12,
+ "h": 12,
+ "i": "2",
+ "type": "Widget",
+ "widget": {
+ "title": "Success Rate (Client) (%)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_relation_client_call_sla"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "calculation": "percentage"
+ }
+ ]
+ },
+ {
+ "x": 12,
+ "y": 36,
+ "w": 12,
+ "h": 12,
+ "i": "3",
+ "type": "Widget",
+ "widget": {
+ "title": "Load (Client) (calls / min)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_relation_client_cpm"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ },
+ {
+ "x": 0,
+ "y": 12,
+ "w": 12,
+ "h": 12,
+ "i": "4",
+ "type": "Widget",
+ "widget": {
+ "title": "Response Time (Client) (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_relation_client_resp_time"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ },
+ {
+ "x": 12,
+ "y": 0,
+ "w": 12,
+ "h": 12,
+ "i": "5",
+ "type": "Widget",
+ "widget": {
+ "title": "Response Time Percentile (Server) (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_relation_server_percentile"
+ ],
+ "metricTypes": [
+ "readLabeledMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "key": "P50, P75, P90, P95, P99",
+ "labelsIndex": "0,1,2,3,4",
+ "label": "P50, P75, P90, P95, P99"
+ }
+ ]
+ },
+ {
+ "x": 0,
+ "y": 36,
+ "w": 12,
+ "h": 12,
+ "i": "6",
+ "type": "Widget",
+ "widget": {
+ "title": "Success Rate (Server) (%)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_relation_server_call_sla"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "calculation": "percentage"
+ }
+ ]
+ },
+ {
+ "x": 12,
+ "y": 24,
+ "w": 12,
+ "h": 12,
+ "i": "7",
+ "type": "Widget",
+ "widget": {
+ "title": "Load (Server) (calls / min)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_relation_server_cpm"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ },
+ {
+ "x": 0,
+ "y": 0,
+ "w": 12,
+ "h": 12,
+ "i": "8",
+ "type": "Widget",
+ "widget": {
+ "title": "Response Time (Server) (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_relation_server_resp_time"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ }
+ ],
+ "layer": "FAAS",
+ "entity": "ServiceInstanceRelation",
+ "name": "FaaS-Instance-Relation",
+ "id": "FaaS-Instance-Relation",
+ "isRoot": false
+ }
+ }
+]
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance.json
new file mode 100644
index 0000000..a673c11
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-instance.json
@@ -0,0 +1,166 @@
+/**
+ * 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.
+ */
+
+[
+ {
+ "id": "FaaS-Instance",
+ "configuration": {
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 52,
+ "i": "0",
+ "type": "Tab",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {},
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "activedTabIndex": 0,
+ "children": [
+ {
+ "name": "Overview",
+ "children": [
+ {
+ "x": 0,
+ "y": 29,
+ "w": 24,
+ "h": 14,
+ "i": "0",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Instance Latency (ms)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_resp_time"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ },
+ {
+ "x": 0,
+ "y": 14,
+ "w": 24,
+ "h": 15,
+ "i": "1",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Instance Success Rate (%)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_sla"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "calculation": "percentage"
+ }
+ ]
+ },
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 14,
+ "i": "3",
+ "type": "Widget",
+ "widget": {
+ "title": "Function Instance Load (calls / min)",
+ "tips": "For HTTP 1/2, gRPC, RPC functions, this means Calls Per Minute (calls / min)"
+ },
+ "graph": {
+ "type": "Line",
+ "step": false,
+ "smooth": false,
+ "showSymbol": false,
+ "showXAxis": true,
+ "showYAxis": true
+ },
+ "metrics": [
+ "service_instance_cpm"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false
+ }
+ ]
+ },
+ {
+ "name": "Trace",
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 49,
+ "i": "0",
+ "type": "Trace",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {},
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "moved": false
+ }
+ ]
+ }
+ ],
+ "moved": false
+ }
+ ],
+ "layer": "FAAS",
+ "entity": "ServiceInstance",
+ "name": "FaaS-Instance",
+ "id": "FaaS-Instance",
+ "isRoot": false
+ }
+ }
+]
\ No newline at end of file
diff --git a/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-root.json b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-root.json
new file mode 100644
index 0000000..b4fd8e9
--- /dev/null
+++ b/oap-server/server-starter/src/main/resources/ui-initialized-templates/faas/faas-root.json
@@ -0,0 +1,239 @@
+/**
+ * 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.
+ */
+
+[
+ {
+ "id": "FaaS-Root",
+ "configuration": {
+ "children": [
+ {
+ "x": 0,
+ "y": 2,
+ "w": 24,
+ "h": 52,
+ "i": "1",
+ "type": "Tab",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {},
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "activedTabIndex": 0,
+ "children": [
+ {
+ "name": "Function",
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 48,
+ "i": "0",
+ "type": "Widget",
+ "widget": {
+ "title": ""
+ },
+ "graph": {
+ "type": "ServiceList",
+ "dashboardName": "FaaS-Function",
+ "fontSize": 12,
+ "showXAxis": false,
+ "showYAxis": false,
+ "showGroup": false
+ },
+ "metrics": [
+ "service_cpm"
+ ],
+ "metricTypes": [
+ "readMetricsValues"
+ ],
+ "moved": false,
+ "metricConfig": [
+ {
+ "label": "Load",
+ "unit": "calls / min"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "Topology",
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 48,
+ "i": "0",
+ "type": "Topology",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {
+ "showDepth": true
+ },
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "moved": false,
+ "linkDashboard": "Function-Function-Relation",
+ "nodeDashboard": [
+ {
+ "scope": "Service",
+ "dashboard": "FaaS-Function"
+ },
+ {
+ "scope": "ServiceInstance",
+ "dashboard": "FaaS-Instance"
+ }
+ ],
+ "linkServerMetrics": [
+ "service_relation_server_resp_time",
+ "service_relation_server_cpm"
+ ],
+ "linkClientMetrics": [
+ "service_relation_client_cpm",
+ "service_relation_client_resp_time"
+ ],
+ "nodeMetrics": [
+ "service_cpm",
+ "service_sla",
+ "service_resp_time"
+ ],
+ "legend": [
+ {
+ "name": "service_sla",
+ "condition": "<",
+ "value": "9500"
+ },
+ {
+ "name": "service_cpm",
+ "condition": ">",
+ "value": "1"
+ }
+ ],
+ "description": {
+ "healthy": "Healthy",
+ "unhealthy": "Success Rate < 95% and Traffic > 1 calls / min"
+ },
+ "nodeMetricConfig": [
+ {
+ "unit": "calls / min",
+ "label": "Load"
+ },
+ {
+ "calculation": "percentage",
+ "unit": "%",
+ "label": "Success Rate"
+ },
+ {
+ "unit": "ms",
+ "label": "Latency"
+ }
+ ],
+ "linkServerMetricConfig": [
+ {
+ "unit": "ms",
+ "label": "Server Latency"
+ },
+ {
+ "unit": "calls / min",
+ "label": "Server Load"
+ }
+ ],
+ "linkClientMetricConfig": [
+ {
+ "unit": "calls / min",
+ "label": "Client Load"
+ },
+ {
+ "unit": "ms",
+ "label": "Client Latency"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "Trace",
+ "children": [
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 49,
+ "i": "0",
+ "type": "Trace",
+ "widget": {
+ "title": "Title"
+ },
+ "graph": {},
+ "standard": {},
+ "metrics": [
+ ""
+ ],
+ "metricTypes": [
+ ""
+ ],
+ "moved": false
+ }
+ ]
+ }
+ ],
+ "moved": false
+ },
+ {
+ "x": 0,
+ "y": 0,
+ "w": 24,
+ "h": 2,
+ "i": "2",
+ "type": "Text",
+ "metricTypes": [
+ ""
+ ],
+ "metrics": [
+ ""
+ ],
+ "graph": {
+ "fontColor": "black",
+ "backgroundColor": "white",
+ "content": "FaaS (Function-as-a-Service) is a type of cloud-computing service that allows you to execute code in response to events without the complex infrastructure typically associated with building and launching microservices applications. OpenFunction as a FaaS platform, provides out-of-box observability with SkyWalking integration.",
+ "fontSize": 14,
+ "textAlign": "left",
+ "url": "https://github.com/OpenFunction/samples/blob/main/functions/tracing/README.md"
+ },
+ "moved": false
+ }
+ ],
+ "id": "FaaS-Root",
+ "layer": "FAAS",
+ "entity": "All",
+ "name": "FaaS-Root",
+ "isRoot": true
+ }
+ }
+]
\ No newline at end of file