blob: d1cf5129f897ff8376dcaff613f5b70a393087a1 [file] [log] [blame]
# 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, 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 type is a new concept since v8.
enum MetricsType {
# Can't find the metrics type definition.
UNKNOWN
# Regular value type is suitable for readMetricsValue, readMetricsValues and sortMetrics
REGULAR_VALUE
# Metrics value includes multiple labels, is suitable for readLabeledMetricsValues
# Label should be assigned before the query happens, such as at the setting stage
LABELED_VALUE
# Heatmap value suitable for readHeatMap
HEATMAP
# Top metrics is for readSampledRecords only.
SAMPLED_RECORD
}
input Entity {
# 1. scope=All, no name is required.
# 2. scope=Service, ServiceInstance and Endpoint, set necessary 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.
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
}
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 TopNCondition {
# Metrics name
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!
}
# Define the metrics provided in the OAP server.
type MetricDefinition {
name: String!
type: MetricsType!
# Catalog includes
# SERVICE_CATALOG,SERVICE_INSTANCE_CATALOG,ENDPOINT_CATALOG,
# SERVICE_RELATION_CATALOG,SERVICE_INSTANCE_RELATION_CATALOG_NAME,ENDPOINT_RELATION_CATALOG_NAME
catalog: String
}
type MetricsValues {
# Could be null if no label assigned in the query condition
label: String
# Values of this label value.
values: IntValues
}
type HeatMap {
# Each element of values matches the time point of the query duration.
# The element in the IntValues represents the value of the same index bucket
values: [HeatMapColumn!]!
# Bucket describes the ranges of #values represent.
buckets: [Bucket!]!
}
type HeatMapColumn {
id: ID!
values: [Long!]!
}
# Bucket represents the value range.
type Bucket {
# Usually the number represents the min value of this bucket,
# could be `infinite-` string as unbounded value
min: String!
# Usually the number represents the max value of this bucket,
# could be `infinite+` string as unbounded value
max: String!
}
type SelectedRecord {
# Literal string name for visualization
name: String!
# ID represents the owner of this entity.
id: ID!
# Usually an integer value as this is metrics.
value: String
# Have value, Only if the record has related trace id.
# UI should show this as an attached value.
refId: ID
}
extend type Query {
# Metrics definition metadata query. Response the metrics type which determines the suitable query methods.
typeOfMetrics(name: String!): MetricsType!
# Get the list of all available metrics in the current OAP server.
# Param, regex, could be used to filter the metrics by name.
listMetrics(regex: String): [MetricDefinition!]!
# Read metrics single value in the duration of required metrics
readMetricsValue(condition: MetricsCondition!, duration: Duration!): Long!
# Read time-series values in the duration of required metrics
readMetricsValues(condition: MetricsCondition!, duration: Duration!): MetricsValues!
# Read entity list of required metrics and parent entity type.
sortMetrics(condition: TopNCondition!, duration: Duration!): [SelectedRecord!]!
# Read value in the given time duration, usually as a linear.
# labels: the labels you need to query.
readLabeledMetricsValues(condition: MetricsCondition!, labels: [String!]!, duration: Duration!): [MetricsValues!]!
# Heatmap is bucket based value statistic result.
readHeatMap(condition: MetricsCondition!, duration: Duration!): HeatMap
# Read the sampled records
# TopNCondition#scope is not required.
readSampledRecords(condition: TopNCondition!, duration: Duration!): [SelectedRecord!]!
}