Skip to content

Commit d00631f

Browse files
Fix headers in Druid DS (#97)
Co-authored-by: Jakub Michalak <[email protected]>
1 parent cc1e385 commit d00631f

File tree

4 files changed

+57
-4
lines changed

4 files changed

+57
-4
lines changed

go.mod

+3-1
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,8 @@ require (
287287
k8s.io/klog/v2 v2.90.1 // @grafana/grafana-app-platform-squad
288288
)
289289

290+
require github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible
291+
290292
require (
291293
cloud.google.com/go v0.110.0 // indirect
292294
cloud.google.com/go/compute/metadata v0.2.3 // indirect
@@ -444,7 +446,7 @@ require (
444446
github.com/go-logr/logr v1.2.4 // @grafana/grafana-app-platform-squad
445447
github.com/go-logr/stdr v1.2.2 // indirect
446448
github.com/google/go-github v17.0.0+incompatible // @grafana/grafana-app-platform-squad
447-
github.com/grafadruid/go-druid v0.0.6
449+
github.com/grafadruid/go-druid v0.0.7-0.20230607082331-983aa577d90a
448450
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
449451
github.com/hmarr/codeowners v1.1.2 // @grafana/grafana-as-code
450452
github.com/imdario/mergo v0.3.13 // indirect

go.sum

+3-2
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,7 @@ github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob
625625
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
626626
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
627627
github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
628+
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
628629
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
629630
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
630631
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
@@ -1758,8 +1759,8 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm
17581759
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
17591760
github.com/gotestyourself/gotestyourself v1.3.0/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY=
17601761
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=
1762+
github.com/grafadruid/go-druid v0.0.7-0.20230607082331-983aa577d90a h1:+2Q5MlRJc7nxT5H4aPzWK9YyC6uO3bhiw2yElOz4Nfo=
1763+
github.com/grafadruid/go-druid v0.0.7-0.20230607082331-983aa577d90a/go.mod h1:KY3a6MrVMKkXgMTwBS9Nrhm1E8OWyR4gd0WzUi8d/zM=
17631764
github.com/grafana/alerting v0.0.0-20230606080147-55b8d71c7890 h1:ubNIgVGX4PQ9YI1nWnt2mky3il8clWSjdo3NFSD26DQ=
17641765
github.com/grafana/alerting v0.0.0-20230606080147-55b8d71c7890/go.mod h1:zEflOvMVchYhRbFb5ziXVR/JG67FOLBzQTjhHh9xaI4=
17651766
github.com/grafana/codejen v0.0.3 h1:tAWxoTUuhgmEqxJPOLtJoxlPBbMULFwKFOcRsPRPXDw=

pkg/tsdb/druid/druid.go

+30-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"strings"
1212
"time"
1313

14+
"github.com/Knetic/govaluate"
1415
"github.com/bitly/go-simplejson"
1516
"github.com/grafadruid/go-druid"
1617
druidquerybuilder "github.com/grafadruid/go-druid/builder"
@@ -183,7 +184,10 @@ func (ds *Service) CallResource(ctx context.Context, req *backend.CallResourceRe
183184
default:
184185
body = "Path not supported"
185186
}
186-
resp := &backend.CallResourceResponse{Status: code}
187+
resp := &backend.CallResourceResponse{
188+
Headers: map[string][]string{},
189+
Status: code,
190+
}
187191
resp.Body, err = json.Marshal(body)
188192
sender.Send(resp)
189193
return nil
@@ -440,6 +444,9 @@ func (ds *Service) prepareQuery(qry []byte, s *druidInstanceSettings) (druidquer
440444
defaultQueryContext,
441445
ds.prepareQueryContext(queryContextParameters.([]interface{})))
442446
}
447+
if g, ok := q.Builder["granularity"].(map[string]any); ok {
448+
q.Builder["granularity"] = resolveGranularity(g)
449+
}
443450
jsonQuery, err := json.Marshal(q.Builder)
444451
if err != nil {
445452
return nil, nil, err
@@ -449,6 +456,28 @@ func (ds *Service) prepareQuery(qry []byte, s *druidInstanceSettings) (druidquer
449456
return query, mergeSettings(s.defaultQuerySettings, q.Settings), err
450457
}
451458

459+
func resolveGranularity(m map[string]any) map[string]any {
460+
// granularity is optional, so return early if not set and is of wrong type
461+
if m == nil || m["type"] != "duration" {
462+
return m
463+
}
464+
expr, ok := m["duration"].(string)
465+
if !ok {
466+
return m
467+
}
468+
469+
eval, err := govaluate.NewEvaluableExpression(expr)
470+
if err != nil {
471+
return m
472+
}
473+
result, err := eval.Evaluate(nil)
474+
if err != nil {
475+
return m
476+
}
477+
m["duration"] = result
478+
return m
479+
}
480+
452481
func (ds *Service) prepareQueryContext(parameters []interface{}) map[string]interface{} {
453482
ctx := make(map[string]interface{})
454483
for _, parameter := range parameters {

pkg/tsdb/druid/druid_test.go

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package druid
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
)
8+
9+
func TestResolveGranularity(t *testing.T) {
10+
granularity := map[string]any{
11+
"type": "duration",
12+
"duration": "10 * 10",
13+
"origin": "2012-01-01T00:30:00Z",
14+
}
15+
gran := resolveGranularity(granularity)
16+
assert.Equal(t, gran, map[string]any{
17+
"type": "duration",
18+
"duration": 100,
19+
"origin": "2012-01-01T00:30:00Z",
20+
})
21+
}

0 commit comments

Comments
 (0)