// Copyright 2023 Grafana Labs // // Licensed 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. package grafanaplugin import ( "github.com/grafana/grafana/packages/grafana-schema/src/common" ) composableKinds: DataQuery: { maturity: "experimental" lineage: { schemas: [{ version: [0, 0] schema: { #TempoQuery: common.DataQuery & { // TraceQL query or trace ID query: string // Logfmt query to filter traces by their tags. Example: http.status_code=200 error=true search?: string // Query traces by service name serviceName?: string // Query traces by span name spanName?: string // Define the minimum duration to select traces. Use duration format, for example: 1.2s, 100ms minDuration?: string // Define the maximum duration to select traces. Use duration format, for example: 1.2s, 100ms maxDuration?: string // Filters to be included in a PromQL query to select data for the service graph. Example: {client="app",service="app"} serviceMapQuery?: string // Use service.namespace in addition to service.name to uniquely identify a service. serviceMapIncludeNamespace?: bool // Defines the maximum number of traces that are returned from Tempo limit?: int64 // Use the streaming API to get partial results as they are available streaming?: bool filters: [...#TraceqlFilter] } @cuetsy(kind="interface") @grafana(TSVeneer="type") // search = Loki search, nativeSearch = Tempo search for backwards compatibility #TempoQueryType: "traceql" | "traceqlSearch" | "search" | "serviceMap" | "upload" | "nativeSearch" | "traceId" | "clear" @cuetsy(kind="type") // The state of the TraceQL streaming search query #SearchStreamingState: "pending" | "streaming" | "done" | "error" @cuetsy(kind="enum") // static fields are pre-set in the UI, dynamic fields are added by the user #TraceqlSearchScope: "unscoped" | "resource" | "span" @cuetsy(kind="enum") #TraceqlFilter: { // Uniquely identify the filter, will not be used in the query generation id: string // The tag for the search filter, for example: .http.status_code, .service.name, status tag?: string // The operator that connects the tag to the value, for example: =, >, !=, =~ operator?: string // The value for the search filter value?: string | [...string] // The type of the value, used for example to check whether we need to wrap the value in quotes when generating the query valueType?: string // The scope of the filter, can either be unscoped/all scopes, resource or span scope?: #TraceqlSearchScope } @cuetsy(kind="interface") } }] lenses: [] } }