1
- import {
2
- DataSourceInstanceSettings ,
3
- CoreApp ,
4
- ScopedVars ,
5
- DataQueryRequest ,
6
- LegacyMetricFindQueryOptions ,
7
- MetricFindValue ,
8
- dateTime ,
9
- LiveChannelScope ,
10
- DataQueryResponse ,
11
- LoadingState
12
- } from '@grafana/data' ;
1
+ import { DataSourceInstanceSettings , CoreApp , ScopedVars , DataQueryRequest , LiveChannelScope , DataQueryResponse , LoadingState , rangeUtil } from '@grafana/data' ;
13
2
import { DataSourceWithBackend , getGrafanaLiveSrv , getTemplateSrv , TemplateSrv } from '@grafana/runtime' ;
14
- import {
15
- parseJsQuery ,
16
- getBucketCount ,
17
- parseJsQueryLegacy ,
18
- randomId ,
19
- getMetricValues ,
20
- datetimeToJson ,
21
- base64UrlEncode ,
22
- unixTsToMongoID
23
- } from './utils' ;
24
- import { MongoQuery , MongoDataSourceOptions , DEFAULT_QUERY , QueryLanguage , VariableQuery } from './types' ;
25
- import { firstValueFrom , merge , Observable , of } from 'rxjs' ;
3
+ import { parseJsQuery , getBucketCount , parseJsQueryLegacy , datetimeToJson , base64UrlEncode , unixTsToMongoID } from './utils' ;
4
+ import { MongoDBQuery , MongoDataSourceOptions , DEFAULT_QUERY , QueryLanguage } from './types' ;
5
+ import { merge , Observable , of } from 'rxjs' ;
26
6
import { MongoDBVariableSupport } from 'variables'
27
7
28
- export class MongoDBDataSource extends DataSourceWithBackend < MongoQuery , MongoDataSourceOptions > {
8
+ export class MongoDBDataSource extends DataSourceWithBackend < MongoDBQuery , MongoDataSourceOptions > {
29
9
constructor ( instanceSettings : DataSourceInstanceSettings < MongoDataSourceOptions > ,
30
10
private readonly templateSrv : TemplateSrv = getTemplateSrv ( ) ) {
31
11
super ( instanceSettings ) ;
32
- this . variables = new MongoDBVariableSupport ( this , this . templateSrv ) ;
12
+ this . variables = new MongoDBVariableSupport ( this ) ;
33
13
}
34
14
35
- getDefaultQuery ( _ : CoreApp ) : Partial < MongoQuery > {
15
+ getDefaultQuery ( _ : CoreApp ) : Partial < MongoDBQuery > {
36
16
return DEFAULT_QUERY ;
37
17
}
38
18
39
- applyTemplateVariables ( query : MongoQuery , scopedVars : ScopedVars ) {
40
- let queryText = query . queryText ! ;
19
+ applyTemplateVariables ( query : MongoDBQuery , scopedVars : ScopedVars ) {
20
+ console . log ( "scopedVars" , scopedVars ) ;
21
+ console . log ( "Vars" , this . templateSrv . getVariables ( ) ) ;
22
+ const variables = { ...scopedVars } ;
23
+
24
+
25
+ const from = this . templateSrv . replace ( '$__from' , variables ) ;
26
+ const to = this . templateSrv . replace ( '$__to' , variables ) ;
41
27
28
+ variables . from = { value : datetimeToJson ( from ) }
29
+ variables . to = { value : datetimeToJson ( to ) }
30
+
31
+ let queryText = query . queryText ! ;
42
32
if ( query . queryLanguage === QueryLanguage . JAVASCRIPT || query . queryLanguage === QueryLanguage . JAVASCRIPT_SHADOW ) {
43
33
const { jsonQuery } =
44
34
query . queryLanguage === QueryLanguage . JAVASCRIPT_SHADOW
@@ -47,31 +37,19 @@ export class MongoDBDataSource extends DataSourceWithBackend<MongoQuery, MongoDa
47
37
queryText = jsonQuery ! ;
48
38
}
49
39
50
- const from = getTemplateSrv ( ) . replace ( '$__from' , { } ) ;
51
- const to = getTemplateSrv ( ) . replace ( '$__to' , { } ) ;
52
40
53
41
queryText = queryText
54
42
. replaceAll ( / " \$ _ _ f r o m _ o i d " / g, `"${ unixTsToMongoID ( from , '0' ) } "` )
55
43
. replaceAll ( / " \$ _ _ t o _ o i d " / g, `"${ unixTsToMongoID ( to , 'f' ) } "` ) ;
56
44
57
- // Compatible with legacy plugin $from
58
- if ( from !== '$__from' ) {
59
- queryText = queryText . replaceAll ( / " \$ f r o m " / g, datetimeToJson ( from ) ) ;
60
- }
61
-
62
- // Compatible with legacy plugin $to
63
- if ( to !== '$__to' ) {
64
- queryText = queryText . replaceAll ( / " \$ t o " / g, datetimeToJson ( to ) ) ;
65
- }
66
-
67
45
const interval = scopedVars [ '__interval_ms' ] ?. value ;
68
46
69
47
// Compatible with legacy plugin $dateBucketCount
70
48
if ( interval && from && to ) {
71
49
queryText = queryText . replaceAll ( / " \$ d a t e B u c k e t C o u n t " / g, getBucketCount ( from , to , interval ) . toString ( ) ) ;
72
50
}
73
51
74
- const text = getTemplateSrv ( ) . replace ( queryText , scopedVars ) ;
52
+ const text = this . templateSrv . replace ( queryText , variables ) ;
75
53
return {
76
54
...query ,
77
55
queryText : text ,
@@ -80,48 +58,11 @@ export class MongoDBDataSource extends DataSourceWithBackend<MongoQuery, MongoDa
80
58
81
59
annotations = { }
82
60
83
- async metricFindQuery ( query : VariableQuery , options ?: LegacyMetricFindQueryOptions ) : Promise < MetricFindValue [ ] > {
84
- const request : DataQueryRequest < MongoQuery > = {
85
- requestId : 'variable-query-' + randomId ( 3 ) ,
86
- targets : [
87
- {
88
- refId : 'A' ,
89
- queryLanguage : QueryLanguage . JSON ,
90
- collection : query . collection ,
91
- queryText : getTemplateSrv ( ) . replace ( query . queryText ) ,
92
- queryType : 'table' ,
93
- isStreaming : false ,
94
- } ,
95
- ] ,
96
- scopedVars : options ?. scopedVars || { } ,
97
- interval : '5s' ,
98
- timezone : 'browser' ,
99
- intervalMs : 5000 ,
100
- range : options ?. range || {
101
- from : dateTime ( ) ,
102
- to : dateTime ( ) ,
103
- raw : {
104
- from : 'now' ,
105
- to : 'now' ,
106
- } ,
107
- } ,
108
- app : 'variable-query' ,
109
- startTime : ( options ?. range ?. from || dateTime ( ) ) . toDate ( ) . getUTCMilliseconds ( ) ,
110
- } ;
111
-
112
- const resp = await firstValueFrom ( this . query ( request ) ) ;
113
- if ( resp . errors ?. length && resp . errors . length > 0 ) {
114
- throw new Error ( resp . errors [ 0 ] . message || 'Unknown error' ) ;
115
- }
116
-
117
- return getMetricValues ( resp ) ;
118
- }
119
-
120
- filterQuery ( query : MongoQuery ) : boolean {
61
+ filterQuery ( query : MongoDBQuery ) : boolean {
121
62
return ! ! query . queryText && ! ! query . collection ;
122
63
}
123
64
124
- query ( request : DataQueryRequest < MongoQuery > ) : Observable < DataQueryResponse > {
65
+ query ( request : DataQueryRequest < MongoDBQuery > ) : Observable < DataQueryResponse > {
125
66
if ( request . liveStreaming ) {
126
67
const observables = request . targets . map ( ( query ) => {
127
68
return getGrafanaLiveSrv ( ) . getDataStream ( {
0 commit comments