All Downloads are FREE. Search and download functionalities are using the official Maven repository.

query-protocol.metrics-v2.graphqls Maven / Gradle / Ivy

There is a newer version: 10.1.0
Show newest version
# 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.

# Legacy metrics query protocol deprecated since 9.5.0. Replaced by the metrics-v3.

# 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 MetricsCondition {
    # Metrics name, which should be defined in OAL script
    # Such as:
    # endpoint_resp_time = from(Endpoint.latency).avg()
    # Then, `endpoint_resp_time`
    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
}

# Since 9.5.0, a value is Long type, and also nullable.
type NullableValue {
    # 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: Long!
    # isEmptyValue indicates whether value == 0 represents actually zero(false, default) or no data(true).
    isEmptyValue: Boolean!
}

extend type Query {
    # Since 9.5.0 `typeOfMetrics` and `listMetrics` are moved to metrics-v3.
    # 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 metrics single value in the duration of required metrics
    # NullableValue#isEmptyValue == true indicates no telemetry data rather than aggregated value is actually zero.
    readNullableMetricsValue(condition: MetricsCondition!, duration: Duration!): NullableValue!
    # 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
    # Deprecated since 9.3.0, replaced by readRecords defined in record.graphqls
    # Read the sampled records
    # TopNCondition#scope is not required.
    readSampledRecords(condition: TopNCondition!, duration: Duration!): [SelectedRecord!]!
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy