Skip to content

Commit faf294c

Browse files
committed
druid datasource fixes
1 parent 4bcfeda commit faf294c

15 files changed

+1466
-3
lines changed

go.mod

+2
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ require (
423423
github.com/RoaringBitmap/roaring v0.9.4 // indirect
424424
github.com/acomagu/bufpipe v1.0.3 // indirect
425425
github.com/axiomhq/hyperloglog v0.0.0-20191112132149-a4c4c47bc57f // indirect
426+
github.com/bitly/go-simplejson v0.5.1
426427
github.com/bits-and-blooms/bitset v1.2.0 // indirect
427428
github.com/blevesearch/go-porterstemmer v1.0.3 // indirect
428429
github.com/blevesearch/mmap-go v1.0.4 // indirect
@@ -443,6 +444,7 @@ require (
443444
github.com/go-logr/logr v1.2.4 // @grafana/grafana-app-platform-squad
444445
github.com/go-logr/stdr v1.2.2 // indirect
445446
github.com/google/go-github v17.0.0+incompatible // @grafana/grafana-app-platform-squad
447+
github.com/grafadruid/go-druid v0.0.6
446448
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
447449
github.com/hmarr/codeowners v1.1.2 // @grafana/grafana-as-code
448450
github.com/imdario/mergo v0.3.13 // indirect

go.sum

+5
Original file line numberDiff line numberDiff line change
@@ -794,6 +794,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
794794
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
795795
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
796796
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
797+
github.com/bitly/go-simplejson v0.5.1 h1:xgwPbetQScXt1gh9BmoJ6j9JMr3TElvuIyjR8pgdoow=
798+
github.com/bitly/go-simplejson v0.5.1/go.mod h1:YOPVLzCfwK14b4Sff3oP1AmGhI9T9Vsg84etUnlyp+Q=
797799
github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA=
798800
github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
799801
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
@@ -1756,6 +1758,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
17561758
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
17571759
github.com/gotestyourself/gotestyourself v1.3.0/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY=
17581760
github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY=
1761+
github.com/grafadruid/go-druid v0.0.6 h1:Nt9jQrhrtHi1BJICN9aDJgYDmBmc10pJYpQiuwAsxa4=
1762+
github.com/grafadruid/go-druid v0.0.6/go.mod h1:KY3a6MrVMKkXgMTwBS9Nrhm1E8OWyR4gd0WzUi8d/zM=
17591763
github.com/grafana/alerting v0.0.0-20230606080147-55b8d71c7890 h1:ubNIgVGX4PQ9YI1nWnt2mky3il8clWSjdo3NFSD26DQ=
17601764
github.com/grafana/alerting v0.0.0-20230606080147-55b8d71c7890/go.mod h1:zEflOvMVchYhRbFb5ziXVR/JG67FOLBzQTjhHh9xaI4=
17611765
github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw=
@@ -1857,6 +1861,7 @@ github.com/hashicorp/go-plugin v1.2.2/go.mod h1:F9eH4LrE/ZsRdbwhfjs9k9HoDUwAHnYt
18571861
github.com/hashicorp/go-plugin v1.4.9 h1:ESiK220/qE0aGxWdzKIvRH69iLiuN/PjoLTm69RoWtU=
18581862
github.com/hashicorp/go-plugin v1.4.9/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s=
18591863
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
1864+
github.com/hashicorp/go-retryablehttp v0.6.7/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
18601865
github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
18611866
github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
18621867
github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0=

pkg/api/plugin_resource_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func TestCallResource(t *testing.T) {
6363
cfg.Azure = &azsettings.AzureSettings{}
6464

6565
coreRegistry := coreplugin.ProvideCoreRegistry(nil, &cloudwatch.CloudWatchService{}, nil, nil, nil, nil,
66-
nil, nil, nil, nil, testdatasource.ProvideService(), nil, nil, nil, nil, nil, nil)
66+
nil, nil, nil, nil, testdatasource.ProvideService(), nil, nil, nil, nil, nil, nil, nil)
6767
pCfg, err := config.ProvideConfig(setting.ProvideProvider(cfg), cfg, featuremgmt.WithFeatures())
6868
require.NoError(t, err)
6969
reg := registry.ProvideService()

pkg/plugins/backendplugin/coreplugin/registry.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/grafana/grafana/pkg/tsdb/azuremonitor"
1313
cloudmonitoring "github.com/grafana/grafana/pkg/tsdb/cloud-monitoring"
1414
"github.com/grafana/grafana/pkg/tsdb/cloudwatch"
15+
"github.com/grafana/grafana/pkg/tsdb/druid"
1516
"github.com/grafana/grafana/pkg/tsdb/elasticsearch"
1617
pyroscope "github.com/grafana/grafana/pkg/tsdb/grafana-pyroscope-datasource"
1718
"github.com/grafana/grafana/pkg/tsdb/grafanads"
@@ -37,6 +38,7 @@ const (
3738
InfluxDB = "influxdb"
3839
Loki = "loki"
3940
OpenTSDB = "opentsdb"
41+
Druid = "grafadruid-druid-datasource"
4042
Prometheus = "prometheus"
4143
Tempo = "tempo"
4244
TestData = "testdata"
@@ -84,7 +86,7 @@ func NewRegistry(store map[string]backendplugin.PluginFactoryFunc) *Registry {
8486
func ProvideCoreRegistry(am *azuremonitor.Service, cw *cloudwatch.CloudWatchService, cm *cloudmonitoring.Service,
8587
es *elasticsearch.Service, grap *graphite.Service, idb *influxdb.Service, lk *loki.Service, otsdb *opentsdb.Service,
8688
pr *prometheus.Service, t *tempo.Service, td *testdatasource.Service, pg *postgres.Service, my *mysql.Service,
87-
ms *mssql.Service, graf *grafanads.Service, pyroscope *pyroscope.Service, parca *parca.Service) *Registry {
89+
ms *mssql.Service, graf *grafanads.Service, pyroscope *pyroscope.Service, parca *parca.Service, dr *druid.Service) *Registry {
8890
return NewRegistry(map[string]backendplugin.PluginFactoryFunc{
8991
CloudWatch: asBackendPlugin(cw.Executor),
9092
CloudMonitoring: asBackendPlugin(cm),
@@ -103,6 +105,7 @@ func ProvideCoreRegistry(am *azuremonitor.Service, cw *cloudwatch.CloudWatchServ
103105
Grafana: asBackendPlugin(graf),
104106
Pyroscope: asBackendPlugin(pyroscope),
105107
Parca: asBackendPlugin(parca),
108+
Druid: asBackendPlugin(dr),
106109
})
107110
}
108111

pkg/plugins/manager/manager_integration_test.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
"github.com/grafana/grafana/pkg/tsdb/azuremonitor"
4141
cloudmonitoring "github.com/grafana/grafana/pkg/tsdb/cloud-monitoring"
4242
"github.com/grafana/grafana/pkg/tsdb/cloudwatch"
43+
"github.com/grafana/grafana/pkg/tsdb/druid"
4344
"github.com/grafana/grafana/pkg/tsdb/elasticsearch"
4445
pyroscope "github.com/grafana/grafana/pkg/tsdb/grafana-pyroscope-datasource"
4546
"github.com/grafana/grafana/pkg/tsdb/grafanads"
@@ -111,8 +112,9 @@ func TestIntegrationPluginManager(t *testing.T) {
111112
graf := grafanads.ProvideService(sv2, nil)
112113
phlare := pyroscope.ProvideService(hcp, acimpl.ProvideAccessControl(cfg))
113114
parca := parca.ProvideService(hcp)
115+
druid := druid.ProvideService(hcp)
114116

115-
coreRegistry := coreplugin.ProvideCoreRegistry(am, cw, cm, es, grap, idb, lk, otsdb, pr, tmpo, td, pg, my, ms, graf, phlare, parca)
117+
coreRegistry := coreplugin.ProvideCoreRegistry(am, cw, cm, es, grap, idb, lk, otsdb, pr, tmpo, td, pg, my, ms, graf, phlare, parca, druid)
116118

117119
pCfg, err := config.ProvideConfig(setting.ProvideProvider(cfg), cfg, featuremgmt.WithFeatures())
118120
require.NoError(t, err)
@@ -224,6 +226,7 @@ func verifyCorePluginCatalogue(t *testing.T, ctx context.Context, ps *store.Serv
224226
"zipkin": {},
225227
"grafana-pyroscope-datasource": {},
226228
"parca": {},
229+
"druid": {},
227230
}
228231

229232
expApps := map[string]struct{}{

pkg/plugins/pfs/corelist/corelist_load_gen.go

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/tsdb/druid/column_type.go

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package druid
2+
3+
import (
4+
"strconv"
5+
"strings"
6+
"time"
7+
)
8+
9+
func detectColumnType(c *responseColumn, pos int, rows [][]interface{}) {
10+
t := map[columnType]int{"nil": 0}
11+
maxRowsToScan := (len(rows) / 5) + 1
12+
for _, row := range rows[:maxRowsToScan] {
13+
switch v := row[pos].(type) {
14+
case string:
15+
_, err := strconv.Atoi(v)
16+
if err == nil {
17+
t[ColumnInt]++
18+
continue
19+
}
20+
_, err = strconv.ParseBool(v)
21+
if err == nil {
22+
t[ColumnBool]++
23+
continue
24+
}
25+
// TODO is there any other timestamp format possible?
26+
_, err = time.Parse("2006-01-02T15:04:05.000Z", v)
27+
if err == nil {
28+
t[ColumnTime]++
29+
continue
30+
}
31+
t[ColumnString]++
32+
continue
33+
case float64:
34+
if c.Name == "__time" || strings.Contains(strings.ToLower(c.Name), "time_") {
35+
t[ColumnTime]++
36+
continue
37+
}
38+
t[ColumnFloat]++
39+
continue
40+
case bool:
41+
t[ColumnBool]++
42+
continue
43+
}
44+
}
45+
key := ColumnString
46+
maxVal := 0
47+
for k, v := range t {
48+
if v > maxVal {
49+
maxVal = v
50+
key = k
51+
}
52+
}
53+
c.Type = key
54+
}

0 commit comments

Comments
 (0)