Prometheus: remove cue definition (#83808)

Co-authored-by: ismail simsek <ismailsimsek09@gmail.com>
This commit is contained in:
Ryan McKinley
2024-03-04 10:23:32 -08:00
committed by GitHub
parent 2e8c514cfd
commit 5aa965b9e9
19 changed files with 120 additions and 385 deletions

View File

@@ -7,12 +7,9 @@ import (
"fmt"
"time"
"github.com/grafana/kindsys"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"github.com/grafana/grafana/pkg/tsdb/prometheus/kinds/dataquery"
"github.com/grafana/grafana/pkg/tsdb/prometheus/models"
)
@@ -59,12 +56,13 @@ func (s *Service) CheckHealth(ctx context.Context, req *backend.CheckHealthReque
func healthcheck(ctx context.Context, req *backend.CheckHealthRequest, i *instance) (*backend.CheckHealthResult, error) {
qm := models.QueryModel{
LegendFormat: "",
UtcOffsetSec: 0,
PrometheusDataQuery: dataquery.PrometheusDataQuery{
CommonQueryProperties: models.CommonQueryProperties{
RefId: refID,
},
PrometheusQueryProperties: models.PrometheusQueryProperties{
Expr: "1+1",
Instant: kindsys.Ptr(true),
RefId: refID,
Instant: true,
},
}
b, _ := json.Marshal(&qm)

View File

@@ -1,106 +0,0 @@
// Code generated - EDITING IS FUTILE. DO NOT EDIT.
//
// Generated by:
// public/app/plugins/gen.go
// Using jennies:
// PluginGoTypesJenny
//
// Run 'make gen-cue' from repository root to regenerate.
package dataquery
// Defines values for PromQueryFormat.
const (
PromQueryFormatHeatmap PromQueryFormat = "heatmap"
PromQueryFormatTable PromQueryFormat = "table"
PromQueryFormatTimeSeries PromQueryFormat = "time_series"
)
// Defines values for QueryEditorMode.
const (
QueryEditorModeBuilder QueryEditorMode = "builder"
QueryEditorModeCode QueryEditorMode = "code"
)
// These are the common properties available to all queries in all datasources.
// Specific implementations will *extend* this interface, adding the required
// properties for the given context.
type DataQuery struct {
// For mixed data sources the selected datasource is on the query level.
// For non mixed scenarios this is undefined.
// TODO find a better way to do this ^ that's friendly to schema
// TODO this shouldn't be unknown but DataSourceRef | null
Datasource *any `json:"datasource,omitempty"`
// Hide 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"`
// Specify the query flavor
// TODO make this required and give it a default
QueryType *string `json:"queryType,omitempty"`
// A unique identifier for the query within the list of targets.
// In server side expressions, the refId is used as a variable name to identify results.
// By default, the UI will assign A->Z; however setting meaningful names may be useful.
RefId string `json:"refId"`
}
// PromQueryFormat defines model for PromQueryFormat.
type PromQueryFormat string
// PrometheusDataQuery defines model for PrometheusDataQuery.
type PrometheusDataQuery struct {
// DataQuery These are the common properties available to all queries in all datasources.
// Specific implementations will *extend* this interface, adding the required
// properties for the given context.
DataQuery
// For mixed data sources the selected datasource is on the query level.
// For non mixed scenarios this is undefined.
// TODO find a better way to do this ^ that's friendly to schema
// TODO this shouldn't be unknown but DataSourceRef | null
Datasource *any `json:"datasource,omitempty"`
EditorMode *QueryEditorMode `json:"editorMode,omitempty"`
// Execute an additional query to identify interesting raw samples relevant for the given expr
Exemplar *bool `json:"exemplar,omitempty"`
// The actual expression/query that will be evaluated by Prometheus
Expr string `json:"expr"`
Format *PromQueryFormat `json:"format,omitempty"`
// Hide 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"`
// Returns only the latest value that Prometheus has scraped for the requested time series
Instant *bool `json:"instant,omitempty"`
// @deprecated Used to specify how many times to divide max data points by. We use max data points under query options
// See https://github.com/grafana/grafana/issues/48081
IntervalFactor *float32 `json:"intervalFactor,omitempty"`
// Series name override or template. Ex. {{hostname}} will be replaced with label value for hostname
LegendFormat *string `json:"legendFormat,omitempty"`
// Specify the query flavor
// TODO make this required and give it a default
QueryType *string `json:"queryType,omitempty"`
// Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series
Range *bool `json:"range,omitempty"`
// A unique identifier for the query within the list of targets.
// In server side expressions, the refId is used as a variable name to identify results.
// By default, the UI will assign A->Z; however setting meaningful names may be useful.
RefId string `json:"refId"`
Scope *struct {
Matchers string `json:"matchers"`
} `json:"scope,omitempty"`
}
// QueryEditorMode defines model for QueryEditorMode.
type QueryEditorMode string

View File

@@ -14,9 +14,61 @@ import (
"github.com/prometheus/prometheus/promql/parser"
"github.com/grafana/grafana/pkg/tsdb/prometheus/intervalv2"
"github.com/grafana/grafana/pkg/tsdb/prometheus/kinds/dataquery"
)
// PromQueryFormat defines model for PromQueryFormat.
// +enum
type PromQueryFormat string
const (
PromQueryFormatTimeSeries PromQueryFormat = "time_series"
PromQueryFormatTable PromQueryFormat = "table"
PromQueryFormatHeatmap PromQueryFormat = "heatmap"
)
// QueryEditorMode defines model for QueryEditorMode.
// +enum
type QueryEditorMode string
const (
QueryEditorModeBuilder QueryEditorMode = "builder"
QueryEditorModeCode QueryEditorMode = "code"
)
// PrometheusQueryProperties defines the specific properties used for prometheus
type PrometheusQueryProperties struct {
// The response format
Format PromQueryFormat `json:"format,omitempty"`
// The actual expression/query that will be evaluated by Prometheus
Expr string `json:"expr"`
// Returns a Range vector, comprised of a set of time series containing a range of data points over time for each time series
Range bool `json:"range,omitempty"`
// Returns only the latest value that Prometheus has scraped for the requested time series
Instant bool `json:"instant,omitempty"`
// Execute an additional query to identify interesting raw samples relevant for the given expr
Exemplar bool `json:"exemplar,omitempty"`
// what we should show in the editor
EditorMode QueryEditorMode `json:"editorMode,omitempty"`
// Used to specify how many times to divide max data points by. We use max data points under query options
// See https://github.com/grafana/grafana/issues/48081
// Deprecated: use interval
IntervalFactor int64 `json:"intervalFactor,omitempty"`
// Series name override or template. Ex. {{hostname}} will be replaced with label value for hostname
LegendFormat string `json:"legendFormat,omitempty"`
// ???
Scope *struct {
Matchers string `json:"matchers"`
} `json:"scope,omitempty"`
}
// Internal interval and range variables
const (
varInterval = "$__interval"
@@ -51,15 +103,22 @@ const (
var safeResolution = 11000
// QueryModel includes both the common and specific values
type QueryModel struct {
dataquery.PrometheusDataQuery
PrometheusQueryProperties `json:",inline"`
CommonQueryProperties `json:",inline"`
// The following properties may be part of the request payload, however they are not saved in panel JSON
// Timezone offset to align start & end time on backend
UtcOffsetSec int64 `json:"utcOffsetSec,omitempty"`
LegendFormat string `json:"legendFormat,omitempty"`
Interval string `json:"interval,omitempty"`
IntervalMs int64 `json:"intervalMs,omitempty"`
IntervalFactor int64 `json:"intervalFactor,omitempty"`
UtcOffsetSec int64 `json:"utcOffsetSec,omitempty"`
Interval string `json:"interval,omitempty"`
}
// CommonQueryProperties is properties applied to all queries
// NOTE: this will soon be replaced with a struct from the SDK
type CommonQueryProperties struct {
RefId string `json:"refId,omitempty"`
IntervalMs int64 `json:"intervalMs,omitempty"`
}
type TimeRange struct {
@@ -68,6 +127,7 @@ type TimeRange struct {
Step time.Duration
}
// The internal query object
type Query struct {
Expr string
Step time.Duration
@@ -119,29 +179,14 @@ func Parse(query backend.DataQuery, dsScrapeInterval string, intervalCalculator
return nil, err
}
}
var rangeQuery, instantQuery bool
if model.Instant == nil {
instantQuery = false
} else {
instantQuery = *model.Instant
}
if model.Range == nil {
rangeQuery = false
} else {
rangeQuery = *model.Range
}
if !instantQuery && !rangeQuery {
if !model.Instant && !model.Range {
// In older dashboards, we were not setting range query param and !range && !instant was run as range query
rangeQuery = true
model.Range = true
}
// We never want to run exemplar query for alerting
exemplarQuery := false
if model.Exemplar != nil {
exemplarQuery = *model.Exemplar
}
if fromAlert {
exemplarQuery = false
model.Exemplar = false
}
return &Query{
@@ -151,9 +196,9 @@ func Parse(query backend.DataQuery, dsScrapeInterval string, intervalCalculator
Start: query.TimeRange.From,
End: query.TimeRange.To,
RefId: query.RefID,
InstantQuery: instantQuery,
RangeQuery: rangeQuery,
ExemplarQuery: exemplarQuery,
InstantQuery: model.Instant,
RangeQuery: model.Range,
ExemplarQuery: model.Exemplar,
UtcOffsetSec: model.UtcOffsetSec,
}, nil
}

View File

@@ -6,6 +6,7 @@ import (
"github.com/grafana/grafana-plugin-sdk-go/data"
)
// +enum
type ResultType string
const (

View File

@@ -15,11 +15,8 @@ import (
"time"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/kindsys"
"github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/tsdb/prometheus/kinds/dataquery"
"github.com/grafana/grafana/pkg/tsdb/prometheus/models"
)
@@ -127,8 +124,8 @@ func createJsonTestData(start int64, step int64, timestampCount int, seriesCount
bytes := []byte(fmt.Sprintf(`{"status":"success","data":{"resultType":"matrix","result":[%v]}}`, strings.Join(allSeries, ",")))
qm := models.QueryModel{
PrometheusDataQuery: dataquery.PrometheusDataQuery{
Range: kindsys.Ptr(true),
PrometheusQueryProperties: models.PrometheusQueryProperties{
Range: true,
Expr: "test",
},
}

View File

@@ -16,8 +16,6 @@ import (
"github.com/grafana/grafana-plugin-sdk-go/experimental"
"github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/tsdb/prometheus/kinds/dataquery"
"github.com/grafana/grafana/pkg/tsdb/prometheus/models"
)
@@ -109,14 +107,16 @@ func loadStoredQuery(fileName string) (*backend.QueryDataRequest, error) {
}
qm := models.QueryModel{
PrometheusDataQuery: dataquery.PrometheusDataQuery{
Range: &sq.RangeQuery,
Exemplar: &sq.ExemplarQuery,
Expr: sq.Expr,
PrometheusQueryProperties: models.PrometheusQueryProperties{
Range: sq.RangeQuery,
Exemplar: sq.ExemplarQuery,
Expr: sq.Expr,
LegendFormat: sq.LegendFormat,
},
Interval: fmt.Sprintf("%ds", sq.Step),
IntervalMs: sq.Step * 1000,
LegendFormat: sq.LegendFormat,
CommonQueryProperties: models.CommonQueryProperties{
IntervalMs: sq.Step * 1000,
},
Interval: fmt.Sprintf("%ds", sq.Step),
}
data, err := json.Marshal(&qm)

View File

@@ -15,10 +15,6 @@ import (
p "github.com/prometheus/common/model"
"github.com/stretchr/testify/require"
"github.com/grafana/grafana/pkg/tsdb/prometheus/kinds/dataquery"
"github.com/grafana/kindsys"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/httpclient"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
@@ -68,10 +64,10 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
require.NoError(t, err)
qm := models.QueryModel{
LegendFormat: "legend {{app}}",
UtcOffsetSec: 0,
PrometheusDataQuery: dataquery.PrometheusDataQuery{
Exemplar: kindsys.Ptr(true),
PrometheusQueryProperties: models.PrometheusQueryProperties{
LegendFormat: "legend {{app}}",
Exemplar: true,
},
}
b, err := json.Marshal(&qm)
@@ -115,10 +111,10 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
}
qm := models.QueryModel{
LegendFormat: "legend {{app}}",
UtcOffsetSec: 0,
PrometheusDataQuery: dataquery.PrometheusDataQuery{
Range: kindsys.Ptr(true),
PrometheusQueryProperties: models.PrometheusQueryProperties{
Range: true,
LegendFormat: "legend {{app}}",
},
}
b, err := json.Marshal(&qm)
@@ -164,10 +160,10 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
}
qm := models.QueryModel{
LegendFormat: "",
UtcOffsetSec: 0,
PrometheusDataQuery: dataquery.PrometheusDataQuery{
Range: kindsys.Ptr(true),
PrometheusQueryProperties: models.PrometheusQueryProperties{
Range: true,
LegendFormat: "",
},
}
b, err := json.Marshal(&qm)
@@ -209,10 +205,10 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
}
qm := models.QueryModel{
LegendFormat: "",
UtcOffsetSec: 0,
PrometheusDataQuery: dataquery.PrometheusDataQuery{
Range: kindsys.Ptr(true),
PrometheusQueryProperties: models.PrometheusQueryProperties{
Range: true,
LegendFormat: "",
},
}
b, err := json.Marshal(&qm)
@@ -252,10 +248,10 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
}
qm := models.QueryModel{
LegendFormat: "",
UtcOffsetSec: 0,
PrometheusDataQuery: dataquery.PrometheusDataQuery{
Range: kindsys.Ptr(true),
PrometheusQueryProperties: models.PrometheusQueryProperties{
Range: true,
LegendFormat: "",
},
}
b, err := json.Marshal(&qm)
@@ -289,10 +285,10 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
},
}
qm := models.QueryModel{
LegendFormat: "legend {{app}}",
UtcOffsetSec: 0,
PrometheusDataQuery: dataquery.PrometheusDataQuery{
Instant: kindsys.Ptr(true),
PrometheusQueryProperties: models.PrometheusQueryProperties{
Instant: true,
LegendFormat: "legend {{app}}",
},
}
b, err := json.Marshal(&qm)
@@ -330,10 +326,10 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) {
},
}
qm := models.QueryModel{
LegendFormat: "",
UtcOffsetSec: 0,
PrometheusDataQuery: dataquery.PrometheusDataQuery{
Instant: kindsys.Ptr(true),
PrometheusQueryProperties: models.PrometheusQueryProperties{
Instant: true,
LegendFormat: "",
},
}
b, err := json.Marshal(&qm)