Init some graphQL protocol
This commit is contained in:
parent
78f93492f1
commit
34a6c4dcf0
|
|
@ -0,0 +1,70 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
schema {
|
||||||
|
query: Query
|
||||||
|
mutation: Mutation
|
||||||
|
}
|
||||||
|
|
||||||
|
#Root node
|
||||||
|
type Query {
|
||||||
|
version: String
|
||||||
|
}
|
||||||
|
|
||||||
|
type Mutation {
|
||||||
|
version: String
|
||||||
|
}
|
||||||
|
|
||||||
|
# The Duration defines the start and end time for each query operation.
|
||||||
|
# Fields: `start` and `end`
|
||||||
|
# represents the time span. And each of them matches the step.
|
||||||
|
# ref https://www.ietf.org/rfc/rfc3339.txt
|
||||||
|
# The time formats are
|
||||||
|
# `SECOND` step: yyyy-MM-dd HHmmss
|
||||||
|
# `MINUTE` step: yyyy-MM-dd HHmm
|
||||||
|
# `HOUR` step: yyyy-MM-dd HH
|
||||||
|
# `DAY` step: yyyy-MM-dd
|
||||||
|
# `MONTH` step: yyyy-MM
|
||||||
|
# Field: `step`
|
||||||
|
# represents the accurate time point.
|
||||||
|
# e.g.
|
||||||
|
# if step==HOUR , start=2017-11-08 09, end=2017-11-08 19
|
||||||
|
# then
|
||||||
|
# metrics from the following time points expected
|
||||||
|
# 2017-11-08 9:00 -> 2017-11-08 19:00
|
||||||
|
# there are 11 time points (hours) in the time span.
|
||||||
|
input Duration {
|
||||||
|
start: String!
|
||||||
|
end: String!
|
||||||
|
step: Step!
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Step {
|
||||||
|
MONTH
|
||||||
|
DAY
|
||||||
|
HOUR
|
||||||
|
MINUTE
|
||||||
|
SECOND
|
||||||
|
}
|
||||||
|
|
||||||
|
input Pagination {
|
||||||
|
# pageNum starts in 1, the default is 1.
|
||||||
|
pageNum: Int
|
||||||
|
pageSize: Int!
|
||||||
|
# default false
|
||||||
|
needTotal: Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
input MetricCondition {
|
||||||
|
# Metric name, which should be defined in OAL script
|
||||||
|
# Such as:
|
||||||
|
# Endpoint_avg = from(Endpoint.latency).avg()
|
||||||
|
# Then, `Endpoint_avg`
|
||||||
|
name: String!
|
||||||
|
# Id in this metric type.
|
||||||
|
# In the above case, the id should be endpoint id.
|
||||||
|
id: ID
|
||||||
|
topN: TopN
|
||||||
|
}
|
||||||
|
|
||||||
|
# TopN filter
|
||||||
|
input TopN {
|
||||||
|
n: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
type LinearIntValues {
|
||||||
|
values: [KVInt!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type KVInt {
|
||||||
|
id: ID!
|
||||||
|
# This is the value, the caller must understand the Unit.
|
||||||
|
# Such as:
|
||||||
|
# 1. If ask for cpm metric, the unit and result should be count.
|
||||||
|
# 2. If ask for response time (p99 or avg), the unit should be millisecond.
|
||||||
|
value: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
type Thermodynamic {
|
||||||
|
# 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: [[Long]!]!
|
||||||
|
axisYStep: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
extend type Query {
|
||||||
|
getLinearIntValues(metric: MetricCondition!, duration: Duration!): LinearIntValues
|
||||||
|
getThermodynamic(metric: MetricCondition!, duration: Duration!): Thermodynamic
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# Query the cluster brief based on the given duration
|
||||||
|
type ClusterBrief {
|
||||||
|
numOfService: Int!
|
||||||
|
numOfServiceInstance: Int!
|
||||||
|
numOfDatabase: Int!
|
||||||
|
numOfCache: Int!
|
||||||
|
numOfMQ: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
# Query the trend of alarm rate based on the given duration
|
||||||
|
type AlarmTrend {
|
||||||
|
numOfAlarmRate: [Int]!
|
||||||
|
}
|
||||||
|
|
||||||
|
type Service {
|
||||||
|
id: ID!
|
||||||
|
name: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServiceInstance {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extend type Query {
|
||||||
|
getGlobalBrief(duration: Duration!): ClusterBrief
|
||||||
|
getAlarmTrend(duration: Duration!): AlarmTrend
|
||||||
|
|
||||||
|
getAllService(duration: Duration!): [Service!]!
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
# 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!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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!
|
||||||
|
}
|
||||||
|
|
||||||
|
# The Call represents a directed distributed call,
|
||||||
|
# from the `source` to the `target`.
|
||||||
|
type Call {
|
||||||
|
source: ID!
|
||||||
|
target: ID!
|
||||||
|
isAlert: Boolean
|
||||||
|
# The protocol and tech stack used in this distributed call
|
||||||
|
callType: String!
|
||||||
|
cpm: Long!
|
||||||
|
# Unit: millisecond
|
||||||
|
avgResponseTime: Long!
|
||||||
|
}
|
||||||
|
|
||||||
|
enum NodeType {
|
||||||
|
SERVICE,
|
||||||
|
ENDPOINT,
|
||||||
|
USER
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extend type Query {
|
||||||
|
# Query the global topolgoy
|
||||||
|
getGlobalTopology(duration: Duration!): Topology
|
||||||
|
# Query the topology, based on the given service
|
||||||
|
getServiceTopology(serviceId: ID!, duration: Duration!): Topology
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue