1
- import { DataSourceInstanceSettings , CoreApp , ScopedVars , DataQueryRequest , DataQueryResponse , LegacyMetricFindQueryOptions , MetricFindValue , dateTime } from "@grafana/data" ;
1
+ import { DataSourceInstanceSettings , CoreApp , ScopedVars , DataQueryRequest , LegacyMetricFindQueryOptions , MetricFindValue , dateTime } from "@grafana/data" ;
2
2
import { DataSourceWithBackend , getTemplateSrv } from "@grafana/runtime" ;
3
- import { parseJsQuery , datetimeToJson , getBucketCount , parseJsQueryLegacy , randomId , getMetricValues } from "./utils" ;
3
+ import { parseJsQuery , getBucketCount , parseJsQueryLegacy , randomId , getMetricValues , datetimeToJson } from "./utils" ;
4
4
import { MongoQuery , MongoDataSourceOptions , DEFAULT_QUERY , QueryLanguage , VariableQuery } from "./types" ;
5
- import { Observable , firstValueFrom } from "rxjs" ;
5
+ import { firstValueFrom } from "rxjs" ;
6
6
7
7
8
8
export class DataSource extends DataSourceWithBackend < MongoQuery , MongoDataSourceOptions > {
@@ -14,10 +14,47 @@ export class DataSource extends DataSourceWithBackend<MongoQuery, MongoDataSourc
14
14
return DEFAULT_QUERY ;
15
15
}
16
16
17
+
17
18
applyTemplateVariables ( query : MongoQuery , scopedVars : ScopedVars ) {
19
+ let queryText = query . queryText ! ;
20
+
21
+ if ( query . queryLanguage === QueryLanguage . JAVASCRIPT || query . queryLanguage === QueryLanguage . JAVASCRIPT_SHADOW ) {
22
+ const { jsonQuery } =
23
+ query . queryLanguage === QueryLanguage . JAVASCRIPT_SHADOW
24
+ ? parseJsQuery ( queryText )
25
+ : parseJsQueryLegacy ( queryText ) ;
26
+ queryText = jsonQuery ! ;
27
+ }
28
+
29
+ const from = getTemplateSrv ( ) . replace ( "$__from" , { } ) ;
30
+ const to = getTemplateSrv ( ) . replace ( "$__to" , { } ) ;
31
+
32
+ // Compatible with legacy plugin $from
33
+ if ( from !== "$__from" ) {
34
+ queryText = queryText . replaceAll ( / " \$ f r o m " / g, datetimeToJson ( from ) ) ;
35
+ }
36
+
37
+ // Compatible with legacy plugin $to
38
+ if ( to !== "$__to" ) {
39
+ queryText = queryText . replaceAll ( / " \$ t o " / g, datetimeToJson ( to ) ) ;
40
+ }
41
+
42
+ const interval = scopedVars [ "__interval_ms" ] ?. value ;
43
+
44
+ // Compatible with legacy plugin $dateBucketCount
45
+ if ( interval && from && to ) {
46
+ queryText = queryText . replaceAll (
47
+ / " \$ d a t e B u c k e t C o u n t " / g,
48
+ getBucketCount ( from , to , interval ) . toString ( )
49
+ ) ;
50
+ }
51
+
52
+ const text = getTemplateSrv ( ) . replace ( queryText , scopedVars ) ;
53
+
54
+ console . log ( text ) ;
18
55
return {
19
56
...query ,
20
- queryText : getTemplateSrv ( ) . replace ( query . queryText , scopedVars ) ,
57
+ queryText : text
21
58
} ;
22
59
}
23
60
@@ -59,29 +96,4 @@ export class DataSource extends DataSourceWithBackend<MongoQuery, MongoDataSourc
59
96
return ! ! query . queryText && ! ! query . collection ;
60
97
}
61
98
62
- query ( request : DataQueryRequest < MongoQuery > ) : Observable < DataQueryResponse > {
63
- const queries = request . targets . map ( ( query ) => {
64
- let queryText = query . queryText ! ;
65
- if ( query . queryLanguage === QueryLanguage . JAVASCRIPT || query . queryLanguage === QueryLanguage . JAVASCRIPT_SHADOW ) {
66
- const { jsonQuery } =
67
- query . queryLanguage === QueryLanguage . JAVASCRIPT_SHADOW
68
- ? parseJsQuery ( queryText )
69
- : parseJsQueryLegacy ( queryText ) ;
70
- queryText = jsonQuery ! ;
71
- }
72
-
73
- return {
74
- ...query ,
75
- queryText : queryText
76
- . replaceAll ( / " \$ f r o m " / g, datetimeToJson ( request . range . from ) )
77
- . replaceAll ( / " \$ t o " / g, datetimeToJson ( request . range . to ) )
78
- . replaceAll (
79
- / " \$ d a t e B u c k e t C o u n t " / g,
80
- getBucketCount ( request . range . from , request . range . to , request . intervalMs ) . toString ( )
81
- ) ,
82
- } ;
83
- } ) ;
84
-
85
- return super . query ( { ...request , targets : queries } ) ;
86
- }
87
99
}
0 commit comments