From f23f50f58d7ab5cb1fd88b42b6c58ec09c1a159d Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Fri, 16 Feb 2024 16:59:11 -0800 Subject: [PATCH] Expressions: Add model struct for the query types (not map[string]any) (#82745) --- .../feature-toggles/index.md | 1 + .../src/types/featureToggles.gen.ts | 1 + pkg/expr/classic/classic.go | 27 +- pkg/expr/commands.go | 9 +- pkg/expr/commands_test.go | 2 +- pkg/expr/graph_test.go | 5 +- pkg/expr/mathexp/reduce.go | 42 +- pkg/expr/mathexp/reduce_test.go | 6 +- pkg/expr/models.go | 94 + pkg/expr/nodes.go | 39 +- pkg/expr/reader.go | 156 ++ pkg/services/featuremgmt/registry.go | 7 + pkg/services/featuremgmt/toggles_gen.csv | 1 + pkg/services/featuremgmt/toggles_gen.go | 4 + pkg/services/featuremgmt/toggles_gen.json | 2094 ++++++++--------- 15 files changed, 1393 insertions(+), 1095 deletions(-) create mode 100644 pkg/expr/models.go create mode 100644 pkg/expr/reader.go diff --git a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md index 6e80b789cb9..10380c910ea 100644 --- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md +++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @@ -179,6 +179,7 @@ Experimental features might be changed or removed without prior notice. | `nodeGraphDotLayout` | Changed the layout algorithm for the node graph | | `newPDFRendering` | New implementation for the dashboard to PDF rendering | | `kubernetesAggregator` | Enable grafana aggregator | +| `expressionParser` | Enable new expression parser | ## Development feature toggles diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index 4a43b10aa27..f5a2e721c16 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -180,6 +180,7 @@ export interface FeatureToggles { groupToNestedTableTransformation?: boolean; newPDFRendering?: boolean; kubernetesAggregator?: boolean; + expressionParser?: boolean; groupByVariable?: boolean; alertingUpgradeDryrunOnStart?: boolean; } diff --git a/pkg/expr/classic/classic.go b/pkg/expr/classic/classic.go index 01288e0b01d..b920fc8a2f4 100644 --- a/pkg/expr/classic/classic.go +++ b/pkg/expr/classic/classic.go @@ -275,21 +275,12 @@ type ConditionReducerJSON struct { // Params []any `json:"params"` (Unused) } -// UnmarshalConditionsCmd creates a new ConditionsCmd. -func UnmarshalConditionsCmd(rawQuery map[string]any, refID string) (*ConditionsCmd, error) { - jsonFromM, err := json.Marshal(rawQuery["conditions"]) - if err != nil { - return nil, fmt.Errorf("failed to remarshal classic condition body: %w", err) - } - var ccj []ConditionJSON - if err = json.Unmarshal(jsonFromM, &ccj); err != nil { - return nil, fmt.Errorf("failed to unmarshal remarshaled classic condition body: %w", err) - } - +func NewConditionCmd(refID string, ccj []ConditionJSON) (*ConditionsCmd, error) { c := &ConditionsCmd{ RefID: refID, } + var err error for i, cj := range ccj { cond := condition{} @@ -316,6 +307,18 @@ func UnmarshalConditionsCmd(rawQuery map[string]any, refID string) (*ConditionsC c.Conditions = append(c.Conditions, cond) } - return c, nil } + +// UnmarshalConditionsCmd creates a new ConditionsCmd. +func UnmarshalConditionsCmd(rawQuery map[string]any, refID string) (*ConditionsCmd, error) { + jsonFromM, err := json.Marshal(rawQuery["conditions"]) + if err != nil { + return nil, fmt.Errorf("failed to remarshal classic condition body: %w", err) + } + var ccj []ConditionJSON + if err = json.Unmarshal(jsonFromM, &ccj); err != nil { + return nil, fmt.Errorf("failed to unmarshal remarshaled classic condition body: %w", err) + } + return NewConditionCmd(refID, ccj) +} diff --git a/pkg/expr/commands.go b/pkg/expr/commands.go index d68a6e6d16f..32bc9b86361 100644 --- a/pkg/expr/commands.go +++ b/pkg/expr/commands.go @@ -77,14 +77,14 @@ func (gm *MathCommand) Execute(ctx context.Context, _ time.Time, vars mathexp.Va // ReduceCommand is an expression command for reduction of a timeseries such as a min, mean, or max. type ReduceCommand struct { - Reducer string + Reducer mathexp.ReducerID VarToReduce string refID string seriesMapper mathexp.ReduceMapper } // NewReduceCommand creates a new ReduceCMD. -func NewReduceCommand(refID, reducer, varToReduce string, mapper mathexp.ReduceMapper) (*ReduceCommand, error) { +func NewReduceCommand(refID string, reducer mathexp.ReducerID, varToReduce string, mapper mathexp.ReduceMapper) (*ReduceCommand, error) { _, err := mathexp.GetReduceFunc(reducer) if err != nil { return nil, err @@ -114,10 +114,11 @@ func UnmarshalReduceCommand(rn *rawNode) (*ReduceCommand, error) { if !ok { return nil, errors.New("no reducer specified") } - redFunc, ok := rawReducer.(string) + redString, ok := rawReducer.(string) if !ok { return nil, fmt.Errorf("expected reducer to be a string, got %T", rawReducer) } + redFunc := mathexp.ReducerID(strings.ToLower(redString)) var mapper mathexp.ReduceMapper = nil settings, ok := rn.Query["settings"] @@ -163,7 +164,7 @@ func (gr *ReduceCommand) Execute(ctx context.Context, _ time.Time, vars mathexp. _, span := tracer.Start(ctx, "SSE.ExecuteReduce") defer span.End() - span.SetAttributes(attribute.String("reducer", gr.Reducer)) + span.SetAttributes(attribute.String("reducer", string(gr.Reducer))) newRes := mathexp.Results{} for i, val := range vars[gr.VarToReduce].Values { diff --git a/pkg/expr/commands_test.go b/pkg/expr/commands_test.go index 6fa837eb48e..7fd58329171 100644 --- a/pkg/expr/commands_test.go +++ b/pkg/expr/commands_test.go @@ -210,7 +210,7 @@ func TestReduceExecute(t *testing.T) { }) } -func randomReduceFunc() string { +func randomReduceFunc() mathexp.ReducerID { res := mathexp.GetSupportedReduceFuncs() return res[rand.Intn(len(res))] } diff --git a/pkg/expr/graph_test.go b/pkg/expr/graph_test.go index 11be8e5a352..fafca8f6876 100644 --- a/pkg/expr/graph_test.go +++ b/pkg/expr/graph_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" "github.com/grafana/grafana/pkg/services/datasources" + "github.com/grafana/grafana/pkg/services/featuremgmt" ) func TestServicebuildPipeLine(t *testing.T) { @@ -231,7 +232,9 @@ func TestServicebuildPipeLine(t *testing.T) { expectedOrder: []string{"B", "A"}, }, } - s := Service{} + s := Service{ + features: featuremgmt.WithFeatures(featuremgmt.FlagExpressionParser), + } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { nodes, err := s.buildPipeline(tt.req) diff --git a/pkg/expr/mathexp/reduce.go b/pkg/expr/mathexp/reduce.go index b4b6611eb85..76d74ca459f 100644 --- a/pkg/expr/mathexp/reduce.go +++ b/pkg/expr/mathexp/reduce.go @@ -3,13 +3,30 @@ package mathexp import ( "fmt" "math" - "strings" "github.com/grafana/grafana-plugin-sdk-go/data" ) type ReducerFunc = func(fv *Float64Field) *float64 +// The reducer function +// +enum +type ReducerID string + +const ( + ReducerSum ReducerID = "sum" + ReducerMean ReducerID = "mean" + ReducerMin ReducerID = "min" + ReducerMax ReducerID = "max" + ReducerCount ReducerID = "count" + ReducerLast ReducerID = "last" +) + +// GetSupportedReduceFuncs returns collection of supported function names +func GetSupportedReduceFuncs() []ReducerID { + return []ReducerID{ReducerSum, ReducerMean, ReducerMin, ReducerMax, ReducerCount, ReducerLast} +} + func Sum(fv *Float64Field) *float64 { var sum float64 for i := 0; i < fv.Len(); i++ { @@ -81,34 +98,29 @@ func Last(fv *Float64Field) *float64 { return fv.GetValue(fv.Len() - 1) } -func GetReduceFunc(rFunc string) (ReducerFunc, error) { - switch strings.ToLower(rFunc) { - case "sum": +func GetReduceFunc(rFunc ReducerID) (ReducerFunc, error) { + switch rFunc { + case ReducerSum: return Sum, nil - case "mean": + case ReducerMean: return Avg, nil - case "min": + case ReducerMin: return Min, nil - case "max": + case ReducerMax: return Max, nil - case "count": + case ReducerCount: return Count, nil - case "last": + case ReducerLast: return Last, nil default: return nil, fmt.Errorf("reduction %v not implemented", rFunc) } } -// GetSupportedReduceFuncs returns collection of supported function names -func GetSupportedReduceFuncs() []string { - return []string{"sum", "mean", "min", "max", "count", "last"} -} - // Reduce turns the Series into a Number based on the given reduction function // if ReduceMapper is defined it applies it to the provided series and performs reduction of the resulting series. // Otherwise, the reduction operation is done against the original series. -func (s Series) Reduce(refID, rFunc string, mapper ReduceMapper) (Number, error) { +func (s Series) Reduce(refID string, rFunc ReducerID, mapper ReduceMapper) (Number, error) { var l data.Labels if s.GetLabels() != nil { l = s.GetLabels().Copy() diff --git a/pkg/expr/mathexp/reduce_test.go b/pkg/expr/mathexp/reduce_test.go index 2f9c7a2a81f..c4d786cad8f 100644 --- a/pkg/expr/mathexp/reduce_test.go +++ b/pkg/expr/mathexp/reduce_test.go @@ -30,7 +30,7 @@ var seriesEmpty = Vars{ func TestSeriesReduce(t *testing.T) { var tests = []struct { name string - red string + red ReducerID vars Vars varToReduce string errIs require.ErrorAssertionFunc @@ -217,7 +217,7 @@ var seriesNonNumbers = Vars{ func TestSeriesReduceDropNN(t *testing.T) { var tests = []struct { name string - red string + red ReducerID vars Vars varToReduce string results Results @@ -304,7 +304,7 @@ func TestSeriesReduceReplaceNN(t *testing.T) { replaceWith := rand.Float64() var tests = []struct { name string - red string + red ReducerID vars Vars varToReduce string results Results diff --git a/pkg/expr/models.go b/pkg/expr/models.go new file mode 100644 index 00000000000..4480331a51f --- /dev/null +++ b/pkg/expr/models.go @@ -0,0 +1,94 @@ +package expr + +import ( + "github.com/grafana/grafana/pkg/expr/classic" + "github.com/grafana/grafana/pkg/expr/mathexp" +) + +// Supported expression types +// +enum +type QueryType string + +const ( + // Apply a mathematical expression to results + QueryTypeMath QueryType = "math" + + // Reduce query results + QueryTypeReduce QueryType = "reduce" + + // Resample query results + QueryTypeResample QueryType = "resample" + + // Classic query + QueryTypeClassic QueryType = "classic_conditions" + + // Threshold + QueryTypeThreshold QueryType = "threshold" +) + +type MathQuery struct { + // General math expression + Expression string `json:"expression" jsonschema:"minLength=1,example=$A + 1,example=$A/$B"` +} + +type ReduceQuery struct { + // Reference to single query result + Expression string `json:"expression" jsonschema:"minLength=1,example=$A"` + + // The reducer + Reducer mathexp.ReducerID `json:"reducer"` + + // Reducer Options + Settings *ReduceSettings `json:"settings,omitempty"` +} + +// QueryType = resample +type ResampleQuery struct { + // The math expression + Expression string `json:"expression" jsonschema:"minLength=1,example=$A + 1,example=$A"` + + // The time durration + Window string `json:"window" jsonschema:"minLength=1,example=1w,example=10m"` + + // The downsample function + Downsampler string `json:"downsampler"` + + // The upsample function + Upsampler string `json:"upsampler"` +} + +type ThresholdQuery struct { + // Reference to single query result + Expression string `json:"expression" jsonschema:"minLength=1,example=$A"` + + // Threshold Conditions + Conditions []ThresholdConditionJSON `json:"conditions"` +} + +type ClassicQuery struct { + Conditions []classic.ConditionJSON `json:"conditions"` +} + +//------------------------------- +// Non-query commands +//------------------------------- + +type ReduceSettings struct { + // Non-number reduce behavior + Mode ReduceMode `json:"mode"` + + // Only valid when mode is replace + ReplaceWithValue *float64 `json:"replaceWithValue,omitempty"` +} + +// Non-Number behavior mode +// +enum +type ReduceMode string + +const ( + // Drop non-numbers + ReduceModeDrop ReduceMode = "dropNN" + + // Replace non-numbers + ReduceModeReplace ReduceMode = "replaceNN" +) diff --git a/pkg/expr/nodes.go b/pkg/expr/nodes.go index 32883d305d6..3f20267d71a 100644 --- a/pkg/expr/nodes.go +++ b/pkg/expr/nodes.go @@ -10,6 +10,8 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" + jsonitersdk "github.com/grafana/grafana-plugin-sdk-go/data/utils/jsoniter" + jsoniter "github.com/json-iterator/go" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" "gonum.org/v1/gonum/graph/simple" @@ -46,14 +48,22 @@ type rawNode struct { idx int64 } -func GetExpressionCommandType(rawQuery map[string]any) (c CommandType, err error) { +func getExpressionCommandTypeString(rawQuery map[string]any) (string, error) { rawType, ok := rawQuery["type"] if !ok { - return c, errors.New("no expression command type in query") + return "", errors.New("no expression command type in query") } typeString, ok := rawType.(string) if !ok { - return c, fmt.Errorf("expected expression command type to be a string, got type %T", rawType) + return "", fmt.Errorf("expected expression command type to be a string, got type %T", rawType) + } + return typeString, nil +} + +func GetExpressionCommandType(rawQuery map[string]any) (c CommandType, err error) { + typeString, err := getExpressionCommandTypeString(rawQuery) + if err != nil { + return c, err } return ParseCommandType(typeString) } @@ -111,6 +121,29 @@ func buildCMDNode(rn *rawNode, toggles featuremgmt.FeatureToggles) (*CMDNode, er CMDType: commandType, } + if toggles.IsEnabledGlobally(featuremgmt.FlagExpressionParser) { + rn.QueryType, err = getExpressionCommandTypeString(rn.Query) + if err != nil { + return nil, err // should not happen because the command was parsed first thing + } + + // NOTE: this structure of this is weird now, because it is targeting a structure + // where this is actually run in the root loop, however we want to verify the individual + // node parsing before changing the full tree parser + reader, err := NewExpressionQueryReader(toggles) + if err != nil { + return nil, err + } + + iter := jsoniter.ParseBytes(jsoniter.ConfigDefault, rn.QueryRaw) + q, err := reader.ReadQuery(rn, jsonitersdk.NewIterator(iter)) + if err != nil { + return nil, err + } + node.Command = q.Command + return node, err + } + switch commandType { case TypeMath: node.Command, err = UnmarshalMathCommand(rn) diff --git a/pkg/expr/reader.go b/pkg/expr/reader.go new file mode 100644 index 00000000000..e5563bb95d7 --- /dev/null +++ b/pkg/expr/reader.go @@ -0,0 +1,156 @@ +package expr + +import ( + "fmt" + "strings" + + "github.com/grafana/grafana-plugin-sdk-go/data/utils/jsoniter" + + "github.com/grafana/grafana/pkg/expr/classic" + "github.com/grafana/grafana/pkg/expr/mathexp" + "github.com/grafana/grafana/pkg/services/featuremgmt" +) + +// Once we are comfortable with the parsing logic, this struct will +// be merged/replace the existing Query struct in grafana/pkg/expr/transform.go +type ExpressionQuery struct { + RefID string + Command Command +} + +type ExpressionQueryReader struct { + features featuremgmt.FeatureToggles +} + +func NewExpressionQueryReader(features featuremgmt.FeatureToggles) (*ExpressionQueryReader, error) { + h := &ExpressionQueryReader{ + features: features, + } + return h, nil +} + +// ReadQuery implements query.TypedQueryHandler. +func (h *ExpressionQueryReader) ReadQuery( + // Properties that have been parsed off the same node + common *rawNode, // common query.CommonQueryProperties + // An iterator with context for the full node (include common values) + iter *jsoniter.Iterator, +) (eq ExpressionQuery, err error) { + referenceVar := "" + eq.RefID = common.RefID + qt := QueryType(common.QueryType) + switch qt { + case QueryTypeMath: + q := &MathQuery{} + err = iter.ReadVal(q) + if err == nil { + eq.Command, err = NewMathCommand(common.RefID, q.Expression) + } + + case QueryTypeReduce: + var mapper mathexp.ReduceMapper = nil + q := &ReduceQuery{} + err = iter.ReadVal(q) + if err == nil { + referenceVar, err = getReferenceVar(q.Expression, common.RefID) + } + if err == nil && q.Settings != nil { + switch q.Settings.Mode { + case ReduceModeDrop: + mapper = mathexp.DropNonNumber{} + case ReduceModeReplace: + if q.Settings.ReplaceWithValue == nil { + err = fmt.Errorf("setting replaceWithValue must be specified when mode is '%s'", q.Settings.Mode) + } + mapper = mathexp.ReplaceNonNumberWithValue{Value: *q.Settings.ReplaceWithValue} + default: + err = fmt.Errorf("unsupported reduce mode") + } + } + if err == nil { + eq.Command, err = NewReduceCommand(common.RefID, + q.Reducer, referenceVar, mapper) + } + + case QueryTypeResample: + q := &ResampleQuery{} + err = iter.ReadVal(q) + if err == nil && common.TimeRange == nil { + err = fmt.Errorf("missing time range in query") + } + if err == nil { + referenceVar, err = getReferenceVar(q.Expression, common.RefID) + } + if err == nil { + // tr := legacydata.NewDataTimeRange(common.TimeRange.From, common.TimeRange.To) + // AbsoluteTimeRange{ + // From: tr.GetFromAsTimeUTC(), + // To: tr.GetToAsTimeUTC(), + // }) + eq.Command, err = NewResampleCommand(common.RefID, + q.Window, + referenceVar, + q.Downsampler, + q.Upsampler, + common.TimeRange) + } + + case QueryTypeClassic: + q := &ClassicQuery{} + err = iter.ReadVal(q) + if err == nil { + eq.Command, err = classic.NewConditionCmd(common.RefID, q.Conditions) + } + + case QueryTypeThreshold: + q := &ThresholdQuery{} + err = iter.ReadVal(q) + if err == nil { + referenceVar, err = getReferenceVar(q.Expression, common.RefID) + } + if err == nil { + // we only support one condition for now, we might want to turn this in to "OR" expressions later + if len(q.Conditions) != 1 { + return eq, fmt.Errorf("threshold expression requires exactly one condition") + } + firstCondition := q.Conditions[0] + + threshold, err := NewThresholdCommand(common.RefID, referenceVar, firstCondition.Evaluator.Type, firstCondition.Evaluator.Params) + if err != nil { + return eq, fmt.Errorf("invalid condition: %w", err) + } + eq.Command = threshold + + if firstCondition.UnloadEvaluator != nil && h.features.IsEnabledGlobally(featuremgmt.FlagRecoveryThreshold) { + unloading, err := NewThresholdCommand(common.RefID, referenceVar, firstCondition.UnloadEvaluator.Type, firstCondition.UnloadEvaluator.Params) + unloading.Invert = true + if err != nil { + return eq, fmt.Errorf("invalid unloadCondition: %w", err) + } + var d Fingerprints + if firstCondition.LoadedDimensions != nil { + d, err = FingerprintsFromFrame(firstCondition.LoadedDimensions) + if err != nil { + return eq, fmt.Errorf("failed to parse loaded dimensions: %w", err) + } + } + eq.Command, err = NewHysteresisCommand(common.RefID, referenceVar, *threshold, *unloading, d) + if err != nil { + return eq, err + } + } + } + + default: + err = fmt.Errorf("unknown query type (%s)", common.QueryType) + } + return eq, err +} + +func getReferenceVar(exp string, refId string) (string, error) { + exp = strings.TrimPrefix(exp, "%") + if exp == "" { + return "", fmt.Errorf("no variable specified to reference for refId %v", refId) + } + return exp, nil +} diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index 7497dce6288..38e6caeaec5 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -1205,6 +1205,13 @@ var ( Owner: grafanaAppPlatformSquad, RequiresRestart: true, }, + { + Name: "expressionParser", + Description: "Enable new expression parser", + Stage: FeatureStageExperimental, + Owner: grafanaAppPlatformSquad, + RequiresRestart: true, + }, { Name: "groupByVariable", Description: "Enable groupBy variable support in scenes dashboards", diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index 7cdbf878fe3..ab21b586a43 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -161,5 +161,6 @@ nodeGraphDotLayout,experimental,@grafana/observability-traces-and-profiling,fals groupToNestedTableTransformation,preview,@grafana/dataviz-squad,false,false,true newPDFRendering,experimental,@grafana/sharing-squad,false,false,false kubernetesAggregator,experimental,@grafana/grafana-app-platform-squad,false,true,false +expressionParser,experimental,@grafana/grafana-app-platform-squad,false,true,false groupByVariable,experimental,@grafana/dashboards-squad,false,false,false alertingUpgradeDryrunOnStart,GA,@grafana/alerting-squad,false,true,false diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index fc74cbdf502..e5ec782a983 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -655,6 +655,10 @@ const ( // Enable grafana aggregator FlagKubernetesAggregator = "kubernetesAggregator" + // FlagExpressionParser + // Enable new expression parser + FlagExpressionParser = "expressionParser" + // FlagGroupByVariable // Enable groupBy variable support in scenes dashboards FlagGroupByVariable = "groupByVariable" diff --git a/pkg/services/featuremgmt/toggles_gen.json b/pkg/services/featuremgmt/toggles_gen.json index f2b2625553c..2e32e1e9545 100644 --- a/pkg/services/featuremgmt/toggles_gen.json +++ b/pkg/services/featuremgmt/toggles_gen.json @@ -5,287 +5,254 @@ "items": [ { "metadata": { - "name": "kubernetesQueryServiceRewrite", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "recoveryThreshold", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Rewrite requests targeting /ds/query to the query service", - "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad", - "requiresDevMode": true, + "description": "Enables feature recovery threshold (aka hysteresis) for threshold server-side expression", + "stage": "GA", + "codeowner": "@grafana/alerting-squad", "requiresRestart": true } }, { "metadata": { - "name": "managedPluginsInstall", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "teamHttpHeaders", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Install managed plugins directly from plugins catalog", - "stage": "preview", - "codeowner": "@grafana/plugins-platform-backend" + "description": "Enables datasources to apply team headers to the client requests", + "stage": "experimental", + "codeowner": "@grafana/identity-access-team" } }, { "metadata": { - "name": "canvasPanelPanZoom", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "logsExploreTableVisualisation", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Allow pan and zoom in canvas panel", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", + "description": "A table visualisation for logs in Explore", + "stage": "GA", + "codeowner": "@grafana/observability-logs", "frontend": true } }, { "metadata": { - "name": "queryOverLive", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "disableSecretsCompatibility", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Use Grafana Live WebSocket to execute backend queries", + "description": "Disable duplicated secret storage in legacy tables", "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad", - "frontend": true + "codeowner": "@grafana/hosted-grafana-team", + "requiresRestart": true } }, { "metadata": { - "name": "correlations", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingBacktesting", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Correlations page", - "stage": "GA", - "codeowner": "@grafana/explore-squad", - "allowSelfServe": true + "description": "Rule backtesting API for alerting", + "stage": "experimental", + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "renderAuthJWT", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertStateHistoryLokiPrimary", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Uses JWT-based auth for rendering instead of relying on remote cache", - "stage": "preview", - "codeowner": "@grafana/grafana-as-code", - "hideFromAdminPage": true + "description": "Enable a remote Loki instance as the primary source for state history reads.", + "stage": "experimental", + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "sqlDatasourceDatabaseSelection", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "pluginsInstrumentationStatusSource", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables previous SQL data source dataset dropdown behavior", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", - "frontend": true, - "hideFromAdminPage": true + "description": "Include a status source label for plugin request metrics and logs", + "stage": "experimental", + "codeowner": "@grafana/plugins-platform-backend" } }, { "metadata": { - "name": "alertingInsights", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "enablePluginsTracingByDefault", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Show the new alerting insights landing page", - "stage": "GA", - "codeowner": "@grafana/alerting-squad", - "frontend": true, - "hideFromAdminPage": true + "description": "Enable plugin tracing for all external plugins", + "stage": "experimental", + "codeowner": "@grafana/plugins-platform-backend", + "requiresRestart": true } }, { "metadata": { - "name": "logsInfiniteScrolling", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "newFolderPicker", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables infinite scrolling for the Logs panel in Explore and Dashboards", + "description": "Enables the nested folder picker without having nested folders enabled", "stage": "experimental", - "codeowner": "@grafana/observability-logs", + "codeowner": "@grafana/grafana-frontend-platform", "frontend": true } }, { "metadata": { - "name": "kubernetesFeatureToggles", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "correlations", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Use the kubernetes API for feature toggle management in the frontend", - "stage": "experimental", - "codeowner": "@grafana/grafana-operator-experience-squad", - "frontend": true, - "hideFromAdminPage": true + "description": "Correlations page", + "stage": "GA", + "codeowner": "@grafana/explore-squad", + "allowSelfServe": true } }, { "metadata": { - "name": "dashboardSceneSolo", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "datasourceQueryMultiStatus", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables rendering dashboards using scenes for solo panels", + "description": "Introduce HTTP 207 Multi Status for api/ds/query", "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", - "frontend": true - } - }, - { - "metadata": { - "name": "panelTitleSearch", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" - }, - "spec": { - "description": "Search for dashboards using panel title", - "stage": "preview", - "codeowner": "@grafana/grafana-app-platform-squad", - "hideFromAdminPage": true + "codeowner": "@grafana/plugins-platform-backend" } }, { "metadata": { - "name": "autoMigrateGraphPanel", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "sqlDatasourceDatabaseSelection", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Migrate old graph panel to supported time series panel - broken out from autoMigrateOldPanels to enable granular tracking", + "description": "Enables previous SQL data source dataset dropdown behavior", "stage": "preview", "codeowner": "@grafana/dataviz-squad", - "frontend": true - } - }, - { - "metadata": { - "name": "prometheusDataplane", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" - }, - "spec": { - "description": "Changes responses to from Prometheus to be compliant with the dataplane specification. In particular, when this feature toggle is active, the numeric `Field.Name` is set from 'Value' to the value of the `__name__` label.", - "stage": "GA", - "codeowner": "@grafana/observability-metrics", - "allowSelfServe": true + "frontend": true, + "hideFromAdminPage": true } }, { "metadata": { - "name": "cloudWatchLogsMonacoEditor", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "cloudWatchWildCardDimensionValues", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the Monaco editor for CloudWatch Logs queries", + "description": "Fetches dimension values from CloudWatch to correctly label wildcard dimensions", "stage": "GA", "codeowner": "@grafana/aws-datasources", - "frontend": true, "allowSelfServe": true } }, { "metadata": { - "name": "metricsSummary", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "addFieldFromCalculationStatFunctions", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables metrics summary queries in the Tempo data source", - "stage": "experimental", - "codeowner": "@grafana/observability-traces-and-profiling", + "description": "Add cumulative and window functions to the add field from calculation transformation", + "stage": "preview", + "codeowner": "@grafana/dataviz-squad", "frontend": true } }, { "metadata": { - "name": "showDashboardValidationWarnings", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "canvasPanelPanZoom", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Show warnings when dashboards do not validate against the schema", - "stage": "experimental", - "codeowner": "@grafana/dashboards-squad" + "description": "Allow pan and zoom in canvas panel", + "stage": "preview", + "codeowner": "@grafana/dataviz-squad", + "frontend": true } }, { "metadata": { - "name": "recordedQueriesMulti", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "cloudRBACRoles", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables writing multiple items from a single query within Recorded Queries", - "stage": "GA", - "codeowner": "@grafana/observability-metrics" + "description": "Enabled grafana cloud specific RBAC roles", + "stage": "experimental", + "codeowner": "@grafana/identity-access-team", + "requiresRestart": true, + "hideFromDocs": true } }, { "metadata": { - "name": "reportingRetries", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "panelTitleSearch", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables rendering retries for the reporting feature", + "description": "Search for dashboards using panel title", "stage": "preview", - "codeowner": "@grafana/sharing-squad", - "requiresRestart": true + "codeowner": "@grafana/grafana-app-platform-squad", + "hideFromAdminPage": true } }, { "metadata": { - "name": "regressionTransformation", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "mysqlAnsiQuotes", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables regression analysis transformation", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", - "frontend": true + "description": "Use double quotes to escape keyword in a MySQL query", + "stage": "experimental", + "codeowner": "@grafana/backend-platform" } }, { "metadata": { - "name": "newFolderPicker", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertStateHistoryLokiSecondary", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the nested folder picker without having nested folders enabled", + "description": "Enable Grafana to write alert state history to an external Loki instance in addition to Grafana annotations.", "stage": "experimental", - "codeowner": "@grafana/grafana-frontend-platform", - "frontend": true + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "grafanaAPIServerEnsureKubectlAccess", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "grafanaAPIServerWithExperimentalAPIs", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Start an additional https handler and write kubectl options", + "description": "Register experimental APIs with the k8s API server", "stage": "experimental", "codeowner": "@grafana/grafana-app-platform-squad", "requiresDevMode": true, @@ -294,51 +261,24 @@ }, { "metadata": { - "name": "datatrails", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" - }, - "spec": { - "description": "Enables the new core app datatrails", - "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", - "frontend": true, - "hideFromDocs": true - } - }, - { - "metadata": { - "name": "alertingQueryOptimization", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingSimplifiedRouting", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Optimizes eligible queries in order to reduce load on datasources", - "stage": "GA", + "description": "Enables users to easily configure alert notifications by specifying a contact point directly when editing or creating an alert rule", + "stage": "preview", "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "disableEnvelopeEncryption", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" - }, - "spec": { - "description": "Disable envelope encryption (emergency only)", - "stage": "GA", - "codeowner": "@grafana/grafana-as-code", - "hideFromAdminPage": true - } - }, - { - "metadata": { - "name": "autoMigrateOldPanels", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "autoMigratePiechartPanel", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Migrate old angular panels to supported versions (graph, table-old, worldmap, etc)", + "description": "Migrate old piechart panel to supported piechart panel - broken out from autoMigrateOldPanels to enable granular tracking", "stage": "preview", "codeowner": "@grafana/dataviz-squad", "frontend": true @@ -346,578 +286,605 @@ }, { "metadata": { - "name": "dataConnectionsConsole", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "autoMigrateWorldmapPanel", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables a new top-level page called Connections. This page is an experiment that provides a better experience when you install and configure data sources and other plugins.", - "stage": "GA", - "codeowner": "@grafana/plugins-platform-backend", - "allowSelfServe": true + "description": "Migrate old worldmap panel to supported geomap panel - broken out from autoMigrateOldPanels to enable granular tracking", + "stage": "preview", + "codeowner": "@grafana/dataviz-squad", + "frontend": true } }, { "metadata": { - "name": "externalServiceAuth", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "prometheusIncrementalQueryInstrumentation", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Starts an OAuth2 authentication provider for external services", + "description": "Adds RudderStack events to incremental queries", "stage": "experimental", - "codeowner": "@grafana/identity-access-team", - "requiresDevMode": true + "codeowner": "@grafana/observability-metrics", + "frontend": true } }, { "metadata": { - "name": "grafanaAPIServerWithExperimentalAPIs", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "prometheusConfigOverhaulAuth", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Register experimental APIs with the k8s API server", - "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad", - "requiresDevMode": true, - "requiresRestart": true + "description": "Update the Prometheus configuration page with the new auth component", + "stage": "GA", + "codeowner": "@grafana/observability-metrics" } }, { "metadata": { - "name": "groupToNestedTableTransformation", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "prometheusPromQAIL", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the group to nested table transformation", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", + "description": "Prometheus and AI/ML to assist users in creating a query", + "stage": "experimental", + "codeowner": "@grafana/observability-metrics", "frontend": true } }, { "metadata": { - "name": "lokiQuerySplittingConfig", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "panelFilterVariable", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Give users the option to configure split durations for Loki queries", + "description": "Enables use of the `systemPanelFilterVar` variable to filter panels in a dashboard", "stage": "experimental", - "codeowner": "@grafana/observability-logs", - "frontend": true + "codeowner": "@grafana/dashboards-squad", + "frontend": true, + "hideFromDocs": true } }, { "metadata": { - "name": "logsExploreTableVisualisation", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "pluginsSkipHostEnvVars", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "A table visualisation for logs in Explore", - "stage": "GA", - "codeowner": "@grafana/observability-logs", - "frontend": true + "description": "Disables passing host environment variable to plugin processes", + "stage": "experimental", + "codeowner": "@grafana/plugins-platform-backend" } }, { "metadata": { - "name": "awsAsyncQueryCaching", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "publicDashboardsEmailSharing", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable caching for async queries for Redshift and Athena. Requires that the datasource has caching and async query support enabled", - "stage": "GA", - "codeowner": "@grafana/aws-datasources" + "description": "Enables public dashboard sharing to be restricted to only allowed emails", + "stage": "preview", + "codeowner": "@grafana/sharing-squad", + "hideFromAdminPage": true, + "hideFromDocs": true } }, { "metadata": { - "name": "prometheusConfigOverhaulAuth", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "metricsSummary", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Update the Prometheus configuration page with the new auth component", - "stage": "GA", - "codeowner": "@grafana/observability-metrics" + "description": "Enables metrics summary queries in the Tempo data source", + "stage": "experimental", + "codeowner": "@grafana/observability-traces-and-profiling", + "frontend": true } }, { "metadata": { - "name": "alertingPreviewUpgrade", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "tableSharedCrosshair", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Show Unified Alerting preview and upgrade page in legacy alerting", - "stage": "GA", - "codeowner": "@grafana/alerting-squad", - "requiresRestart": true + "description": "Enables shared crosshair in table panel", + "stage": "experimental", + "codeowner": "@grafana/dataviz-squad", + "frontend": true } }, { "metadata": { - "name": "alertStateHistoryLokiOnly", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "regressionTransformation", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Disable Grafana alerts from emitting annotations when a remote Loki instance is available.", - "stage": "experimental", - "codeowner": "@grafana/alerting-squad" + "description": "Enables regression analysis transformation", + "stage": "preview", + "codeowner": "@grafana/dataviz-squad", + "frontend": true } }, { "metadata": { - "name": "permissionsFilterRemoveSubquery", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "queryOverLive", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Alternative permission filter implementation that does not use subqueries for fetching the dashboard folder", + "description": "Use Grafana Live WebSocket to execute backend queries", "stage": "experimental", - "codeowner": "@grafana/backend-platform" + "codeowner": "@grafana/grafana-app-platform-squad", + "frontend": true } }, { "metadata": { - "name": "externalCorePlugins", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "prometheusDataplane", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Allow core plugins to be loaded as external", - "stage": "experimental", - "codeowner": "@grafana/plugins-platform-backend" + "description": "Changes responses to from Prometheus to be compliant with the dataplane specification. In particular, when this feature toggle is active, the numeric `Field.Name` is set from 'Value' to the value of the `__name__` label.", + "stage": "GA", + "codeowner": "@grafana/observability-metrics", + "allowSelfServe": true } }, { "metadata": { - "name": "unifiedStorage", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "unifiedRequestLog", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "SQL-based k8s storage", + "description": "Writes error logs to the request logger", "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad", - "requiresDevMode": true, - "requiresRestart": true + "codeowner": "@grafana/backend-platform" } }, { "metadata": { - "name": "influxdbSqlSupport", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "wargamesTesting", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable InfluxDB SQL query language support with new querying UI", - "stage": "GA", - "codeowner": "@grafana/observability-metrics", - "requiresRestart": true, - "allowSelfServe": true + "description": "Placeholder feature flag for internal testing", + "stage": "experimental", + "codeowner": "@grafana/hosted-grafana-team" } }, { "metadata": { - "name": "angularDeprecationUI", - "resourceVersion": "1708080773145", - "creationTimestamp": "2024-02-14T16:41:35Z", - "annotations": { - "grafana.app/updatedTimestamp": "2024-02-16 10:52:53.145203323 +0000 UTC" - } + "name": "alertmanagerRemotePrimary", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Display Angular warnings in dashboards and panels", - "stage": "GA", - "codeowner": "@grafana/plugins-platform-backend", - "frontend": true + "description": "Enable Grafana to have a remote Alertmanager instance as the primary Alertmanager.", + "stage": "experimental", + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "libraryPanelRBAC", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "ssoSettingsApi", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables RBAC support for library panels", - "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", - "requiresRestart": true + "description": "Enables the SSO settings API and the OAuth configuration UIs in Grafana", + "stage": "preview", + "codeowner": "@grafana/identity-access-team" } }, { "metadata": { - "name": "promQLScope", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "logsInfiniteScrolling", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "In-development feature that will allow injection of labels into prometheus queries.", + "description": "Enables infinite scrolling for the Logs panel in Explore and Dashboards", "stage": "experimental", - "codeowner": "@grafana/observability-metrics" + "codeowner": "@grafana/observability-logs", + "frontend": true } }, { "metadata": { - "name": "publicDashboards", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "displayAnonymousStats", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "[Deprecated] Public dashboards are now enabled by default; to disable them, use the configuration setting. This feature toggle will be removed in the next major version.", + "description": "Enables anonymous stats to be shown in the UI for Grafana", "stage": "GA", - "codeowner": "@grafana/sharing-squad", - "allowSelfServe": true + "codeowner": "@grafana/identity-access-team", + "frontend": true } }, { "metadata": { - "name": "unifiedRequestLog", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "storage", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Writes error logs to the request logger", + "description": "Configurable storage for dashboards, datasources, and resources", "stage": "experimental", - "codeowner": "@grafana/backend-platform" + "codeowner": "@grafana/grafana-app-platform-squad" } }, { "metadata": { - "name": "teamHttpHeaders", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "newPDFRendering", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables datasources to apply team headers to the client requests", + "description": "New implementation for the dashboard to PDF rendering", "stage": "experimental", - "codeowner": "@grafana/identity-access-team" + "codeowner": "@grafana/sharing-squad" } }, { "metadata": { - "name": "groupByVariable", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "pluginsFrontendSandbox", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable groupBy variable support in scenes dashboards", + "description": "Enables the plugins frontend sandbox", "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", - "hideFromAdminPage": true, - "hideFromDocs": true + "codeowner": "@grafana/plugins-platform-backend", + "frontend": true } }, { "metadata": { - "name": "dashboardScene", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "logRequestsInstrumentedAsUnknown", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables dashboard rendering using scenes for all roles", + "description": "Logs the path for requests that are instrumented as unknown", "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", - "frontend": true + "codeowner": "@grafana/hosted-grafana-team" } }, { "metadata": { - "name": "lokiQueryHints", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "lokiStructuredMetadata", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables query hints for Loki", + "description": "Enables the loki data source to request structured metadata from the Loki server", "stage": "GA", - "codeowner": "@grafana/observability-logs", - "frontend": true + "codeowner": "@grafana/observability-logs" } }, { "metadata": { - "name": "autoMigrateTablePanel", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "managedPluginsInstall", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Migrate old table panel to supported table panel - broken out from autoMigrateOldPanels to enable granular tracking", + "description": "Install managed plugins directly from plugins catalog", "stage": "preview", - "codeowner": "@grafana/dataviz-squad", - "frontend": true + "codeowner": "@grafana/plugins-platform-backend" } }, { "metadata": { - "name": "logsContextDatasourceUi", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "dashboardSceneForViewers", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Allow datasource to provide custom UI for context view", - "stage": "GA", - "codeowner": "@grafana/observability-logs", - "frontend": true, - "allowSelfServe": true + "description": "Enables dashboard rendering using Scenes for viewer roles", + "stage": "experimental", + "codeowner": "@grafana/dashboards-squad", + "frontend": true } }, { "metadata": { - "name": "disableSSEDataplane", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingDetailsViewV2", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Disables dataplane specific processing in server side expressions.", + "description": "Enables the preview of the new alert details view", "stage": "experimental", - "codeowner": "@grafana/observability-metrics" + "codeowner": "@grafana/alerting-squad", + "frontend": true, + "hideFromDocs": true } }, { "metadata": { - "name": "refactorVariablesTimeRange", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "jitterAlertRulesWithinGroups", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Refactor time range variables flow to reduce number of API calls made when query variables are chained", + "description": "Distributes alert rule evaluations more evenly over time, including spreading out rules within the same group", "stage": "preview", - "codeowner": "@grafana/dashboards-squad", - "hideFromAdminPage": true + "codeowner": "@grafana/alerting-squad", + "requiresRestart": true, + "hideFromDocs": true } }, { "metadata": { - "name": "awsDatasourcesTempCredentials", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "unifiedStorage", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Support temporary security credentials in AWS plugins for Grafana Cloud customers", + "description": "SQL-based k8s storage", "stage": "experimental", - "codeowner": "@grafana/aws-datasources" + "codeowner": "@grafana/grafana-app-platform-squad", + "requiresDevMode": true, + "requiresRestart": true } }, { "metadata": { - "name": "prometheusMetricEncyclopedia", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "enableElasticsearchBackendQuerying", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Adds the metrics explorer component to the Prometheus query builder as an option in metric select", + "description": "Enable the processing of queries and responses in the Elasticsearch data source through backend", "stage": "GA", - "codeowner": "@grafana/observability-metrics", + "codeowner": "@grafana/observability-logs", + "allowSelfServe": true + } + }, + { + "metadata": { + "name": "cloudWatchLogsMonacoEditor", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" + }, + "spec": { + "description": "Enables the Monaco editor for CloudWatch Logs queries", + "stage": "GA", + "codeowner": "@grafana/aws-datasources", "frontend": true, "allowSelfServe": true } }, { "metadata": { - "name": "wargamesTesting", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertmanagerRemoteSecondary", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Placeholder feature flag for internal testing", + "description": "Enable Grafana to sync configuration and state with a remote Alertmanager.", "stage": "experimental", - "codeowner": "@grafana/hosted-grafana-team" + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "idForwarding", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "disableAngular", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Generate signed id token for identity that can be forwarded to plugins and external services", - "stage": "experimental", - "codeowner": "@grafana/identity-access-team" + "description": "Dynamic flag to disable angular at runtime. The preferred method is to set `angular_support_enabled` to `false` in the [security] settings, which allows you to change the state at runtime.", + "stage": "preview", + "codeowner": "@grafana/dataviz-squad", + "frontend": true, + "hideFromAdminPage": true } }, { "metadata": { - "name": "kubernetesSnapshots", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "grafanaAPIServerEnsureKubectlAccess", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Routes snapshot requests from /api to the /apis endpoint", + "description": "Start an additional https handler and write kubectl options", "stage": "experimental", "codeowner": "@grafana/grafana-app-platform-squad", + "requiresDevMode": true, "requiresRestart": true } }, { "metadata": { - "name": "alertmanagerRemoteSecondary", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingNoDataErrorExecution", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable Grafana to sync configuration and state with a remote Alertmanager.", - "stage": "experimental", - "codeowner": "@grafana/alerting-squad" + "description": "Changes how Alerting state manager handles execution of NoData/Error", + "stage": "GA", + "codeowner": "@grafana/alerting-squad", + "requiresRestart": true } }, { "metadata": { - "name": "alertingBacktesting", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "angularDeprecationUI", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Rule backtesting API for alerting", + "description": "Display Angular warnings in dashboards and panels", + "stage": "GA", + "codeowner": "@grafana/plugins-platform-backend", + "frontend": true + } + }, + { + "metadata": { + "name": "lokiFormatQuery", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" + }, + "spec": { + "description": "Enables the ability to format Loki queries", "stage": "experimental", - "codeowner": "@grafana/alerting-squad" + "codeowner": "@grafana/observability-logs", + "frontend": true } }, { "metadata": { - "name": "influxdbRunQueriesInParallel", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "nestedFolderPicker", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables running InfluxDB Influxql queries in parallel", - "stage": "privatePreview", - "codeowner": "@grafana/observability-metrics" + "description": "Enables the new folder picker to work with nested folders. Requires the nestedFolders feature toggle", + "stage": "GA", + "codeowner": "@grafana/grafana-frontend-platform", + "frontend": true, + "allowSelfServe": true } }, { "metadata": { - "name": "pluginsAPIMetrics", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "individualCookiePreferences", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Sends metrics of public grafana packages usage by plugins", + "description": "Support overriding cookie preferences per user", "stage": "experimental", - "codeowner": "@grafana/plugins-platform-backend", - "frontend": true + "codeowner": "@grafana/backend-platform" } }, { "metadata": { - "name": "cloudWatchBatchQueries", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "externalServiceAccounts", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Runs CloudWatch metrics queries as separate batches", + "description": "Automatic service account and token setup for plugins", "stage": "preview", - "codeowner": "@grafana/aws-datasources" + "codeowner": "@grafana/identity-access-team", + "hideFromAdminPage": true } }, { "metadata": { - "name": "extractFieldsNameDeduplication", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "groupByVariable", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Make sure extracted field names are unique in the dataframe", + "description": "Enable groupBy variable support in scenes dashboards", "stage": "experimental", - "codeowner": "@grafana/dataviz-squad", - "frontend": true + "codeowner": "@grafana/dashboards-squad", + "hideFromAdminPage": true, + "hideFromDocs": true } }, { "metadata": { - "name": "exploreScrollableLogsContainer", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "autoMigrateGraphPanel", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Improves the scrolling behavior of logs in Explore", - "stage": "experimental", - "codeowner": "@grafana/observability-logs", + "description": "Migrate old graph panel to supported time series panel - broken out from autoMigrateOldPanels to enable granular tracking", + "stage": "preview", + "codeowner": "@grafana/dataviz-squad", "frontend": true } }, { "metadata": { - "name": "logRowsPopoverMenu", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "dashgpt", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable filtering menu displayed when text of a log line is selected", - "stage": "GA", - "codeowner": "@grafana/observability-logs", + "description": "Enable AI powered features in dashboards", + "stage": "preview", + "codeowner": "@grafana/dashboards-squad", "frontend": true } }, { "metadata": { - "name": "storage", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "kubernetesSnapshots", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Configurable storage for dashboards, datasources, and resources", + "description": "Routes snapshot requests from /api to the /apis endpoint", "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad" + "codeowner": "@grafana/grafana-app-platform-squad", + "requiresRestart": true } }, { "metadata": { - "name": "returnToPrevious", - "resourceVersion": "1708097934301", - "creationTimestamp": "2024-02-14T16:41:35Z", - "annotations": { - "grafana.app/updatedTimestamp": "2024-02-16 15:38:54.301079 +0000 UTC" - } + "name": "influxdbBackendMigration", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the return to previous context functionality", - "stage": "preview", - "codeowner": "@grafana/grafana-frontend-platform", + "description": "Query InfluxDB InfluxQL without the proxy", + "stage": "GA", + "codeowner": "@grafana/observability-metrics", "frontend": true } }, { "metadata": { - "name": "influxqlStreamingParser", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "redshiftAsyncQueryDataSupport", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable streaming JSON parser for InfluxDB datasource InfluxQL query language", - "stage": "experimental", - "codeowner": "@grafana/observability-metrics" + "description": "Enable async query data support for Redshift", + "stage": "GA", + "codeowner": "@grafana/aws-datasources" } }, { "metadata": { - "name": "enableDatagridEditing", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "topnav", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the edit functionality in the datagrid panel", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", - "frontend": true + "description": "Enables topnav support in external plugins. The new Grafana navigation cannot be disabled.", + "stage": "deprecated", + "codeowner": "@grafana/grafana-frontend-platform" } }, { "metadata": { - "name": "lokiPredefinedOperations", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "lokiQuerySplittingConfig", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Adds predefined query operations to Loki query editor", + "description": "Give users the option to configure split durations for Loki queries", "stage": "experimental", "codeowner": "@grafana/observability-logs", "frontend": true @@ -925,271 +892,281 @@ }, { "metadata": { - "name": "nestedFolders", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "awsDatasourcesTempCredentials", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable folder nesting", - "stage": "preview", - "codeowner": "@grafana/backend-platform" + "description": "Support temporary security credentials in AWS plugins for Grafana Cloud customers", + "stage": "experimental", + "codeowner": "@grafana/aws-datasources" } }, { "metadata": { - "name": "panelMonitoring", - "resourceVersion": "1707938948387", - "creationTimestamp": "2024-02-14T16:41:35Z", - "annotations": { - "grafana.app/updatedTimestamp": "2024-02-14 19:29:08.387414 +0000 UTC" - } + "name": "influxdbSqlSupport", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables panel monitoring through logs and measurements", + "description": "Enable InfluxDB SQL query language support with new querying UI", "stage": "GA", + "codeowner": "@grafana/observability-metrics", + "requiresRestart": true, + "allowSelfServe": true + } + }, + { + "metadata": { + "name": "autoMigrateTablePanel", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" + }, + "spec": { + "description": "Migrate old table panel to supported table panel - broken out from autoMigrateOldPanels to enable granular tracking", + "stage": "preview", "codeowner": "@grafana/dataviz-squad", "frontend": true } }, { "metadata": { - "name": "mysqlAnsiQuotes", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "migrationLocking", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Use double quotes to escape keyword in a MySQL query", - "stage": "experimental", + "description": "Lock database during migrations", + "stage": "preview", "codeowner": "@grafana/backend-platform" } }, { "metadata": { - "name": "pluginsSkipHostEnvVars", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "accessControlOnCall", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Disables passing host environment variable to plugin processes", - "stage": "experimental", - "codeowner": "@grafana/plugins-platform-backend" + "description": "Access control primitives for OnCall", + "stage": "preview", + "codeowner": "@grafana/identity-access-team", + "hideFromAdminPage": true } }, { "metadata": { - "name": "newPDFRendering", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "faroDatasourceSelector", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "New implementation for the dashboard to PDF rendering", - "stage": "experimental", - "codeowner": "@grafana/sharing-squad" + "description": "Enable the data source selector within the Frontend Apps section of the Frontend Observability", + "stage": "preview", + "codeowner": "@grafana/app-o11y", + "frontend": true } }, { "metadata": { - "name": "dashboardEmbed", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "featureToggleAdminPage", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Allow embedding dashboard for external use in Code editors", + "description": "Enable admin page for managing feature toggles from the Grafana front-end", "stage": "experimental", - "codeowner": "@grafana/grafana-as-code", - "frontend": true + "codeowner": "@grafana/grafana-operator-experience-squad", + "requiresRestart": true } }, { "metadata": { - "name": "cloudWatchWildCardDimensionValues", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "awsAsyncQueryCaching", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Fetches dimension values from CloudWatch to correctly label wildcard dimensions", + "description": "Enable caching for async queries for Redshift and Athena. Requires that the datasource has caching and async query support enabled", "stage": "GA", - "codeowner": "@grafana/aws-datasources", - "allowSelfServe": true + "codeowner": "@grafana/aws-datasources" } }, { "metadata": { - "name": "addFieldFromCalculationStatFunctions", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "reportingRetries", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Add cumulative and window functions to the add field from calculation transformation", + "description": "Enables rendering retries for the reporting feature", "stage": "preview", - "codeowner": "@grafana/dataviz-squad", - "frontend": true + "codeowner": "@grafana/sharing-squad", + "requiresRestart": true } }, { "metadata": { - "name": "panelTitleSearchInV1", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "kubernetesAggregator", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable searching for dashboards using panel title in search v1", + "description": "Enable grafana aggregator", "stage": "experimental", - "codeowner": "@grafana/backend-platform", - "requiresDevMode": true + "codeowner": "@grafana/grafana-app-platform-squad", + "requiresRestart": true } }, { "metadata": { - "name": "pdfTables", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "publicDashboards", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables generating table data as PDF in reporting", - "stage": "preview", - "codeowner": "@grafana/sharing-squad" + "description": "[Deprecated] Public dashboards are now enabled by default; to disable them, use the configuration setting. This feature toggle will be removed in the next major version.", + "stage": "GA", + "codeowner": "@grafana/sharing-squad", + "allowSelfServe": true } }, { "metadata": { - "name": "jitterAlertRulesWithinGroups", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "transformationsRedesign", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Distributes alert rule evaluations more evenly over time, including spreading out rules within the same group", - "stage": "preview", - "codeowner": "@grafana/alerting-squad", - "requiresRestart": true, - "hideFromDocs": true + "description": "Enables the transformations redesign", + "stage": "GA", + "codeowner": "@grafana/observability-metrics", + "frontend": true, + "allowSelfServe": true } }, { "metadata": { - "name": "publicDashboardsEmailSharing", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "traceQLStreaming", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables public dashboard sharing to be restricted to only allowed emails", - "stage": "preview", - "codeowner": "@grafana/sharing-squad", - "hideFromAdminPage": true, - "hideFromDocs": true + "description": "Enables response streaming of TraceQL queries of the Tempo data source", + "stage": "experimental", + "codeowner": "@grafana/observability-traces-and-profiling", + "frontend": true } }, { "metadata": { - "name": "migrationLocking", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "formatString", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Lock database during migrations", + "description": "Enable format string transformer", "stage": "preview", - "codeowner": "@grafana/backend-platform" + "codeowner": "@grafana/dataviz-squad", + "frontend": true } }, { "metadata": { - "name": "autoMigrateStatPanel", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingQueryOptimization", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Migrate old stat panel to supported stat panel - broken out from autoMigrateOldPanels to enable granular tracking", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", - "frontend": true + "description": "Optimizes eligible queries in order to reduce load on datasources", + "stage": "GA", + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "canvasPanelNesting", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "nestedFolders", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Allow elements nesting", - "stage": "experimental", - "codeowner": "@grafana/dataviz-squad", - "frontend": true, - "hideFromAdminPage": true + "description": "Enable folder nesting", + "stage": "preview", + "codeowner": "@grafana/backend-platform" } }, { "metadata": { - "name": "externalServiceAccounts", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "scenes", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Automatic service account and token setup for plugins", - "stage": "preview", - "codeowner": "@grafana/identity-access-team", - "hideFromAdminPage": true + "description": "Experimental framework to build interactive dashboards", + "stage": "experimental", + "codeowner": "@grafana/dashboards-squad", + "frontend": true } }, { "metadata": { - "name": "alertingSaveStatePeriodic", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "dataConnectionsConsole", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Writes the state periodically to the database, asynchronous to rule evaluation", - "stage": "privatePreview", - "codeowner": "@grafana/alerting-squad" + "description": "Enables a new top-level page called Connections. This page is an experiment that provides a better experience when you install and configure data sources and other plugins.", + "stage": "GA", + "codeowner": "@grafana/plugins-platform-backend", + "allowSelfServe": true } }, { "metadata": { - "name": "traceToMetrics", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "extraThemes", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable trace to metrics links", + "description": "Enables extra themes", "stage": "experimental", - "codeowner": "@grafana/observability-traces-and-profiling", + "codeowner": "@grafana/grafana-frontend-platform", "frontend": true } }, { "metadata": { - "name": "cloudWatchCrossAccountQuerying", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "annotationPermissionUpdate", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables cross-account querying in CloudWatch datasources", - "stage": "GA", - "codeowner": "@grafana/aws-datasources", - "allowSelfServe": true + "description": "Separate annotation permissions from dashboard permissions to allow for more granular control.", + "stage": "experimental", + "codeowner": "@grafana/identity-access-team" } }, { "metadata": { - "name": "pluginsFrontendSandbox", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "extractFieldsNameDeduplication", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the plugins frontend sandbox", + "description": "Make sure extracted field names are unique in the dataframe", "stage": "experimental", - "codeowner": "@grafana/plugins-platform-backend", + "codeowner": "@grafana/dataviz-squad", "frontend": true } }, { "metadata": { - "name": "traceQLStreaming", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "flameGraphItemCollapsing", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables response streaming of TraceQL queries of the Tempo data source", + "description": "Allow collapsing of flame graph items", "stage": "experimental", "codeowner": "@grafana/observability-traces-and-profiling", "frontend": true @@ -1197,12 +1174,12 @@ }, { "metadata": { - "name": "alertingNoDataErrorExecution", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingPreviewUpgrade", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Changes how Alerting state manager handles execution of NoData/Error", + "description": "Show Unified Alerting preview and upgrade page in legacy alerting", "stage": "GA", "codeowner": "@grafana/alerting-squad", "requiresRestart": true @@ -1210,935 +1187,940 @@ }, { "metadata": { - "name": "logRequestsInstrumentedAsUnknown", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "disableEnvelopeEncryption", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Logs the path for requests that are instrumented as unknown", - "stage": "experimental", - "codeowner": "@grafana/hosted-grafana-team" + "description": "Disable envelope encryption (emergency only)", + "stage": "GA", + "codeowner": "@grafana/grafana-as-code", + "hideFromAdminPage": true } }, { "metadata": { - "name": "transformationsRedesign", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "groupToNestedTableTransformation", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the transformations redesign", - "stage": "GA", - "codeowner": "@grafana/observability-metrics", - "frontend": true, - "allowSelfServe": true + "description": "Enables the group to nested table transformation", + "stage": "preview", + "codeowner": "@grafana/dataviz-squad", + "frontend": true } }, { "metadata": { - "name": "prometheusPromQAIL", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "promQLScope", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Prometheus and AI/ML to assist users in creating a query", + "description": "In-development feature that will allow injection of labels into prometheus queries.", "stage": "experimental", - "codeowner": "@grafana/observability-metrics", - "frontend": true + "codeowner": "@grafana/observability-metrics" } }, { "metadata": { - "name": "kubernetesAggregator", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "logsContextDatasourceUi", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable grafana aggregator", - "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad", - "requiresRestart": true + "description": "Allow datasource to provide custom UI for context view", + "stage": "GA", + "codeowner": "@grafana/observability-logs", + "frontend": true, + "allowSelfServe": true } }, { "metadata": { - "name": "live-service-web-worker", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertStateHistoryLokiOnly", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "This will use a webworker thread to processes events rather than the main thread", + "description": "Disable Grafana alerts from emitting annotations when a remote Loki instance is available.", "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad", - "frontend": true + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "grpcServer", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "transformationsVariableSupport", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Run the GRPC server", + "description": "Allows using variables in transformations", "stage": "preview", - "codeowner": "@grafana/grafana-app-platform-squad", - "hideFromAdminPage": true + "codeowner": "@grafana/dataviz-squad", + "frontend": true } }, { "metadata": { - "name": "clientTokenRotation", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z", - "deletionTimestamp": "2024-02-16T15:38:59Z" + "name": "dashboardSceneSolo", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Replaces the current in-request token rotation so that the client initiates the rotation", - "stage": "GA", - "codeowner": "@grafana/identity-access-team" + "description": "Enables rendering dashboards using scenes for solo panels", + "stage": "experimental", + "codeowner": "@grafana/dashboards-squad", + "frontend": true } }, { "metadata": { - "name": "lokiStructuredMetadata", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "athenaAsyncQueryDataSupport", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the loki data source to request structured metadata from the Loki server", + "description": "Enable async query data support for Athena", "stage": "GA", - "codeowner": "@grafana/observability-logs" + "codeowner": "@grafana/aws-datasources", + "frontend": true } }, { "metadata": { - "name": "tableSharedCrosshair", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "lokiLogsDataplane", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables shared crosshair in table panel", + "description": "Changes logs responses from Loki to be compliant with the dataplane specification.", "stage": "experimental", + "codeowner": "@grafana/observability-logs" + } + }, + { + "metadata": { + "name": "enableDatagridEditing", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" + }, + "spec": { + "description": "Enables the edit functionality in the datagrid panel", + "stage": "preview", "codeowner": "@grafana/dataviz-squad", "frontend": true } }, { "metadata": { - "name": "lokiQuerySplitting", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "exploreScrollableLogsContainer", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Split large interval queries into subqueries with smaller time intervals", - "stage": "GA", + "description": "Improves the scrolling behavior of logs in Explore", + "stage": "experimental", "codeowner": "@grafana/observability-logs", - "frontend": true, - "allowSelfServe": true + "frontend": true } }, { "metadata": { - "name": "lokiMetricDataplane", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "lokiRunQueriesInParallel", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Changes metric responses from Loki to be compliant with the dataplane specification.", - "stage": "GA", - "codeowner": "@grafana/observability-logs", - "allowSelfServe": true + "description": "Enables running Loki queries in parallel", + "stage": "privatePreview", + "codeowner": "@grafana/observability-logs" } }, { "metadata": { - "name": "transformationsVariableSupport", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "panelTitleSearchInV1", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Allows using variables in transformations", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", - "frontend": true + "description": "Enable searching for dashboards using panel title in search v1", + "stage": "experimental", + "codeowner": "@grafana/backend-platform", + "requiresDevMode": true } }, { "metadata": { - "name": "newVizTooltips", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "logRowsPopoverMenu", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "New visualizations tooltips UX", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", + "description": "Enable filtering menu displayed when text of a log line is selected", + "stage": "GA", + "codeowner": "@grafana/observability-logs", "frontend": true } }, { "metadata": { - "name": "topnav", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "lokiQueryHints", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables topnav support in external plugins. The new Grafana navigation cannot be disabled.", - "stage": "deprecated", - "codeowner": "@grafana/grafana-frontend-platform" + "description": "Enables query hints for Loki", + "stage": "GA", + "codeowner": "@grafana/observability-logs", + "frontend": true } }, { "metadata": { - "name": "ssoSettingsApi", - "resourceVersion": "1707991575438", - "creationTimestamp": "2024-02-14T16:41:35Z", - "annotations": { - "grafana.app/updatedTimestamp": "2024-02-15 10:06:15.438523 +0000 UTC" - } + "name": "lokiExperimentalStreaming", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the SSO settings API and the OAuth configuration UIs in Grafana", - "stage": "preview", - "codeowner": "@grafana/identity-access-team" + "description": "Support new streaming approach for loki (prototype, needs special loki build)", + "stage": "experimental", + "codeowner": "@grafana/observability-logs" } }, { "metadata": { - "name": "onPremToCloudMigrations", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "traceToMetrics", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "In-development feature that will allow users to easily migrate their on-prem Grafana instances to Grafana Cloud.", + "description": "Enable trace to metrics links", "stage": "experimental", - "codeowner": "@grafana/grafana-operator-experience-squad" + "codeowner": "@grafana/observability-traces-and-profiling", + "frontend": true } }, { "metadata": { - "name": "disableSecretsCompatibility", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "grpcServer", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Disable duplicated secret storage in legacy tables", - "stage": "experimental", - "codeowner": "@grafana/hosted-grafana-team", - "requiresRestart": true + "description": "Run the GRPC server", + "stage": "preview", + "codeowner": "@grafana/grafana-app-platform-squad", + "hideFromAdminPage": true } }, { "metadata": { - "name": "athenaAsyncQueryDataSupport", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "cloudWatchCrossAccountQuerying", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable async query data support for Athena", + "description": "Enables cross-account querying in CloudWatch datasources", "stage": "GA", "codeowner": "@grafana/aws-datasources", - "frontend": true + "allowSelfServe": true } }, { "metadata": { - "name": "lokiLogsDataplane", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "vizAndWidgetSplit", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Changes logs responses from Loki to be compliant with the dataplane specification.", + "description": "Split panels between visualizations and widgets", "stage": "experimental", - "codeowner": "@grafana/observability-logs" + "codeowner": "@grafana/dashboards-squad", + "frontend": true } }, { "metadata": { - "name": "enableNativeHTTPHistogram", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "panelMonitoring", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables native HTTP Histograms", - "stage": "experimental", - "codeowner": "@grafana/hosted-grafana-team" + "description": "Enables panel monitoring through logs and measurements", + "stage": "GA", + "codeowner": "@grafana/dataviz-squad", + "frontend": true } }, { "metadata": { - "name": "panelFilterVariable", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "live-service-web-worker", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables use of the `systemPanelFilterVar` variable to filter panels in a dashboard", + "description": "This will use a webworker thread to processes events rather than the main thread", "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", - "frontend": true, - "hideFromDocs": true - } - }, - { - "metadata": { - "name": "featureHighlights", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" - }, - "spec": { - "description": "Highlight Grafana Enterprise features", - "stage": "GA", - "codeowner": "@grafana/grafana-as-code", - "allowSelfServe": true + "codeowner": "@grafana/grafana-app-platform-squad", + "frontend": true } }, { "metadata": { - "name": "alertingNoNormalState", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "returnToPrevious", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Stop maintaining state of alerts that are not firing", + "description": "Enables the return to previous context functionality", "stage": "preview", - "codeowner": "@grafana/alerting-squad", - "hideFromAdminPage": true + "codeowner": "@grafana/grafana-frontend-platform", + "frontend": true } }, { "metadata": { - "name": "enableElasticsearchBackendQuerying", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "cachingOptimizeSerializationMemoryUsage", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable the processing of queries and responses in the Elasticsearch data source through backend", - "stage": "GA", - "codeowner": "@grafana/observability-logs", - "allowSelfServe": true + "description": "If enabled, the caching backend gradually serializes query responses for the cache, comparing against the configured `[caching]max_value_mb` value as it goes. This can can help prevent Grafana from running out of memory while attempting to cache very large query responses.", + "stage": "experimental", + "codeowner": "@grafana/grafana-operator-experience-squad" } }, { "metadata": { - "name": "displayAnonymousStats", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "onPremToCloudMigrations", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables anonymous stats to be shown in the UI for Grafana", - "stage": "GA", - "codeowner": "@grafana/identity-access-team", - "frontend": true + "description": "In-development feature that will allow users to easily migrate their on-prem Grafana instances to Grafana Cloud.", + "stage": "experimental", + "codeowner": "@grafana/grafana-operator-experience-squad" } }, { "metadata": { - "name": "nestedFolderPicker", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "featureHighlights", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the new folder picker to work with nested folders. Requires the nestedFolders feature toggle", + "description": "Highlight Grafana Enterprise features", "stage": "GA", - "codeowner": "@grafana/grafana-frontend-platform", - "frontend": true, + "codeowner": "@grafana/grafana-as-code", "allowSelfServe": true } }, { "metadata": { - "name": "dataplaneFrontendFallback", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "splitScopes", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Support dataplane contract field name change for transformations and field name matchers where the name is different", - "stage": "GA", - "codeowner": "@grafana/observability-metrics", - "frontend": true, - "allowSelfServe": true + "description": "Support faster dashboard and folder search by splitting permission scopes into parts", + "stage": "deprecated", + "codeowner": "@grafana/identity-access-team", + "requiresRestart": true, + "hideFromAdminPage": true } }, { "metadata": { - "name": "vizAndWidgetSplit", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "nodeGraphDotLayout", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Split panels between visualizations and widgets", + "description": "Changed the layout algorithm for the node graph", "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", + "codeowner": "@grafana/observability-traces-and-profiling", "frontend": true } }, { "metadata": { - "name": "featureToggleAdminPage", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "refactorVariablesTimeRange", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable admin page for managing feature toggles from the Grafana front-end", - "stage": "experimental", - "codeowner": "@grafana/grafana-operator-experience-squad", - "requiresRestart": true + "description": "Refactor time range variables flow to reduce number of API calls made when query variables are chained", + "stage": "preview", + "codeowner": "@grafana/dashboards-squad", + "hideFromAdminPage": true } }, { "metadata": { - "name": "sseGroupByDatasource", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "externalServiceAuth", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Send query to the same datasource in a single request when using server side expressions. The `cloudWatchBatchQueries` feature toggle should be enabled if this used with CloudWatch.", + "description": "Starts an OAuth2 authentication provider for external services", "stage": "experimental", - "codeowner": "@grafana/observability-metrics" + "codeowner": "@grafana/identity-access-team", + "requiresDevMode": true } }, { "metadata": { - "name": "lokiRunQueriesInParallel", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "frontendSandboxMonitorOnly", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables running Loki queries in parallel", - "stage": "privatePreview", - "codeowner": "@grafana/observability-logs" + "description": "Enables monitor only in the plugin frontend sandbox (if enabled)", + "stage": "experimental", + "codeowner": "@grafana/plugins-platform-backend", + "frontend": true } }, { "metadata": { - "name": "awsDatasourcesNewFormStyling", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "mlExpressions", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Applies new form styling for configuration and query editors in AWS plugins", - "stage": "preview", - "codeowner": "@grafana/aws-datasources", - "frontend": true + "description": "Enable support for Machine Learning in server-side expressions", + "stage": "experimental", + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "lokiExperimentalStreaming", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "libraryPanelRBAC", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Support new streaming approach for loki (prototype, needs special loki build)", + "description": "Enables RBAC support for library panels", "stage": "experimental", - "codeowner": "@grafana/observability-logs" + "codeowner": "@grafana/dashboards-squad", + "requiresRestart": true } }, { "metadata": { - "name": "disableAngular", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "kubernetesFeatureToggles", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Dynamic flag to disable angular at runtime. The preferred method is to set `angular_support_enabled` to `false` in the [security] settings, which allows you to change the state at runtime.", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", + "description": "Use the kubernetes API for feature toggle management in the frontend", + "stage": "experimental", + "codeowner": "@grafana/grafana-operator-experience-squad", "frontend": true, "hideFromAdminPage": true } }, { "metadata": { - "name": "scenes", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "expressionParser", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Experimental framework to build interactive dashboards", + "description": "Enable new expression parser", "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", - "frontend": true + "codeowner": "@grafana/grafana-app-platform-squad", + "requiresRestart": true } }, { "metadata": { - "name": "editPanelCSVDragAndDrop", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "autoMigrateStatPanel", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables drag and drop for CSV and Excel files", - "stage": "experimental", + "description": "Migrate old stat panel to supported stat panel - broken out from autoMigrateOldPanels to enable granular tracking", + "stage": "preview", "codeowner": "@grafana/dataviz-squad", "frontend": true } }, { "metadata": { - "name": "extraThemes", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "renderAuthJWT", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables extra themes", - "stage": "experimental", - "codeowner": "@grafana/grafana-frontend-platform", - "frontend": true + "description": "Uses JWT-based auth for rendering instead of relying on remote cache", + "stage": "preview", + "codeowner": "@grafana/grafana-as-code", + "hideFromAdminPage": true } }, { "metadata": { - "name": "annotationPermissionUpdate", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "permissionsFilterRemoveSubquery", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Separate annotation permissions from dashboard permissions to allow for more granular control.", + "description": "Alternative permission filter implementation that does not use subqueries for fetching the dashboard folder", "stage": "experimental", - "codeowner": "@grafana/identity-access-team" + "codeowner": "@grafana/backend-platform" } }, { "metadata": { - "name": "exploreContentOutline", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "pdfTables", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Content outline sidebar", - "stage": "GA", - "codeowner": "@grafana/explore-squad", - "frontend": true, - "allowSelfServe": true + "description": "Enables generating table data as PDF in reporting", + "stage": "preview", + "codeowner": "@grafana/sharing-squad" } }, { "metadata": { - "name": "lokiFormatQuery", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "influxqlStreamingParser", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the ability to format Loki queries", + "description": "Enable streaming JSON parser for InfluxDB datasource InfluxQL query language", "stage": "experimental", - "codeowner": "@grafana/observability-logs", - "frontend": true + "codeowner": "@grafana/observability-metrics" } }, { "metadata": { - "name": "prometheusIncrementalQueryInstrumentation", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "showDashboardValidationWarnings", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Adds RudderStack events to incremental queries", + "description": "Show warnings when dashboards do not validate against the schema", "stage": "experimental", - "codeowner": "@grafana/observability-metrics", - "frontend": true + "codeowner": "@grafana/dashboards-squad" } }, { "metadata": { - "name": "alertmanagerRemotePrimary", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "lokiQuerySplitting", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable Grafana to have a remote Alertmanager instance as the primary Alertmanager.", - "stage": "experimental", - "codeowner": "@grafana/alerting-squad" + "description": "Split large interval queries into subqueries with smaller time intervals", + "stage": "GA", + "codeowner": "@grafana/observability-logs", + "frontend": true, + "allowSelfServe": true } }, { "metadata": { - "name": "cloudRBACRoles", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" - }, - "spec": { - "description": "Enabled grafana cloud specific RBAC roles", - "stage": "experimental", - "codeowner": "@grafana/identity-access-team", - "requiresRestart": true, - "hideFromDocs": true + "name": "lokiMetricDataplane", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" + }, + "spec": { + "description": "Changes metric responses from Loki to be compliant with the dataplane specification.", + "stage": "GA", + "codeowner": "@grafana/observability-logs", + "allowSelfServe": true } }, { "metadata": { - "name": "nodeGraphDotLayout", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "dashboardEmbed", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Changed the layout algorithm for the node graph", + "description": "Allow embedding dashboard for external use in Code editors", "stage": "experimental", - "codeowner": "@grafana/observability-traces-and-profiling", + "codeowner": "@grafana/grafana-as-code", "frontend": true } }, { "metadata": { - "name": "autoMigratePiechartPanel", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "pluginsAPIMetrics", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Migrate old piechart panel to supported piechart panel - broken out from autoMigrateOldPanels to enable granular tracking", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", + "description": "Sends metrics of public grafana packages usage by plugins", + "stage": "experimental", + "codeowner": "@grafana/plugins-platform-backend", "frontend": true } }, { "metadata": { - "name": "influxdbBackendMigration", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "awsDatasourcesNewFormStyling", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Query InfluxDB InfluxQL without the proxy", - "stage": "GA", - "codeowner": "@grafana/observability-metrics", + "description": "Applies new form styling for configuration and query editors in AWS plugins", + "stage": "preview", + "codeowner": "@grafana/aws-datasources", "frontend": true } }, { "metadata": { - "name": "alertStateHistoryLokiPrimary", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "dashboardScene", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable a remote Loki instance as the primary source for state history reads.", + "description": "Enables dashboard rendering using scenes for all roles", "stage": "experimental", - "codeowner": "@grafana/alerting-squad" + "codeowner": "@grafana/dashboards-squad", + "frontend": true } }, { "metadata": { - "name": "configurableSchedulerTick", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "canvasPanelNesting", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable changing the scheduler base interval via configuration option unified_alerting.scheduler_tick_interval", + "description": "Allow elements nesting", "stage": "experimental", - "codeowner": "@grafana/alerting-squad", - "requiresRestart": true, - "hideFromDocs": true + "codeowner": "@grafana/dataviz-squad", + "frontend": true, + "hideFromAdminPage": true } }, { "metadata": { - "name": "dashgpt", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingSaveStatePeriodic", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable AI powered features in dashboards", - "stage": "preview", - "codeowner": "@grafana/dashboards-squad", - "frontend": true + "description": "Writes the state periodically to the database, asynchronous to rule evaluation", + "stage": "privatePreview", + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "alertmanagerRemoteOnly", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "sseGroupByDatasource", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Disable the internal Alertmanager and only use the external one defined.", + "description": "Send query to the same datasource in a single request when using server side expressions. The `cloudWatchBatchQueries` feature toggle should be enabled if this used with CloudWatch.", "stage": "experimental", - "codeowner": "@grafana/alerting-squad" + "codeowner": "@grafana/observability-metrics" } }, { "metadata": { - "name": "alertStateHistoryLokiSecondary", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "kubernetesQueryServiceRewrite", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable Grafana to write alert state history to an external Loki instance in addition to Grafana annotations.", + "description": "Rewrite requests targeting /ds/query to the query service", "stage": "experimental", - "codeowner": "@grafana/alerting-squad" + "codeowner": "@grafana/grafana-app-platform-squad", + "requiresDevMode": true, + "requiresRestart": true } }, { "metadata": { - "name": "frontendSandboxMonitorOnly", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "exploreContentOutline", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables monitor only in the plugin frontend sandbox (if enabled)", - "stage": "experimental", - "codeowner": "@grafana/plugins-platform-backend", - "frontend": true + "description": "Content outline sidebar", + "stage": "GA", + "codeowner": "@grafana/explore-squad", + "frontend": true, + "allowSelfServe": true } }, { "metadata": { - "name": "pluginsDynamicAngularDetectionPatterns", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "recordedQueriesMulti", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables fetching Angular detection patterns for plugins from GCOM and fallback to hardcoded ones", - "stage": "experimental", - "codeowner": "@grafana/plugins-platform-backend" + "description": "Enables writing multiple items from a single query within Recorded Queries", + "stage": "GA", + "codeowner": "@grafana/observability-metrics" } }, { "metadata": { - "name": "mlExpressions", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingInsights", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable support for Machine Learning in server-side expressions", - "stage": "experimental", - "codeowner": "@grafana/alerting-squad" + "description": "Show the new alerting insights landing page", + "stage": "GA", + "codeowner": "@grafana/alerting-squad", + "frontend": true, + "hideFromAdminPage": true } }, { "metadata": { - "name": "pluginsInstrumentationStatusSource", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "idForwarding", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Include a status source label for plugin request metrics and logs", + "description": "Generate signed id token for identity that can be forwarded to plugins and external services", "stage": "experimental", - "codeowner": "@grafana/plugins-platform-backend" + "codeowner": "@grafana/identity-access-team" } }, { "metadata": { - "name": "autoMigrateWorldmapPanel", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "enableNativeHTTPHistogram", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Migrate old worldmap panel to supported geomap panel - broken out from autoMigrateOldPanels to enable granular tracking", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", - "frontend": true + "description": "Enables native HTTP Histograms", + "stage": "experimental", + "codeowner": "@grafana/hosted-grafana-team" } }, { "metadata": { - "name": "recoveryThreshold", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertmanagerRemoteOnly", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables feature recovery threshold (aka hysteresis) for threshold server-side expression", - "stage": "GA", - "codeowner": "@grafana/alerting-squad", - "requiresRestart": true + "description": "Disable the internal Alertmanager and only use the external one defined.", + "stage": "experimental", + "codeowner": "@grafana/alerting-squad" } }, { "metadata": { - "name": "cachingOptimizeSerializationMemoryUsage", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "influxdbRunQueriesInParallel", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "If enabled, the caching backend gradually serializes query responses for the cache, comparing against the configured `[caching]max_value_mb` value as it goes. This can can help prevent Grafana from running out of memory while attempting to cache very large query responses.", - "stage": "experimental", - "codeowner": "@grafana/grafana-operator-experience-squad" + "description": "Enables running InfluxDB Influxql queries in parallel", + "stage": "privatePreview", + "codeowner": "@grafana/observability-metrics" } }, { "metadata": { - "name": "dashboardSceneForViewers", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "newVizTooltips", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables dashboard rendering using Scenes for viewer roles", - "stage": "experimental", - "codeowner": "@grafana/dashboards-squad", + "description": "New visualizations tooltips UX", + "stage": "preview", + "codeowner": "@grafana/dataviz-squad", "frontend": true } }, { "metadata": { - "name": "flameGraphItemCollapsing", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "prometheusMetricEncyclopedia", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Allow collapsing of flame graph items", - "stage": "experimental", - "codeowner": "@grafana/observability-traces-and-profiling", - "frontend": true + "description": "Adds the metrics explorer component to the Prometheus query builder as an option in metric select", + "stage": "GA", + "codeowner": "@grafana/observability-metrics", + "frontend": true, + "allowSelfServe": true } }, { "metadata": { - "name": "datasourceQueryMultiStatus", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "pluginsDynamicAngularDetectionPatterns", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Introduce HTTP 207 Multi Status for api/ds/query", + "description": "Enables fetching Angular detection patterns for plugins from GCOM and fallback to hardcoded ones", "stage": "experimental", "codeowner": "@grafana/plugins-platform-backend" } }, { "metadata": { - "name": "redshiftAsyncQueryDataSupport", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "cloudWatchBatchQueries", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable async query data support for Redshift", - "stage": "GA", + "description": "Runs CloudWatch metrics queries as separate batches", + "stage": "preview", "codeowner": "@grafana/aws-datasources" } }, { "metadata": { - "name": "individualCookiePreferences", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingUpgradeDryrunOnStart", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Support overriding cookie preferences per user", - "stage": "experimental", - "codeowner": "@grafana/backend-platform" + "description": "When activated in legacy alerting mode, this initiates a dry-run of the Unified Alerting upgrade during each startup. It logs any issues detected without implementing any actual changes.", + "stage": "GA", + "codeowner": "@grafana/alerting-squad", + "requiresRestart": true } }, { "metadata": { - "name": "faroDatasourceSelector", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "autoMigrateOldPanels", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable the data source selector within the Frontend Apps section of the Frontend Observability", + "description": "Migrate old angular panels to supported versions (graph, table-old, worldmap, etc)", "stage": "preview", - "codeowner": "@grafana/app-o11y", + "codeowner": "@grafana/dataviz-squad", "frontend": true } }, { "metadata": { - "name": "kubernetesPlaylists", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "externalCorePlugins", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Use the kubernetes API in the frontend for playlists, and route /api/playlist requests to k8s", + "description": "Allow core plugins to be loaded as external", "stage": "experimental", - "codeowner": "@grafana/grafana-app-platform-squad", - "requiresRestart": true + "codeowner": "@grafana/plugins-platform-backend" } }, { "metadata": { - "name": "alertingDetailsViewV2", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "alertingNoNormalState", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables the preview of the new alert details view", - "stage": "experimental", + "description": "Stop maintaining state of alerts that are not firing", + "stage": "preview", "codeowner": "@grafana/alerting-squad", - "frontend": true, - "hideFromDocs": true + "hideFromAdminPage": true } }, { "metadata": { - "name": "accessControlOnCall", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "dataplaneFrontendFallback", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Access control primitives for OnCall", - "stage": "preview", - "codeowner": "@grafana/identity-access-team", - "hideFromAdminPage": true + "description": "Support dataplane contract field name change for transformations and field name matchers where the name is different", + "stage": "GA", + "codeowner": "@grafana/observability-metrics", + "frontend": true, + "allowSelfServe": true } }, { "metadata": { - "name": "splitScopes", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "disableSSEDataplane", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Support faster dashboard and folder search by splitting permission scopes into parts", - "stage": "deprecated", - "codeowner": "@grafana/identity-access-team", - "requiresRestart": true, - "hideFromAdminPage": true + "description": "Disables dataplane specific processing in server side expressions.", + "stage": "experimental", + "codeowner": "@grafana/observability-metrics" } }, { "metadata": { - "name": "formatString", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "lokiPredefinedOperations", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable format string transformer", - "stage": "preview", - "codeowner": "@grafana/dataviz-squad", + "description": "Adds predefined query operations to Loki query editor", + "stage": "experimental", + "codeowner": "@grafana/observability-logs", "frontend": true } }, { "metadata": { - "name": "alertingSimplifiedRouting", - "resourceVersion": "1708033557575", - "creationTimestamp": "2024-02-14T16:41:35Z", - "annotations": { - "grafana.app/updatedTimestamp": "2024-02-15 21:45:57.5750554 +0000 UTC" - } + "name": "configurableSchedulerTick", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enables users to easily configure alert notifications by specifying a contact point directly when editing or creating an alert rule", - "stage": "preview", - "codeowner": "@grafana/alerting-squad" + "description": "Enable changing the scheduler base interval via configuration option unified_alerting.scheduler_tick_interval", + "stage": "experimental", + "codeowner": "@grafana/alerting-squad", + "requiresRestart": true, + "hideFromDocs": true } }, { "metadata": { - "name": "enablePluginsTracingByDefault", - "resourceVersion": "1707928895402", - "creationTimestamp": "2024-02-14T16:41:35Z" + "name": "kubernetesPlaylists", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "Enable plugin tracing for all external plugins", + "description": "Use the kubernetes API in the frontend for playlists, and route /api/playlist requests to k8s", "stage": "experimental", - "codeowner": "@grafana/plugins-platform-backend", + "codeowner": "@grafana/grafana-app-platform-squad", "requiresRestart": true } }, { "metadata": { - "name": "alertingUpgradeDryrunOnStart", - "resourceVersion": "1708098586429", - "creationTimestamp": "2024-02-15T21:01:16Z", - "annotations": { - "grafana.app/updatedTimestamp": "2024-02-16 15:49:46.429030423 +0000 UTC" - } + "name": "datatrails", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" }, "spec": { - "description": "When activated in legacy alerting mode, this initiates a dry-run of the Unified Alerting upgrade during each startup. It logs any issues detected without implementing any actual changes.", - "stage": "GA", - "codeowner": "@grafana/alerting-squad", - "requiresRestart": true + "description": "Enables the new core app datatrails", + "stage": "experimental", + "codeowner": "@grafana/dashboards-squad", + "frontend": true, + "hideFromDocs": true + } + }, + { + "metadata": { + "name": "editPanelCSVDragAndDrop", + "resourceVersion": "1708108588074", + "creationTimestamp": "2024-02-16T18:36:28Z" + }, + "spec": { + "description": "Enables drag and drop for CSV and Excel files", + "stage": "experimental", + "codeowner": "@grafana/dataviz-squad", + "frontend": true } } ]