@@ -2,7 +2,12 @@ import { FieldType, MutableDataFrame, PreferredVisualisationType } from '@grafan
2
2
import { MyQuery } from '../../types' ;
3
3
import { convertTimeToMs , getFieldType } from '../../utils/zincutils' ;
4
4
5
- export const getLogsDataFrame = ( data : any , target : MyQuery , streamFields : any = [ ] ) => {
5
+ export const getLogsDataFrame = (
6
+ data : any ,
7
+ target : MyQuery ,
8
+ streamFields : any = [ ] ,
9
+ timestampColumn = '_timestamp'
10
+ ) => {
6
11
const logsData = getDefaultDataFrame ( target . refId , 'logs' ) ;
7
12
8
13
logsData . addField ( {
@@ -24,36 +29,64 @@ export const getLogsDataFrame = (data: any, target: MyQuery, streamFields: any =
24
29
} ) ;
25
30
} ) ;
26
31
27
- data . hits . forEach ( ( log : any ) => {
28
- logsData . add ( { ...log , Content : JSON . stringify ( log ) , Time : convertTimeToMs ( log . _timestamp ) } ) ;
32
+ data . forEach ( ( log : any ) => {
33
+ logsData . add ( { ...log , Content : JSON . stringify ( log ) , Time : convertTimeToMs ( log [ timestampColumn ] ) } ) ;
29
34
} ) ;
30
35
31
36
return logsData ;
32
37
} ;
33
38
34
- export const getGraphDataFrame = ( data : any , target : MyQuery ) => {
39
+ export const getGraphDataFrame = ( data : any , target : MyQuery , app : string ) => {
35
40
const graphData = getDefaultDataFrame ( target . refId , 'graph' ) ;
36
41
42
+ let fields = [ 'zo_sql_key' , 'zo_sql_num' ] ;
43
+
44
+ if ( app !== 'explore' ) {
45
+ const columns = getColumnsFromQuery ( target . query ) ;
46
+
47
+ if ( columns . length ) {
48
+ fields = columns ;
49
+ }
50
+ }
51
+
37
52
graphData . addField ( {
38
53
config : {
39
54
filterable : true ,
40
55
} ,
41
56
name : 'Time' ,
42
57
type : FieldType . time ,
43
58
} ) ;
44
- graphData . addField ( {
45
- name : 'Value' ,
46
- type : FieldType . number ,
47
- } ) ;
48
59
49
- data . aggs ?. histogram . forEach ( ( log : any ) => {
50
- let histDate = new Date ( log . zo_sql_key + 'Z' ) . getTime ( ) ;
51
- graphData . add ( { Time : histDate , Value : log . zo_sql_num } ) ;
60
+ for ( let i = 1 ; i < fields . length ; i ++ ) {
61
+ graphData . addField ( {
62
+ name : fields [ i ] ,
63
+ type : FieldType . number ,
64
+ } ) ;
65
+ }
66
+
67
+ if ( ! data . length ) {
68
+ return graphData ;
69
+ }
70
+
71
+ data . forEach ( ( log : any ) => {
72
+ graphData . add ( getField ( log , fields ) ) ;
52
73
} ) ;
53
74
54
75
return graphData ;
55
76
} ;
56
77
78
+ const getField = ( log : any , columns : any ) => {
79
+ let field : any = {
80
+ Time : new Date ( log [ columns [ 0 ] ] + 'Z' ) . getTime ( ) ,
81
+ } ;
82
+
83
+ for ( let i = 1 ; i < columns . length ; i ++ ) {
84
+ field [ columns [ i ] ] = log [ columns [ i ] ] ;
85
+ }
86
+
87
+ return field ;
88
+ } ;
89
+
57
90
export const getDefaultDataFrame = ( refId : string , visualisationType : PreferredVisualisationType = 'logs' ) => {
58
91
return new MutableDataFrame ( {
59
92
refId : refId ,
@@ -63,3 +96,41 @@ export const getDefaultDataFrame = (refId: string, visualisationType: PreferredV
63
96
fields : [ ] ,
64
97
} ) ;
65
98
} ;
99
+
100
+ const getColumnsFromQuery = ( query : string ) => {
101
+ // Regular expression pattern to find the select column statements with optional alias
102
+ let pattern = / \b s e l e c t \b ( .+ ?) \b f r o m \b / i;
103
+
104
+ // Get the selected columns
105
+ let match = pattern . exec ( query ) ;
106
+
107
+ // If there's no select statement, return an empty list
108
+ if ( ! match ) {
109
+ return [ ] ;
110
+ }
111
+
112
+ // Split the selected columns by comma, then trim extra whitespace
113
+ let selectedColumns = match [ 1 ] . split ( ',' ) . map ( function ( column ) {
114
+ return column . trim ( ) ;
115
+ } ) ;
116
+
117
+ // Prepare array to store final column names or aliases
118
+ let columnNames : any = [ ] ;
119
+
120
+ // Iterate over selected columns
121
+ selectedColumns . forEach ( function ( column ) {
122
+ // Regular expression pattern to find alias
123
+ let aliasPattern = / \s + a s \s + ( .+ ) $ / i;
124
+
125
+ // Get the alias
126
+ let aliasMatch = aliasPattern . exec ( column ) ;
127
+
128
+ // If alias exists, use that, otherwise use column name
129
+ if ( aliasMatch ) {
130
+ columnNames . push ( aliasMatch [ 1 ] ) ;
131
+ } else {
132
+ columnNames . push ( column ) ;
133
+ }
134
+ } ) ;
135
+ return columnNames ;
136
+ } ;
0 commit comments