From b928fce070b6d9e559b00a23746405491b06e802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Farkas?= Date: Thu, 13 Apr 2023 15:22:09 +0200 Subject: [PATCH] Loki: Remove alpha feature toggle lokiDataframeApi (#65918) loki: remove experimental feature-flag --- .../feature-toggles/index.md | 1 - .../src/types/featureToggles.gen.ts | 1 - pkg/services/featuremgmt/registry.go | 6 --- pkg/services/featuremgmt/toggles_gen.csv | 1 - pkg/services/featuremgmt/toggles_gen.go | 4 -- pkg/tsdb/loki/streaming.go | 16 +----- pkg/tsdb/loki/streaming_frame.go | 52 ------------------- pkg/tsdb/loki/streaming_frame_test.go | 40 -------------- 8 files changed, 2 insertions(+), 119 deletions(-) delete mode 100644 pkg/tsdb/loki/streaming_frame.go delete mode 100644 pkg/tsdb/loki/streaming_frame_test.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 60c0b9b771a..8d422d4ff7b 100644 --- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md +++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @@ -68,7 +68,6 @@ Alpha features might be changed or removed without prior notice. | `publicDashboards` | Enables public access to dashboards | | `publicDashboardsEmailSharing` | Enables public dashboard sharing to be restricted to only allowed emails | | `lokiLive` | Support WebSocket streaming for loki (early prototype) | -| `lokiDataframeApi` | Use experimental loki api for WebSocket streaming (early prototype) | | `storage` | Configurable storage for dashboards, datasources, and resources | | `exploreMixedDatasource` | Enable mixed datasource in Explore | | `newTraceView` | Shows the new trace view design | diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index f621ef52e3a..6f7fc4701c3 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -29,7 +29,6 @@ export interface FeatureToggles { publicDashboards?: boolean; publicDashboardsEmailSharing?: boolean; lokiLive?: boolean; - lokiDataframeApi?: boolean; featureHighlights?: boolean; migrationLocking?: boolean; storage?: boolean; diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index ca9e2abf786..7ebc777cd0c 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -78,12 +78,6 @@ var ( State: FeatureStateAlpha, Owner: grafanaObservabilityLogsSquad, }, - { - Name: "lokiDataframeApi", - Description: "Use experimental loki api for WebSocket streaming (early prototype)", - State: FeatureStateAlpha, - Owner: grafanaObservabilityLogsSquad, - }, { Name: "featureHighlights", Description: "Highlight Grafana Enterprise features", diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index 6a424dff587..52a462aef92 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -10,7 +10,6 @@ prometheusAzureOverrideAudience,beta,@grafana/observability-metrics,false,false, publicDashboards,alpha,@grafana/dashboards-squad,false,false,false,false publicDashboardsEmailSharing,alpha,@grafana/dashboards-squad,false,true,false,false lokiLive,alpha,@grafana/observability-logs,false,false,false,false -lokiDataframeApi,alpha,@grafana/observability-logs,false,false,false,false featureHighlights,stable,@grafana/grafana-as-code,false,false,false,false migrationLocking,beta,@grafana/backend-platform,false,false,false,false storage,alpha,@grafana/grafana-app-platform-squad,false,false,false,false diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index 9163922ac0a..3893f834bff 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -51,10 +51,6 @@ const ( // Support WebSocket streaming for loki (early prototype) FlagLokiLive = "lokiLive" - // FlagLokiDataframeApi - // Use experimental loki api for WebSocket streaming (early prototype) - FlagLokiDataframeApi = "lokiDataframeApi" - // FlagFeatureHighlights // Highlight Grafana Enterprise features FlagFeatureHighlights = "featureHighlights" diff --git a/pkg/tsdb/loki/streaming.go b/pkg/tsdb/loki/streaming.go index 09a172ec99c..6c75eb449a6 100644 --- a/pkg/tsdb/loki/streaming.go +++ b/pkg/tsdb/loki/streaming.go @@ -13,8 +13,6 @@ import ( "github.com/gorilla/websocket" "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/data" - - "github.com/grafana/grafana/pkg/services/featuremgmt" ) func (s *Service) SubscribeStream(_ context.Context, req *backend.SubscribeStreamRequest) (*backend.SubscribeStreamResponse, error) { @@ -84,15 +82,9 @@ func (s *Service) RunStream(ctx context.Context, req *backend.RunStreamRequest, params := url.Values{} params.Add("query", query.Expr) - lokiDataframeApi := s.features.IsEnabled(featuremgmt.FlagLokiDataframeApi) - wsurl, _ := url.Parse(dsInfo.URL) - if lokiDataframeApi { - wsurl.Path = "/loki/api/v2alpha/tail" - } else { - wsurl.Path = "/loki/api/v1/tail" - } + wsurl.Path = "/loki/api/v2alpha/tail" if wsurl.Scheme == "https" { wsurl.Scheme = "wss" @@ -133,11 +125,7 @@ func (s *Service) RunStream(ctx context.Context, req *backend.RunStreamRequest, } frame := &data.Frame{} - if !lokiDataframeApi { - frame, err = lokiBytesToLabeledFrame(message) - } else { - err = json.Unmarshal(message, &frame) - } + err = json.Unmarshal(message, &frame) if err == nil && frame != nil { next, _ := data.FrameToJSONCache(frame) diff --git a/pkg/tsdb/loki/streaming_frame.go b/pkg/tsdb/loki/streaming_frame.go deleted file mode 100644 index e03cd298b7d..00000000000 --- a/pkg/tsdb/loki/streaming_frame.go +++ /dev/null @@ -1,52 +0,0 @@ -package loki - -import ( - "encoding/json" - "strconv" - "time" - - "github.com/grafana/grafana-plugin-sdk-go/data" -) - -type lokiResponse struct { - Streams []lokiStream `json:"streams"` -} - -type lokiStream struct { - Stream data.Labels `json:"stream"` - Values [][2]string `json:"values"` -} - -func lokiBytesToLabeledFrame(msg []byte) (*data.Frame, error) { - rsp := &lokiResponse{} - err := json.Unmarshal(msg, rsp) - if err != nil { - return nil, err - } - - labelField := data.NewFieldFromFieldType(data.FieldTypeString, 0) - timeField := data.NewFieldFromFieldType(data.FieldTypeTime, 0) - lineField := data.NewFieldFromFieldType(data.FieldTypeString, 0) - - labelField.Name = "__labels" // for now, avoid automatically spreading this by labels - timeField.Name = "Time" - lineField.Name = "Line" - - for _, stream := range rsp.Streams { - label := stream.Stream.String() // TODO -- make it match prom labels! - for _, value := range stream.Values { - n, err := strconv.ParseInt(value[0], 10, 64) - if err != nil { - continue - } - ts := time.Unix(0, n) - line := value[1] - - labelField.Append(label) - timeField.Append(ts) - lineField.Append(line) - } - } - - return data.NewFrame("", labelField, timeField, lineField), nil -} diff --git a/pkg/tsdb/loki/streaming_frame_test.go b/pkg/tsdb/loki/streaming_frame_test.go deleted file mode 100644 index 659bc8320db..00000000000 --- a/pkg/tsdb/loki/streaming_frame_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package loki - -import ( - "testing" - - "github.com/stretchr/testify/require" -) - -func TestLokiFramer(t *testing.T) { - t.Run("converting metric name", func(t *testing.T) { - msg := []byte(`{"streams":[ - {"stream": - {"job":"node-exporter","metric":"go_memstats_heap_inuse_bytes"}, - "values":[ - ["1642091525267322910","line1"] - ]}, - {"stream": - {"job":"node-exporter","metric":"go_memstats_heap_inuse_bytes"}, - "values":[ - ["1642091525770585774","line2"], - ["1642091525770585775","line3"] - ]}, - {"stream": - {"metric":"go_memstats_heap_inuse_bytes","job":"node-exporter"}, - "values":[ - ["1642091526263785281","line4"] - ]} - ]}`) - - frame, err := lokiBytesToLabeledFrame(msg) - require.NoError(t, err) - - lines := frame.Fields[2] - require.Equal(t, 4, lines.Len()) - require.Equal(t, "line1", lines.At(0)) - require.Equal(t, "line2", lines.At(1)) - require.Equal(t, "line3", lines.At(2)) - require.Equal(t, "line4", lines.At(3)) - }) -}