QueryService: Use types from sdk (#84029)
This commit is contained in:
@@ -3,26 +3,10 @@ package v0alpha1
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
)
|
||||
|
||||
// The query runner interface
|
||||
type QueryRunner interface {
|
||||
// Runs the query as the user in context
|
||||
ExecuteQueryData(ctx context.Context,
|
||||
// The k8s group for the datasource (pluginId)
|
||||
datasource schema.GroupVersion,
|
||||
|
||||
// The datasource name/uid
|
||||
name string,
|
||||
|
||||
// The raw backend query objects
|
||||
query []GenericDataQuery,
|
||||
) (*backend.QueryDataResponse, error)
|
||||
}
|
||||
|
||||
type DataSourceApiServerRegistry interface {
|
||||
// Get the group and preferred version for a plugin
|
||||
GetDatasourceGroupVersion(pluginId string) (schema.GroupVersion, error)
|
||||
@@ -1,240 +1,59 @@
|
||||
package v0alpha1
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
// Generic query request with shared time across all values
|
||||
// Copied from: https://github.com/grafana/grafana/blob/main/pkg/api/dtos/models.go#L62
|
||||
type GenericQueryRequest struct {
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
type QueryDataRequest struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
|
||||
// From Start time in epoch timestamps in milliseconds or relative using Grafana time units.
|
||||
// example: now-1h
|
||||
From string `json:"from,omitempty"`
|
||||
|
||||
// To End time in epoch timestamps in milliseconds or relative using Grafana time units.
|
||||
// example: now
|
||||
To string `json:"to,omitempty"`
|
||||
|
||||
// queries.refId – Specifies an identifier of the query. Is optional and default to “A”.
|
||||
// queries.datasourceId – Specifies the data source to be queried. Each query in the request must have an unique datasourceId.
|
||||
// queries.maxDataPoints - Species maximum amount of data points that dashboard panel can render. Is optional and default to 100.
|
||||
// queries.intervalMs - Specifies the time interval in milliseconds of time series. Is optional and defaults to 1000.
|
||||
// required: true
|
||||
// example: [ { "refId": "A", "intervalMs": 86400000, "maxDataPoints": 1092, "datasource":{ "uid":"PD8C576611E62080A" }, "rawSql": "SELECT 1 as valueOne, 2 as valueTwo", "format": "table" } ]
|
||||
Queries []GenericDataQuery `json:"queries"`
|
||||
|
||||
// required: false
|
||||
Debug bool `json:"debug,omitempty"`
|
||||
// The time range used when not included on each query
|
||||
data.QueryDataRequest `json:",inline"`
|
||||
}
|
||||
|
||||
type DataSourceRef struct {
|
||||
// The datasource plugin type
|
||||
Type string `json:"type"`
|
||||
// Wraps backend.QueryDataResponse, however it includes TypeMeta and implements runtime.Object
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
type QueryDataResponse struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
|
||||
// Datasource UID
|
||||
UID string `json:"uid"`
|
||||
// Backend wrapper (external dependency)
|
||||
backend.QueryDataResponse `json:",inline"`
|
||||
}
|
||||
|
||||
// GenericDataQuery is a replacement for `dtos.MetricRequest` that provides more explicit types
|
||||
type GenericDataQuery struct {
|
||||
// RefID is the unique identifier of the query, set by the frontend call.
|
||||
RefID string `json:"refId"`
|
||||
|
||||
// TimeRange represents the query range
|
||||
// NOTE: unlike generic /ds/query, we can now send explicit time values in each query
|
||||
TimeRange *TimeRange `json:"timeRange,omitempty"`
|
||||
|
||||
// The datasource
|
||||
Datasource *DataSourceRef `json:"datasource,omitempty"`
|
||||
|
||||
// Deprecated -- use datasource ref instead
|
||||
DatasourceId int64 `json:"datasourceId,omitempty"`
|
||||
|
||||
// QueryType is an optional identifier for the type of query.
|
||||
// It can be used to distinguish different types of queries.
|
||||
QueryType string `json:"queryType,omitempty"`
|
||||
|
||||
// MaxDataPoints is the maximum number of data points that should be returned from a time series query.
|
||||
MaxDataPoints int64 `json:"maxDataPoints,omitempty"`
|
||||
|
||||
// Interval is the suggested duration between time points in a time series query.
|
||||
IntervalMS float64 `json:"intervalMs,omitempty"`
|
||||
|
||||
// true if query is disabled (ie should not be returned to the dashboard)
|
||||
// Note this does not always imply that the query should not be executed since
|
||||
// the results from a hidden query may be used as the input to other queries (SSE etc)
|
||||
Hide bool `json:"hide,omitempty"`
|
||||
|
||||
// Additional Properties (that live at the root)
|
||||
props map[string]any `json:"-"`
|
||||
}
|
||||
|
||||
func NewGenericDataQuery(vals map[string]any) GenericDataQuery {
|
||||
q := GenericDataQuery{}
|
||||
_ = q.unmarshal(vals)
|
||||
return q
|
||||
}
|
||||
|
||||
// TimeRange represents a time range for a query and is a property of DataQuery.
|
||||
type TimeRange struct {
|
||||
// From is the start time of the query.
|
||||
From string `json:"from"`
|
||||
|
||||
// To is the end time of the query.
|
||||
To string `json:"to"`
|
||||
}
|
||||
|
||||
func (g *GenericDataQuery) AdditionalProperties() map[string]any {
|
||||
if g.props == nil {
|
||||
g.props = make(map[string]any)
|
||||
// If errors exist, return multi-status
|
||||
func GetResponseCode(rsp *backend.QueryDataResponse) int {
|
||||
if rsp == nil {
|
||||
return http.StatusInternalServerError
|
||||
}
|
||||
return g.props
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (g *GenericDataQuery) DeepCopyInto(out *GenericDataQuery) {
|
||||
*out = *g
|
||||
if g.props != nil {
|
||||
out.props = runtime.DeepCopyJSON(g.props)
|
||||
}
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GenericDataQuery.
|
||||
func (g *GenericDataQuery) DeepCopy() *GenericDataQuery {
|
||||
if g == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(GenericDataQuery)
|
||||
g.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// MarshalJSON ensures that the unstructured object produces proper
|
||||
// JSON when passed to Go's standard JSON library.
|
||||
func (g GenericDataQuery) MarshalJSON() ([]byte, error) {
|
||||
vals := map[string]any{}
|
||||
if g.props != nil {
|
||||
for k, v := range g.props {
|
||||
vals[k] = v
|
||||
for _, v := range rsp.Responses {
|
||||
if v.Error != nil {
|
||||
return http.StatusMultiStatus
|
||||
}
|
||||
}
|
||||
|
||||
vals["refId"] = g.RefID
|
||||
if g.Datasource != nil && (g.Datasource.Type != "" || g.Datasource.UID != "") {
|
||||
vals["datasource"] = g.Datasource
|
||||
}
|
||||
if g.DatasourceId > 0 {
|
||||
vals["datasourceId"] = g.DatasourceId
|
||||
}
|
||||
if g.IntervalMS > 0 {
|
||||
vals["intervalMs"] = g.IntervalMS
|
||||
}
|
||||
if g.MaxDataPoints > 0 {
|
||||
vals["maxDataPoints"] = g.MaxDataPoints
|
||||
}
|
||||
if g.QueryType != "" {
|
||||
vals["queryType"] = g.QueryType
|
||||
}
|
||||
return json.Marshal(vals)
|
||||
return http.StatusOK
|
||||
}
|
||||
|
||||
// UnmarshalJSON ensures that the unstructured object properly decodes
|
||||
// JSON when passed to Go's standard JSON library.
|
||||
func (g *GenericDataQuery) UnmarshalJSON(b []byte) error {
|
||||
vals := map[string]any{}
|
||||
err := json.Unmarshal(b, &vals)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return g.unmarshal(vals)
|
||||
// Defines a query behavior in a datasource. This is a similar model to a CRD where the
|
||||
// payload describes a valid query
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
type QueryTypeDefinition struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||
|
||||
Spec data.QueryTypeDefinitionSpec `json:"spec,omitempty"`
|
||||
}
|
||||
|
||||
func (g *GenericDataQuery) unmarshal(vals map[string]any) error {
|
||||
if vals == nil {
|
||||
g.props = nil
|
||||
return nil
|
||||
}
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
type QueryTypeDefinitionList struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
metav1.ListMeta `json:"metadata,omitempty"`
|
||||
|
||||
key := "refId"
|
||||
v, ok := vals[key]
|
||||
if ok {
|
||||
g.RefID, ok = v.(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("expected string refid (got: %t)", v)
|
||||
}
|
||||
delete(vals, key)
|
||||
}
|
||||
|
||||
key = "datasource"
|
||||
v, ok = vals[key]
|
||||
if ok {
|
||||
wrap, ok := v.(map[string]any)
|
||||
if ok {
|
||||
g.Datasource = &DataSourceRef{}
|
||||
g.Datasource.Type, _ = wrap["type"].(string)
|
||||
g.Datasource.UID, _ = wrap["uid"].(string)
|
||||
delete(vals, key)
|
||||
} else {
|
||||
// Old old queries may arrive with just the name
|
||||
name, ok := v.(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("expected datasource as object (got: %t)", v)
|
||||
}
|
||||
g.Datasource = &DataSourceRef{}
|
||||
g.Datasource.UID = name // Not great, but the lookup function will try its best to resolve
|
||||
delete(vals, key)
|
||||
}
|
||||
}
|
||||
|
||||
key = "intervalMs"
|
||||
v, ok = vals[key]
|
||||
if ok {
|
||||
g.IntervalMS, ok = v.(float64)
|
||||
if !ok {
|
||||
return fmt.Errorf("expected intervalMs as float (got: %t)", v)
|
||||
}
|
||||
delete(vals, key)
|
||||
}
|
||||
|
||||
key = "maxDataPoints"
|
||||
v, ok = vals[key]
|
||||
if ok {
|
||||
count, ok := v.(float64)
|
||||
if !ok {
|
||||
return fmt.Errorf("expected maxDataPoints as number (got: %t)", v)
|
||||
}
|
||||
g.MaxDataPoints = int64(count)
|
||||
delete(vals, key)
|
||||
}
|
||||
|
||||
key = "datasourceId"
|
||||
v, ok = vals[key]
|
||||
if ok {
|
||||
count, ok := v.(float64)
|
||||
if !ok {
|
||||
return fmt.Errorf("expected datasourceId as number (got: %t)", v)
|
||||
}
|
||||
g.DatasourceId = int64(count)
|
||||
delete(vals, key)
|
||||
}
|
||||
|
||||
key = "queryType"
|
||||
v, ok = vals[key]
|
||||
if ok {
|
||||
queryType, ok := v.(string)
|
||||
if !ok {
|
||||
return fmt.Errorf("expected queryType as string (got: %t)", v)
|
||||
}
|
||||
g.QueryType = queryType
|
||||
delete(vals, key)
|
||||
}
|
||||
|
||||
g.props = vals
|
||||
return nil
|
||||
Items []QueryTypeDefinition `json:"items,omitempty"`
|
||||
}
|
||||
|
||||
@@ -4,9 +4,10 @@ import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1"
|
||||
query "github.com/grafana/grafana/pkg/apis/query/v0alpha1"
|
||||
)
|
||||
|
||||
func TestParseQueriesIntoQueryDataRequest(t *testing.T) {
|
||||
@@ -39,23 +40,23 @@ func TestParseQueriesIntoQueryDataRequest(t *testing.T) {
|
||||
"to": "1692646267389"
|
||||
}`)
|
||||
|
||||
req := &v0alpha1.GenericQueryRequest{}
|
||||
req := &query.QueryDataRequest{}
|
||||
err := json.Unmarshal(request, req)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Len(t, req.Queries, 2)
|
||||
require.Equal(t, "b1808c48-9fc9-4045-82d7-081781f8a553", req.Queries[0].Datasource.UID)
|
||||
require.Equal(t, "spreadsheetID", req.Queries[0].AdditionalProperties()["spreadsheet"])
|
||||
require.Equal(t, "spreadsheetID", req.Queries[0].GetString("spreadsheet"))
|
||||
|
||||
// Write the query (with additional spreadsheetID) to JSON
|
||||
out, err := json.MarshalIndent(req.Queries[0], "", " ")
|
||||
require.NoError(t, err)
|
||||
|
||||
// And read it back with standard JSON marshal functions
|
||||
query := &v0alpha1.GenericDataQuery{}
|
||||
query := &data.DataQuery{}
|
||||
err = json.Unmarshal(out, query)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "spreadsheetID", query.AdditionalProperties()["spreadsheet"])
|
||||
require.Equal(t, "spreadsheetID", query.GetString("spreadsheet"))
|
||||
|
||||
// The second query has an explicit time range, and legacy datasource name
|
||||
out, err = json.MarshalIndent(req.Queries[1], "", " ")
|
||||
|
||||
@@ -19,6 +19,12 @@ var DataSourceApiServerResourceInfo = common.NewResourceInfo(GROUP, VERSION,
|
||||
func() runtime.Object { return &DataSourceApiServerList{} },
|
||||
)
|
||||
|
||||
var QueryTypeDefinitionResourceInfo = common.NewResourceInfo(GROUP, VERSION,
|
||||
"querytypes", "querytype", "QueryTypeDefinition",
|
||||
func() runtime.Object { return &QueryTypeDefinition{} },
|
||||
func() runtime.Object { return &QueryTypeDefinitionList{} },
|
||||
)
|
||||
|
||||
var (
|
||||
// SchemeGroupVersion is group version used to register these objects
|
||||
SchemeGroupVersion = schema.GroupVersion{Group: GROUP, Version: VERSION}
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
package v0alpha1
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
openapi "k8s.io/kube-openapi/pkg/common"
|
||||
spec "k8s.io/kube-openapi/pkg/validation/spec"
|
||||
)
|
||||
|
||||
// Wraps backend.QueryDataResponse, however it includes TypeMeta and implements runtime.Object
|
||||
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||
type QueryDataResponse struct {
|
||||
metav1.TypeMeta `json:",inline"`
|
||||
|
||||
// Backend wrapper (external dependency)
|
||||
backend.QueryDataResponse
|
||||
}
|
||||
|
||||
// Expose backend DataResponse in OpenAPI (yes this still requires some serious love!)
|
||||
func (r QueryDataResponse) OpenAPIDefinition() openapi.OpenAPIDefinition {
|
||||
return openapi.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Type: []string{"object"},
|
||||
AdditionalProperties: &spec.SchemaOrBool{Allows: true},
|
||||
},
|
||||
VendorExtensible: spec.VendorExtensible{
|
||||
Extensions: map[string]interface{}{
|
||||
"x-kubernetes-preserve-unknown-fields": true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// MarshalJSON writes the results as json
|
||||
func (r QueryDataResponse) MarshalJSON() ([]byte, error) {
|
||||
return r.QueryDataResponse.MarshalJSON()
|
||||
}
|
||||
|
||||
// UnmarshalJSON will read JSON into a QueryDataResponse
|
||||
func (r *QueryDataResponse) UnmarshalJSON(b []byte) error {
|
||||
return r.QueryDataResponse.UnmarshalJSON(b)
|
||||
}
|
||||
|
||||
func (r *QueryDataResponse) DeepCopy() *QueryDataResponse {
|
||||
if r == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// /!\ The most dumb approach, but OK for now...
|
||||
// likely best to move DeepCopy into SDK
|
||||
out := &QueryDataResponse{}
|
||||
body, _ := json.Marshal(r.QueryDataResponse)
|
||||
_ = json.Unmarshal(body, &out.QueryDataResponse)
|
||||
return out
|
||||
}
|
||||
|
||||
func (r *QueryDataResponse) DeepCopyInto(out *QueryDataResponse) {
|
||||
clone := r.DeepCopy()
|
||||
*out = *clone
|
||||
}
|
||||
@@ -4,9 +4,8 @@ import (
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
|
||||
"github.com/spyzhov/ajson"
|
||||
|
||||
query "github.com/grafana/grafana/pkg/apis/query/v0alpha1"
|
||||
)
|
||||
|
||||
// RenderTemplate applies selected values into a query template
|
||||
@@ -62,7 +61,7 @@ func RenderTemplate(qt QueryTemplate, selectedValues map[string][]string) ([]Tar
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
u := query.GenericDataQuery{}
|
||||
u := data.DataQuery{}
|
||||
err = u.UnmarshalJSON(raw)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -4,9 +4,8 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/data"
|
||||
apidata "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
query "github.com/grafana/grafana/pkg/apis/query/v0alpha1"
|
||||
)
|
||||
|
||||
var nestedFieldRender = QueryTemplate{
|
||||
@@ -32,7 +31,7 @@ var nestedFieldRender = QueryTemplate{
|
||||
},
|
||||
},
|
||||
},
|
||||
Properties: query.NewGenericDataQuery(map[string]any{
|
||||
Properties: apidata.NewDataQuery(map[string]any{
|
||||
"nestedObject": map[string]any{
|
||||
"anArray": []any{"foo", .2},
|
||||
},
|
||||
@@ -56,7 +55,7 @@ var nestedFieldRenderedTargets = []Target{
|
||||
},
|
||||
},
|
||||
//DataTypeVersion: data.FrameTypeVersion{0, 0},
|
||||
Properties: query.NewGenericDataQuery(
|
||||
Properties: apidata.NewDataQuery(
|
||||
map[string]any{
|
||||
"nestedObject": map[string]any{
|
||||
"anArray": []any{"up", .2},
|
||||
@@ -117,7 +116,7 @@ var multiVarTemplate = QueryTemplate{
|
||||
},
|
||||
},
|
||||
|
||||
Properties: query.NewGenericDataQuery(map[string]any{
|
||||
Properties: apidata.NewDataQuery(map[string]any{
|
||||
"expr": "1 + metricName + 1 + anotherMetric + metricName",
|
||||
}),
|
||||
},
|
||||
@@ -155,7 +154,7 @@ var multiVarRenderedTargets = []Target{
|
||||
},
|
||||
},
|
||||
//DataTypeVersion: data.FrameTypeVersion{0, 0},
|
||||
Properties: query.NewGenericDataQuery(map[string]any{
|
||||
Properties: apidata.NewDataQuery(map[string]any{
|
||||
"expr": "1 + up + 1 + sloths_do_like_a_good_nap + up",
|
||||
}),
|
||||
},
|
||||
@@ -182,7 +181,7 @@ func TestRenderWithRune(t *testing.T) {
|
||||
},
|
||||
Targets: []Target{
|
||||
{
|
||||
Properties: query.NewGenericDataQuery(map[string]any{
|
||||
Properties: apidata.NewDataQuery(map[string]any{
|
||||
"message": "🐦 name!",
|
||||
}),
|
||||
Variables: map[string][]VariableReplacement{
|
||||
@@ -207,5 +206,5 @@ func TestRenderWithRune(t *testing.T) {
|
||||
rq, err := RenderTemplate(qt, selectedValues)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, "🐦 🦥!", rq[0].Properties.AdditionalProperties()["message"])
|
||||
require.Equal(t, "🐦 🦥!", rq[0].Properties.GetString("message"))
|
||||
}
|
||||
|
||||
@@ -2,9 +2,9 @@ package template
|
||||
|
||||
import (
|
||||
"github.com/grafana/grafana-plugin-sdk-go/data"
|
||||
apidata "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1"
|
||||
|
||||
common "github.com/grafana/grafana/pkg/apimachinery/apis/common/v0alpha1"
|
||||
query "github.com/grafana/grafana/pkg/apis/query/v0alpha1"
|
||||
)
|
||||
|
||||
type QueryTemplate struct {
|
||||
@@ -36,7 +36,7 @@ type Target struct {
|
||||
Variables map[string][]VariableReplacement `json:"variables"`
|
||||
|
||||
// Query target
|
||||
Properties query.GenericDataQuery `json:"properties"`
|
||||
Properties apidata.DataQuery `json:"properties"`
|
||||
}
|
||||
|
||||
// TemplateVariable is the definition of a variable that will be interpolated
|
||||
|
||||
@@ -76,41 +76,45 @@ func (in *DataSourceApiServerList) DeepCopyObject() runtime.Object {
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *DataSourceRef) DeepCopyInto(out *DataSourceRef) {
|
||||
func (in *QueryDataRequest) DeepCopyInto(out *QueryDataRequest) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
in.QueryDataRequest.DeepCopyInto(&out.QueryDataRequest)
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataSourceRef.
|
||||
func (in *DataSourceRef) DeepCopy() *DataSourceRef {
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueryDataRequest.
|
||||
func (in *QueryDataRequest) DeepCopy() *QueryDataRequest {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(DataSourceRef)
|
||||
out := new(QueryDataRequest)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *QueryDataRequest) DeepCopyObject() runtime.Object {
|
||||
if c := in.DeepCopy(); c != nil {
|
||||
return c
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *GenericQueryRequest) DeepCopyInto(out *GenericQueryRequest) {
|
||||
func (in *QueryDataResponse) DeepCopyInto(out *QueryDataResponse) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
if in.Queries != nil {
|
||||
in, out := &in.Queries, &out.Queries
|
||||
*out = make([]GenericDataQuery, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
in.QueryDataResponse.DeepCopyInto(&out.QueryDataResponse)
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GenericQueryRequest.
|
||||
func (in *GenericQueryRequest) DeepCopy() *GenericQueryRequest {
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueryDataResponse.
|
||||
func (in *QueryDataResponse) DeepCopy() *QueryDataResponse {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(GenericQueryRequest)
|
||||
out := new(QueryDataResponse)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
@@ -124,17 +128,61 @@ func (in *QueryDataResponse) DeepCopyObject() runtime.Object {
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *TimeRange) DeepCopyInto(out *TimeRange) {
|
||||
func (in *QueryTypeDefinition) DeepCopyInto(out *QueryTypeDefinition) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
||||
in.Spec.DeepCopyInto(&out.Spec)
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TimeRange.
|
||||
func (in *TimeRange) DeepCopy() *TimeRange {
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueryTypeDefinition.
|
||||
func (in *QueryTypeDefinition) DeepCopy() *QueryTypeDefinition {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(TimeRange)
|
||||
out := new(QueryTypeDefinition)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *QueryTypeDefinition) DeepCopyObject() runtime.Object {
|
||||
if c := in.DeepCopy(); c != nil {
|
||||
return c
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *QueryTypeDefinitionList) DeepCopyInto(out *QueryTypeDefinitionList) {
|
||||
*out = *in
|
||||
out.TypeMeta = in.TypeMeta
|
||||
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||
if in.Items != nil {
|
||||
in, out := &in.Items, &out.Items
|
||||
*out = make([]QueryTypeDefinition, len(*in))
|
||||
for i := range *in {
|
||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QueryTypeDefinitionList.
|
||||
func (in *QueryTypeDefinitionList) DeepCopy() *QueryTypeDefinitionList {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(QueryTypeDefinitionList)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||
func (in *QueryTypeDefinitionList) DeepCopyObject() runtime.Object {
|
||||
if c := in.DeepCopy(); c != nil {
|
||||
return c
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -18,11 +18,10 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
|
||||
return map[string]common.OpenAPIDefinition{
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.DataSourceApiServer": schema_pkg_apis_query_v0alpha1_DataSourceApiServer(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.DataSourceApiServerList": schema_pkg_apis_query_v0alpha1_DataSourceApiServerList(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.DataSourceRef": schema_pkg_apis_query_v0alpha1_DataSourceRef(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.GenericDataQuery": schema_pkg_apis_query_v0alpha1_GenericDataQuery(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.GenericQueryRequest": schema_pkg_apis_query_v0alpha1_GenericQueryRequest(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.QueryDataResponse": QueryDataResponse{}.OpenAPIDefinition(),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.TimeRange": schema_pkg_apis_query_v0alpha1_TimeRange(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.QueryDataRequest": schema_pkg_apis_query_v0alpha1_QueryDataRequest(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.QueryDataResponse": schema_pkg_apis_query_v0alpha1_QueryDataResponse(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.QueryTypeDefinition": schema_pkg_apis_query_v0alpha1_QueryTypeDefinition(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.QueryTypeDefinitionList": schema_pkg_apis_query_v0alpha1_QueryTypeDefinitionList(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1/template.Position": schema_apis_query_v0alpha1_template_Position(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1/template.QueryTemplate": schema_apis_query_v0alpha1_template_QueryTemplate(ref),
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1/template.Target": schema_apis_query_v0alpha1_template_Target(ref),
|
||||
@@ -154,107 +153,7 @@ func schema_pkg_apis_query_v0alpha1_DataSourceApiServerList(ref common.Reference
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_query_v0alpha1_DataSourceRef(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"type": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "The datasource plugin type",
|
||||
Default: "",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"uid": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Datasource UID",
|
||||
Default: "",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
Required: []string{"type", "uid"},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_query_v0alpha1_GenericDataQuery(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "GenericDataQuery is a replacement for `dtos.MetricRequest` that provides more explicit types",
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"refId": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "RefID is the unique identifier of the query, set by the frontend call.",
|
||||
Default: "",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"timeRange": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "TimeRange represents the query range NOTE: unlike generic /ds/query, we can now send explicit time values in each query",
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/query/v0alpha1.TimeRange"),
|
||||
},
|
||||
},
|
||||
"datasource": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "The datasource",
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/query/v0alpha1.DataSourceRef"),
|
||||
},
|
||||
},
|
||||
"datasourceId": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Deprecated -- use datasource ref instead",
|
||||
Type: []string{"integer"},
|
||||
Format: "int64",
|
||||
},
|
||||
},
|
||||
"queryType": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "QueryType is an optional identifier for the type of query. It can be used to distinguish different types of queries.",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"maxDataPoints": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "MaxDataPoints is the maximum number of data points that should be returned from a time series query.",
|
||||
Type: []string{"integer"},
|
||||
Format: "int64",
|
||||
},
|
||||
},
|
||||
"intervalMs": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Interval is the suggested duration between time points in a time series query.",
|
||||
Type: []string{"number"},
|
||||
Format: "double",
|
||||
},
|
||||
},
|
||||
"hide": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "true if query is disabled (ie should not be returned to the dashboard) Note this does not always imply that the query should not be executed since the results from a hidden query may be used as the input to other queries (SSE etc)",
|
||||
Type: []string{"boolean"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
Required: []string{"refId"},
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.DataSourceRef", "github.com/grafana/grafana/pkg/apis/query/v0alpha1.TimeRange"},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_query_v0alpha1_GenericQueryRequest(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
func schema_pkg_apis_query_v0alpha1_QueryDataRequest(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
@@ -275,56 +174,6 @@ func schema_pkg_apis_query_v0alpha1_GenericQueryRequest(ref common.ReferenceCall
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"from": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "From Start time in epoch timestamps in milliseconds or relative using Grafana time units. example: now-1h",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"to": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "To End time in epoch timestamps in milliseconds or relative using Grafana time units. example: now",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"queries": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "queries.refId – Specifies an identifier of the query. Is optional and default to “A”. queries.datasourceId – Specifies the data source to be queried. Each query in the request must have an unique datasourceId. queries.maxDataPoints - Species maximum amount of data points that dashboard panel can render. Is optional and default to 100. queries.intervalMs - Specifies the time interval in milliseconds of time series. Is optional and defaults to 1000. required: true example: [ { \"refId\": \"A\", \"intervalMs\": 86400000, \"maxDataPoints\": 1092, \"datasource\":{ \"uid\":\"PD8C576611E62080A\" }, \"rawSql\": \"SELECT 1 as valueOne, 2 as valueTwo\", \"format\": \"table\" } ]",
|
||||
Type: []string{"array"},
|
||||
Items: &spec.SchemaOrArray{
|
||||
Schema: &spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/query/v0alpha1.GenericDataQuery"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"debug": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "required: false",
|
||||
Type: []string{"boolean"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
Required: []string{"queries"},
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.GenericDataQuery"},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_query_v0alpha1_TimeRange(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "TimeRange represents a time range for a query and is a property of DataQuery.",
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"from": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "From is the start time of the query.",
|
||||
@@ -341,10 +190,165 @@ func schema_pkg_apis_query_v0alpha1_TimeRange(ref common.ReferenceCallback) comm
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"queries": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Datasource queries",
|
||||
Type: []string{"array"},
|
||||
Items: &spec.SchemaOrArray{
|
||||
Schema: &spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Ref: ref("github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1.DataQuery"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"debug": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Optionally include debug information in the response",
|
||||
Type: []string{"boolean"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
},
|
||||
Required: []string{"from", "to"},
|
||||
Required: []string{"from", "to", "queries"},
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1.DataQuery"},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_query_v0alpha1_QueryDataResponse(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Wraps backend.QueryDataResponse, however it includes TypeMeta and implements runtime.Object",
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"kind": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"apiVersion": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"results": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Responses is a map of RefIDs (Unique Query ID) to *DataResponse.",
|
||||
Type: []string{"object"},
|
||||
AdditionalProperties: &spec.SchemaOrBool{
|
||||
Allows: true,
|
||||
Schema: &spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: map[string]interface{}{},
|
||||
Ref: ref("github.com/grafana/grafana-plugin-sdk-go/backend.DataResponse"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Required: []string{"results"},
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend.DataResponse"},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_query_v0alpha1_QueryTypeDefinition(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Generic query request with shared time across all values",
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"kind": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"apiVersion": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"metadata": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: map[string]interface{}{},
|
||||
Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"),
|
||||
},
|
||||
},
|
||||
"spec": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: map[string]interface{}{},
|
||||
Ref: ref("github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1.QueryTypeDefinitionSpec"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1.QueryTypeDefinitionSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"},
|
||||
}
|
||||
}
|
||||
|
||||
func schema_pkg_apis_query_v0alpha1_QueryTypeDefinitionList(ref common.ReferenceCallback) common.OpenAPIDefinition {
|
||||
return common.OpenAPIDefinition{
|
||||
Schema: spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Type: []string{"object"},
|
||||
Properties: map[string]spec.Schema{
|
||||
"kind": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"apiVersion": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||
Type: []string{"string"},
|
||||
Format: "",
|
||||
},
|
||||
},
|
||||
"metadata": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: map[string]interface{}{},
|
||||
Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"),
|
||||
},
|
||||
},
|
||||
"items": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Type: []string{"array"},
|
||||
Items: &spec.SchemaOrArray{
|
||||
Schema: &spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Default: map[string]interface{}{},
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/query/v0alpha1.QueryTypeDefinition"),
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.QueryTypeDefinition", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -486,7 +490,7 @@ func schema_apis_query_v0alpha1_template_Target(ref common.ReferenceCallback) co
|
||||
"properties": {
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Description: "Query target",
|
||||
Ref: ref("github.com/grafana/grafana/pkg/apis/query/v0alpha1.GenericDataQuery"),
|
||||
Ref: ref("github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1.DataQuery"),
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -494,7 +498,7 @@ func schema_apis_query_v0alpha1_template_Target(ref common.ReferenceCallback) co
|
||||
},
|
||||
},
|
||||
Dependencies: []string{
|
||||
"github.com/grafana/grafana/pkg/apis/query/v0alpha1.GenericDataQuery", "github.com/grafana/grafana/pkg/apis/query/v0alpha1/template.VariableReplacement"},
|
||||
"github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1.DataQuery", "github.com/grafana/grafana/pkg/apis/query/v0alpha1/template.VariableReplacement"},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
API rule violation: list_type_missing,github.com/grafana/grafana/pkg/apis/query/v0alpha1,DataSourceApiServer,AliasIDs
|
||||
API rule violation: list_type_missing,github.com/grafana/grafana/pkg/apis/query/v0alpha1,GenericQueryRequest,Queries
|
||||
API rule violation: names_match,github.com/grafana/grafana/pkg/apis/query/v0alpha1,GenericDataQuery,IntervalMS
|
||||
API rule violation: names_match,github.com/grafana/grafana/pkg/apis/query/v0alpha1,GenericDataQuery,RefID
|
||||
API rule violation: names_match,github.com/grafana/grafana/pkg/apis/query/v0alpha1,QueryDataResponse,QueryDataResponse
|
||||
API rule violation: names_match,github.com/grafana/grafana/pkg/apis/query/v0alpha1/template,QueryTemplate,Variables
|
||||
API rule violation: names_match,github.com/grafana/grafana/pkg/apis/query/v0alpha1/template,replacement,Position
|
||||
API rule violation: names_match,github.com/grafana/grafana/pkg/apis/query/v0alpha1/template,replacement,TemplateVariable
|
||||
|
||||
Reference in New Issue
Block a user