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-query-protocol.git


The following commit(s) were added to refs/heads/master by this push:
     new 99ab6a5  Introduce SkyWalking v9 core query protocol. (#63)
99ab6a5 is described below

commit 99ab6a554c4b7474cf8fee511a13f9db87670979
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Thu Dec 9 21:32:40 2021 +0800

    Introduce SkyWalking v9 core query protocol. (#63)
---
 metadata-v2.graphqls | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++
 metadata.graphqls    |  43 ++-------------------
 metrics-v2.graphqls  |  21 ++++++-----
 topology.graphqls    |  38 +++++++++----------
 4 files changed, 135 insertions(+), 70 deletions(-)

diff --git a/metadata-v2.graphqls b/metadata-v2.graphqls
new file mode 100644
index 0000000..2bed21a
--- /dev/null
+++ b/metadata-v2.graphqls
@@ -0,0 +1,103 @@
+# 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.
+
+# Metadata query v2 protocol provides the layer-based query to various 
services monitored by SkyWalking ecosystem.
+# It would adopt multiple-layer modern cloud native infrastructure.
+# In the v9 core, v1 protocol is provided on the top of the v2 implementation.
+# The v1's services, Databases, Browsers are all services with layer=general, 
layer=database, layer=browser.
+# Each service would have native definition about instance and endpoint.
+
+# Service is a logic concept, representing a collection of runnable context.
+type Service {
+    id: ID!
+    name: String!
+    # The custom/logi group of the service
+    group: String!
+    # Layer represents an abstract framework in the computer science, such as 
operation system(VM layer), Kubernetes(k8s layer),
+    # Service Mesh(typical Istio+Envoy layer).
+    # The name of layer is a string, but we would reserve some for 
visualization(UI)
+    # - os-linux
+    # - k8s
+    # - general(agent-installed)
+    # - faas
+    # - mesh
+    # - mesh-cp
+    # - mesh-dp
+    # - database
+    # - cache
+    # - browser
+    # - skywalking
+    #
+    # UI uses this literal string names to provide various layout for their 
services with metrics.
+    layer: String!
+}
+
+# The minimal runnable unit in the service. It provides consistent and 
fundamental capabilities in physical perspective.
+# A service, as a logic unit, have multiple instances in the runtime.
+# Such as, an OS-level processor, a pod in k8s, a running function in the FAAS 
engine.
+type ServiceInstance {
+    id: ID!
+    name: String!
+    attributes: [Attribute!]!
+    language: Language!
+    instanceUUID: String!
+}
+
+type Attribute {
+    name: String!
+    value: String!
+}
+
+# The endpoint is the minimal functional unit.
+# Typically, it presents a URI or gRPC service name in the service.
+# Different from instance, this is a logical functional unit.
+type Endpoint {
+    id: ID!
+    name: String!
+}
+
+type EndpointInfo {
+    id: ID!
+    name: String!
+    serviceId: ID!
+    serviceName: String!
+}
+
+type TimeInfo {
+  # server current timezone, format: +0800
+  timezone: String
+  # server current timestamp, format: 1569124528392
+  currentTimestamp: Long
+}
+
+extend type Query {
+    # Read the service list according to layer.
+    listServices(layer: String!): [Service!]!
+    # Read service instance list.
+    listInstances(duration: Duration!, serviceId: ID!): [ServiceInstance!]!
+
+    # Search and find service according to given ID. Return null if not 
existing.
+    findService(serviceId: String!): Service
+    # Search and find service instance according to given ID. Return null if 
not existing.
+    findInstance(instanceId: String!): ServiceInstance
+    # Search and find matched endpoints according to given service and 
keyword(optional)
+    # If no keyword, randomly choose endpoint based on `limit` value.
+    findEndpoint(keyword: String, serviceId: ID!, limit: Int!): [Endpoint!]!
+
+    # Legacy query(s) from v1
+    getEndpointInfo(endpointId: ID!): EndpointInfo
+    getTimeInfo: TimeInfo
+}
diff --git a/metadata.graphqls b/metadata.graphqls
index c4f3ab5..76f4ec3 100644
--- a/metadata.graphqls
+++ b/metadata.graphqls
@@ -14,6 +14,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# Legacy metrics query protocol
+# Replaced by the metadata-v2 in the future
+
 # Query the cluster brief based on the given duration
 type ClusterBrief {
     numOfService: Int!
@@ -23,50 +26,12 @@ type ClusterBrief {
     numOfMQ: Int!
 }
 
-type Service {
-    id: ID!
-    name: String!
-    group: String!
-}
-
-type ServiceInstance {
-    id: ID!
-    name: String!
-    attributes: [Attribute!]!
-    language: Language!
-    instanceUUID: String!
-}
-
-type Attribute {
-    name: String!
-    value: String!
-}
-
-type Endpoint {
-    id: ID!
-    name: String!
-}
-
-type EndpointInfo {
-    id: ID!
-    name: String!
-    serviceId: ID!
-    serviceName: String!
-}
-
 type Database {
     id: ID!
     name: String!
     type: String!
 }
 
-type TimeInfo {
-  # server current timezone, format: +0800
-  timezone: String
-  # server current timestamp, format: 1569124528392
-  currentTimestamp: Long
-}
-
 extend type Query {
     # Normal service related meta info 
     getAllServices(duration: Duration!, group: String): [Service!]!
@@ -85,11 +50,9 @@ extend type Query {
     # Consider there are huge numbers of endpoint,
     # must use endpoint owner's service id, keyword and limit filter to do 
query.
     searchEndpoint(keyword: String!, serviceId: ID!, limit: Int!): [Endpoint!]!
-    getEndpointInfo(endpointId: ID!): EndpointInfo
 
     # Database related meta info.
     getAllDatabases(duration: Duration!): [Database!]!
-    getTimeInfo: TimeInfo
 
     # Deprecated query, left only for not breaking UI for short term.
     getGlobalBrief(duration: Duration!): ClusterBrief
diff --git a/metrics-v2.graphqls b/metrics-v2.graphqls
index d1cf512..be5b4a3 100644
--- a/metrics-v2.graphqls
+++ b/metrics-v2.graphqls
@@ -18,6 +18,10 @@
 # defined in the metric.graphql, top-n-records.graphqls, and 
aggregation.graphqls.
 # By leveraging the new ID rule(no register) in the v8, we could query metrics 
based on name(s) directly.
 
+# Metrics v2.1 is introduced since SkyWalking v9 core.
+# Change logs:
+# - The normal and destNormal tags have been deprecated.
+
 # Metrics type is a new concept since v8.
 enum MetricsType {
     # Can't find the metrics type definition.
@@ -42,17 +46,16 @@ input Entity {
     #    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.
-    normal: 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.
-    destNormal: Boolean
     destServiceInstanceName: String
     destEndpointName: String
+
+    # Deprecated since 9.0.0. Don't need to use this anymore
+    normal: Boolean
+    # Deprecated since 9.0.0. Don't need to use this anymore
+    destNormal: Boolean
 }
 
 input MetricsCondition {
@@ -70,15 +73,15 @@ input TopNCondition {
     name: String!
     # Could be null if query the global top N.
     parentService: String
-    # Normal service is the service having installed agent or metrics reported 
directly.
-    # Unnormal service is conjectural service, usually detected by the agent.
-    normal: Boolean
     # Indicate the metrics entity scope.
     # This is required in sortMetrics query.
     # Only accept scope = Service/ServiceInstance/Endpoint, ignore others due 
to those are pointless.
     scope: Scope
     topN: Int!
     order: Order!
+
+    # Deprecated since 9.0.0. Don't need to use this anymore
+    normal: Boolean
 }
 
 # Define the metrics provided in the OAP server.
diff --git a/topology.graphqls b/topology.graphqls
index 48a76b1..f4217a3 100644
--- a/topology.graphqls
+++ b/topology.graphqls
@@ -14,6 +14,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# Topology v1.1 is introduced from SkyWalking v9 core.
+# Change logs
+# - Deprecated `isReal`, due to in v9, service is about real or not real, it 
has native layer attribute to determine its type and scope.
+# - Deprecated `type` in instance topology and endpoint dependency, because by 
their latest definitions, they are subsets of services, no point has specific 
type.
+# - All deprecated fields are kept for keeping back-forward compatibility. 
`isReal=true` and `type=(empty string)` are default values only.
+
 # The overview topology of the whole application cluster or services,
 type Topology {
     nodes: [Node!]!
@@ -34,9 +40,7 @@ type EndpointTopology {
 
 # Node in Topology
 type Node {
-    # The global id of each node,
-    # 1. Service id
-    # 2. Endpoint id
+    # The service ID of the node.
     id: ID!
     # The literal name of the #id.
     name: String!
@@ -44,7 +48,8 @@ type Node {
     # 1. The service provider/middleware tech, such as: Tomcat, SpringMVC
     # 2. Conjectural Service, e.g. MySQL, Redis, Kafka
     type: String
-    # It is a conjecture node or real node, to represent a service or endpoint.
+
+    # Deprecated since 9.0.0. Don't need to use this anymore
     isReal: Boolean!
 }
 
@@ -58,12 +63,11 @@ type ServiceInstanceNode {
     serviceId: ID!
     # The literal name of the #serviceId.
     serviceName: String!
-    # The type name may be
-    # 1. The service provider/middleware tech, such as: Tomcat, SpringMVC
-    # 2. Conjectural Service, e.g. MySQL, Redis, Kafka
+
+    # Deprecated since 9.0.0. Instance is an executable unit of service, it 
doesn't have its own type.
     type: String
-    # It is a conjecture node or real node, to represent an instance.
-    isReal: Boolean!
+    # Deprecated since 9.0.0. Don't need to use this anymore
+    isReal: Boolean
 }
 
 # Node in EndpointTopology
@@ -76,12 +80,11 @@ type EndpointNode {
     serviceId: ID!
     # The literal name of the #serviceId.
     serviceName: String!
-    # The type name may be
-    # 1. The service provider/middleware tech, such as: Tomcat, SpringMVC
-    # 2. Conjectural Service, e.g. MySQL, Redis, Kafka
+
+    # Deprecated since 9.0.0. The endpoint is the minimal functional unit., it 
doesn't have its own type.
     type: String
-    # It is a conjuecture node or real node, to represent an instance.
-    isReal: Boolean!
+    # Deprecated since 9.0.0. Don't need to use this anymore
+    isReal: Boolean
 }
 
 # The Call represents a directed distributed call,
@@ -98,13 +101,6 @@ type Call {
     detectPoints: [DetectPoint!]!
 }
 
-enum NodeType {
-    SERVICE,
-    ENDPOINT,
-    USER
-}
-
-
 extend type Query {
     # Query the global topology
     getGlobalTopology(duration: Duration!): Topology

Reply via email to