| # 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. | 
 |  | 
 | # The overview topology of the whole application cluster or services, | 
 | type Topology { | 
 |     nodes: [Node!]! | 
 |     calls: [Call!]! | 
 | } | 
 |  | 
 | # The instance topology based on the given serviceIds | 
 | type ServiceInstanceTopology { | 
 |     nodes: [ServiceInstanceNode!]! | 
 |     calls: [Call!]! | 
 | } | 
 |  | 
 | # Node in Topology | 
 | type Node { | 
 |     # The global id of each node, | 
 |     # 1. Service id | 
 |     # 2. Endpoint id | 
 |     id: ID! | 
 |     # The literal name of the #id. | 
 |     name: String! | 
 |     # The type name may be | 
 |     # 1. The service provider/middleware tech, such as: Tomcat, SpringMVC | 
 |     # 2. Conjectural Service, e.g. MySQL, Redis, Kafka | 
 |     type: String | 
 |     # It is a conjuecture node or real node, to represent a service or endpoint. | 
 |     isReal: Boolean! | 
 | } | 
 |  | 
 | # Node in ServiceInstanceTopology | 
 | type ServiceInstanceNode { | 
 |     # The instance id of each node, | 
 |     id: ID! | 
 |     # The literal name of the #id. | 
 |     name: String! | 
 |     # Service id | 
 |     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 | 
 |     type: String | 
 |     # It is a conjuecture node or real node, to represent an instance. | 
 |     isReal: Boolean! | 
 | } | 
 |  | 
 | # The Call represents a directed distributed call, | 
 | # from the `source` to the `target`. | 
 | type Call { | 
 |     source: ID! | 
 |     # The protocol and tech stack used at source side in this distributed call | 
 |     sourceComponents: [ID!]! | 
 |     target: ID! | 
 |     # The protocol and tech stack used at target side in this distributed call | 
 |     targetComponents: [ID!]! | 
 |     id: ID! | 
 |     # The detect Points of this distributed call. | 
 |     detectPoints: [DetectPoint!]! | 
 | } | 
 |  | 
 | enum NodeType { | 
 |     SERVICE, | 
 |     ENDPOINT, | 
 |     USER | 
 | } | 
 |  | 
 |  | 
 | extend type Query { | 
 |     # Query the global topology | 
 |     getGlobalTopology(duration: Duration!): Topology | 
 |     # Query the topology, based on the given service | 
 |     getServiceTopology(serviceId: ID!, duration: Duration!): Topology | 
 |     # Query the topology, based on the given services. | 
 |     # `#getServiceTopology` could be replaced by this. | 
 |     getServicesTopology(serviceIds: [ID!]!, duration: Duration!): Topology | 
 |     # Query the instance topology, based on the given clientServiceId and serverServiceId | 
 |     getServiceInstanceTopology(clientServiceId: ID!, serverServiceId: ID!, duration: Duration!): ServiceInstanceTopology | 
 |     # Query the topology, based on the given endpoint | 
 |     getEndpointTopology(endpointId: ID!, duration: Duration!): Topology | 
 | } |