# 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 {
    DAY
    HOUR
    MINUTE
    SECOND
}

enum Order {
    ASC
    DES
}

input Pagination {
    # pageNum starts in 1, the default is 1.
    pageNum: Int
    pageSize: Int!
    # default false
    needTotal: Boolean
}

enum Language {
    # For not language based agent, the language is impossible to tell.
    UNKNOWN
    JAVA
    DOTNET
    NODEJS
    PYTHON
    RUBY
    GO
    LUA
    PHP
}

enum Scope {
    All
    Service
    ServiceInstance
    Endpoint
    ServiceRelation
    ServiceInstanceRelation
    EndpointRelation
}

enum DetectPoint {
    CLIENT
    SERVER
    PROXY
}
