mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Tempo: Add migration to enable TraceQL streaming for Tempo datasources (#91340)
* Add migration to enable TraceQL streaming for Tempo datasources * lint * Always run migration but exit early if feature flag is disabled * Require feature toggle OR datasource config to enable streaming
This commit is contained in:
parent
ce14d79064
commit
d84fd94936
@ -125,6 +125,8 @@ func (oss *OSSMigrations) AddMigration(mg *Migrator) {
|
||||
ualert.AddRecordingRuleColumns(mg)
|
||||
|
||||
ualert.AddStateResolvedAtColumns(mg)
|
||||
|
||||
enableTraceQLStreaming(mg, oss.features != nil && oss.features.IsEnabledGlobally(featuremgmt.FlagTraceQLStreaming))
|
||||
}
|
||||
|
||||
func addStarMigrations(mg *Migrator) {
|
||||
|
72
pkg/services/sqlstore/migrations/tempo_datasource_mig.go
Normal file
72
pkg/services/sqlstore/migrations/tempo_datasource_mig.go
Normal file
@ -0,0 +1,72 @@
|
||||
package migrations
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"xorm.io/xorm"
|
||||
|
||||
. "github.com/grafana/grafana/pkg/services/sqlstore/migrator"
|
||||
)
|
||||
|
||||
func enableTraceQLStreaming(mg *Migrator, enable bool) {
|
||||
mg.AddMigration("Enable traceQL streaming for all Tempo datasources", &AddTraceQLStreamingToJsonData{Enable: enable})
|
||||
}
|
||||
|
||||
var _ CodeMigration = new(AddTraceQLStreamingToJsonData)
|
||||
|
||||
type AddTraceQLStreamingToJsonData struct {
|
||||
MigrationBase
|
||||
Enable bool
|
||||
}
|
||||
|
||||
func (m *AddTraceQLStreamingToJsonData) SQL(dialect Dialect) string {
|
||||
return "code migration"
|
||||
}
|
||||
|
||||
type TempoIdJsonDataDTO struct {
|
||||
Id int64
|
||||
JsonData string
|
||||
}
|
||||
|
||||
func (m *AddTraceQLStreamingToJsonData) Exec(sess *xorm.Session, mg *Migrator) error {
|
||||
datasources := make([]*TempoIdJsonDataDTO, 0)
|
||||
|
||||
// Skip update if the feature flag is not enabled but mark the migration as completed
|
||||
if !m.Enable {
|
||||
return nil
|
||||
}
|
||||
|
||||
err := sess.SQL("SELECT id, json_data FROM data_source WHERE type = 'tempo'").Find(&datasources)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
enabledStreamingMap := map[string]interface{}{
|
||||
"search": true,
|
||||
}
|
||||
|
||||
for _, ds := range datasources {
|
||||
var parsedMap map[string]interface{}
|
||||
if err := json.Unmarshal([]byte(ds.JsonData), &parsedMap); err != nil {
|
||||
continue
|
||||
}
|
||||
// skip datasource if streamingEnabled is already set
|
||||
if parsedMap["streamingEnabled"] != nil {
|
||||
continue
|
||||
}
|
||||
parsedMap["streamingEnabled"] = enabledStreamingMap
|
||||
|
||||
newJsonData, err := json.Marshal(parsedMap)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = sess.Exec("UPDATE data_source SET json_data = ? WHERE id = ?", newJsonData, ds.Id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
@ -277,10 +277,9 @@ export class TempoDatasource extends DataSourceWithBackend<TempoQuery, TempoJson
|
||||
*/
|
||||
isStreamingSearchEnabled() {
|
||||
return (
|
||||
config.featureToggles.traceQLStreaming &&
|
||||
(config.featureToggles.traceQLStreaming || this.streamingEnabled?.search) &&
|
||||
this.isFeatureAvailable(FeatureName.streaming) &&
|
||||
config.liveEnabled &&
|
||||
this.streamingEnabled?.search
|
||||
config.liveEnabled
|
||||
);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user