@@ -11,6 +11,7 @@ import (
11
11
"strings"
12
12
"time"
13
13
14
+ "github.com/Knetic/govaluate"
14
15
"github.com/bitly/go-simplejson"
15
16
"github.com/grafadruid/go-druid"
16
17
druidquerybuilder "github.com/grafadruid/go-druid/builder"
@@ -183,7 +184,10 @@ func (ds *Service) CallResource(ctx context.Context, req *backend.CallResourceRe
183
184
default :
184
185
body = "Path not supported"
185
186
}
186
- resp := & backend.CallResourceResponse {Status : code }
187
+ resp := & backend.CallResourceResponse {
188
+ Headers : map [string ][]string {},
189
+ Status : code ,
190
+ }
187
191
resp .Body , err = json .Marshal (body )
188
192
sender .Send (resp )
189
193
return nil
@@ -440,6 +444,9 @@ func (ds *Service) prepareQuery(qry []byte, s *druidInstanceSettings) (druidquer
440
444
defaultQueryContext ,
441
445
ds .prepareQueryContext (queryContextParameters .([]interface {})))
442
446
}
447
+ if g , ok := q .Builder ["granularity" ].(map [string ]any ); ok {
448
+ q .Builder ["granularity" ] = resolveGranularity (g )
449
+ }
443
450
jsonQuery , err := json .Marshal (q .Builder )
444
451
if err != nil {
445
452
return nil , nil , err
@@ -449,6 +456,28 @@ func (ds *Service) prepareQuery(qry []byte, s *druidInstanceSettings) (druidquer
449
456
return query , mergeSettings (s .defaultQuerySettings , q .Settings ), err
450
457
}
451
458
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
+
452
481
func (ds * Service ) prepareQueryContext (parameters []interface {}) map [string ]interface {} {
453
482
ctx := make (map [string ]interface {})
454
483
for _ , parameter := range parameters {
0 commit comments