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 2020/04/15 15:37:19 UTC

[skywalking-query-protocol] 01/01: Add metrics v2 query protocol

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

wusheng pushed a commit to branch metrics
in repository https://gitbox.apache.org/repos/asf/skywalking-query-protocol.git

commit a2f1ac5c1a81f2df2b8645aff153128f6b9c0756
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Wed Apr 15 23:36:32 2020 +0800

    Add metrics v2 query protocol
---
 common.graphqls     | 23 +++++++++++++++
 metadata.graphqls   | 11 -------
 metrics-v2.graphqls | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 106 insertions(+), 11 deletions(-)

diff --git a/common.graphqls b/common.graphqls
index 05b9b9a..a08a240 100644
--- a/common.graphqls
+++ b/common.graphqls
@@ -52,6 +52,28 @@ input Duration {
     step: Step!
 }
 
+input Entity {
+    # 1. scope=All, no name is required.
+    # 2. scope=Service, ServiceInstance and Endpoint, set neccessary serviceName/serviceInstanceName/endpointName
+    # 3. Scope=ServiceRelation, ServiceInstanceRelation and EndpointRelation
+    #    serviceName/serviceInstanceName/endpointName is/are the source(s)
+    #    destServiceName/destServiceInstanceName/destEndpointName is/are destination(s)
+    #    set necessary names of sources and destinations.
+    scope: Scope!
+    serviceName: String
+    # Normal service is the service having installed agent or metrics reported directly.
+    # Unnormal service is conjectural service, usually detected by the agent.
+    isNormal: Boolean
+    serviceInstanceName: String
+    endpointName: String
+    destServiceName: String
+    # Normal service is the service having installed agent or metrics reported directly.
+    # Unnormal service is conjectural service, usually detected by the agent.
+    destIsNormal: Boolean
+    destServiceInstanceName: String
+    destEndpointName: String
+}
+
 enum Step {
     DAY
     HOUR
@@ -86,6 +108,7 @@ enum Language {
 }
 
 enum Scope {
+    All
     Service
     ServiceInstance
     Endpoint
diff --git a/metadata.graphqls b/metadata.graphqls
index f7e9ec6..fe03fcc 100644
--- a/metadata.graphqls
+++ b/metadata.graphqls
@@ -14,15 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Query the cluster brief based on the given duration
-type ClusterBrief {
-    numOfService: Int!
-    numOfEndpoint: Int!
-    numOfDatabase: Int!
-    numOfCache: Int!
-    numOfMQ: Int!
-}
-
 type Service {
     id: ID!
     name: String!
@@ -67,8 +58,6 @@ type TimeInfo {
 }
 
 extend type Query {
-    getGlobalBrief(duration: Duration!): ClusterBrief
-
     # Normal service related metainfo 
     getAllServices(duration: Duration!): [Service!]!
     searchServices(duration: Duration!, keyword: String!): [Service!]!
diff --git a/metrics-v2.graphqls b/metrics-v2.graphqls
new file mode 100644
index 0000000..ebefd2a
--- /dev/null
+++ b/metrics-v2.graphqls
@@ -0,0 +1,83 @@
+# 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.
+
+# Metrics v2 query protocol is an alternative metrics query(s) of original v1, defined in the metric.graphql and aggregation.graphqls.
+# By leveraging the new ID rule(no register) in the v8, we could query metrics based on name(s) directly.
+
+input MetricsCondition {
+    # Metrics name, which should be defined in OAL script
+    # Such as:
+    # Endpoint_avg = from(Endpoint.latency).avg()
+    # Then, `Endpoint_avg`
+    name: String!
+    # Follow entity definition description.
+    entity: Entity
+}
+
+input BatchMetricsConditions {
+    # Metrics name, which should be defined in OAL script
+    # Such as:
+    # Endpoint_avg = from(Endpoint.latency).avg()
+    # Then, `Endpoint_avg`
+    name: String!
+    # Follow entity definition description.
+    ids: [Entity!]!
+}
+
+input TopNCondition {
+    # Metrics name
+    name: String!
+    # Follow entity definition description.
+    entity: Entity
+    topN: Int!
+    order: Order!
+}
+
+type HeatMap {
+    # Each element in nodes represents a point in Thermodynamic Diagram
+    # And the element includes three values:
+    # 1) Time Bucket based on query duration
+    # 2) Response time index.
+    #    Response time = [responseTimeStep * index, responseTimeStep * (index+1))
+    #    The last element: [Response Time * index, MAX)
+    # 3) The number of calls in this response time duration.
+    #
+    # Example:
+    # [ [0, 0, 10], [0, 1, 43], ...]
+    # These ^^^ two represent the left bottom element, and another element above it.
+    nodes: [[Int]!]!
+    axisYStep: Int!
+}
+
+type TopN {
+    name: String!
+    id: ID!
+    value: Long!
+}
+
+extend type Query {
+    getValuesByEntity(metrics: BatchMetricsConditions!, duration: Duration!): IntValues
+    getLinearIntValuesByEntity(metrics: MetricsCondition!, duration: Duration!): IntValues
+    # Query the type of metrics including multiple values, and format them as multiple linears.
+    # The seq of these multiple lines base on the calculation func in OAL
+    # Such as, should us this to query the result of func percentile(50,75,90,95,99) in OAL,
+    # then five lines will be responsed, p50 is the first element of return value.
+    getMultipleLinearIntValuesByEntity(metrics: MetricsCondition!, linearIndex: [Int!]!, duration: Duration!): [IntValues!]!
+    getHeatmapByEntity(metrics: MetricsCondition!, duration: Duration!): HeatMap
+    # Get TopN from the given entity and parameters.
+    # The alternative query of get* in aggregation.graphqls
+    getTopN(metrics: TopNCondition!, order: Order!): [TopN!]!
+}
\ No newline at end of file