@@ -2,7 +2,12 @@ import { FieldType, MutableDataFrame, PreferredVisualisationType } from '@grafan
22import { MyQuery } from '../../types' ;
33import { convertTimeToMs , getFieldType } from '../../utils/zincutils' ;
44
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+ ) => {
611 const logsData = getDefaultDataFrame ( target . refId , 'logs' ) ;
712
813 logsData . addField ( {
@@ -24,36 +29,64 @@ export const getLogsDataFrame = (data: any, target: MyQuery, streamFields: any =
2429 } ) ;
2530 } ) ;
2631
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 ] ) } ) ;
2934 } ) ;
3035
3136 return logsData ;
3237} ;
3338
34- export const getGraphDataFrame = ( data : any , target : MyQuery ) => {
39+ export const getGraphDataFrame = ( data : any , target : MyQuery , app : string ) => {
3540 const graphData = getDefaultDataFrame ( target . refId , 'graph' ) ;
3641
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+
3752 graphData . addField ( {
3853 config : {
3954 filterable : true ,
4055 } ,
4156 name : 'Time' ,
4257 type : FieldType . time ,
4358 } ) ;
44- graphData . addField ( {
45- name : 'Value' ,
46- type : FieldType . number ,
47- } ) ;
4859
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 ) ) ;
5273 } ) ;
5374
5475 return graphData ;
5576} ;
5677
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+
5790export const getDefaultDataFrame = ( refId : string , visualisationType : PreferredVisualisationType = 'logs' ) => {
5891 return new MutableDataFrame ( {
5992 refId : refId ,
@@ -63,3 +96,41 @@ export const getDefaultDataFrame = (refId: string, visualisationType: PreferredV
6396 fields : [ ] ,
6497 } ) ;
6598} ;
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