1
1
import React , { useState , useCallback } from 'react' ;
2
2
import Electron from 'electron' ;
3
+ import { eventTransformer } from './helpers' ;
3
4
4
5
const { ipcRenderer } = window . require ( 'electron' ) ;
5
6
@@ -10,127 +11,57 @@ export const EventContext = React.createContext<any>(null);
10
11
* @property {Object } eventData
11
12
* @method fetchEventData
12
13
* @method setEventData
13
-
14
14
*/
15
15
16
16
interface Props {
17
- children : any
17
+ children : any ;
18
18
}
19
19
20
20
const EventContextProvider : React . FC < Props > = React . memo ( ( { children } ) => {
21
- const [ eventData , setEventData ] = useState ( { eventDataList : [ ] , eventTimeList : [ ] } ) ;
22
- // const [eventKafkaData, setEventKafkaData] = useState({ eventDataList: [], eventTimeList: [] });
23
- // const [eventKubernetesData, setEventKubernetesData] = useState({ eventDataList: [], eventTimeList: [] });
21
+ const [ eventData , setEventData ] = useState ( { } ) ;
24
22
25
23
function tryParseJSON ( jsonString : any ) {
26
24
try {
27
- const o = JSON . parse ( jsonString ) ;
28
- if ( o && typeof o === 'object' ) {
25
+ const obj = JSON . parse ( jsonString ) ;
26
+ if ( obj && typeof obj === 'object' ) {
29
27
return true ;
30
28
}
31
- } catch ( e ) {
32
- console . log ( { error : e } ) ;
29
+ } catch ( err ) {
30
+ console . log ( { error : err } ) ;
33
31
}
34
32
return false ;
35
33
}
36
34
37
35
/**
38
- * @function fetchEventData - takes parameter arg.
39
- * Checks if arg is strictly equals to 'kafkametrics', if so removes the event listerner suing the ipcRenderer.removeAllListeners.
40
- * Sends a message using 'ipcRenderer.send'.
41
- * This function seems to be fetching event data and updating the state accordingly.
42
- * Problem: trying to change type any to something some concrete.
36
+ * @function fetchEventData - takes an argument that is a string representing which metric type to be requested from the backend.
37
+ * Sends a message using 'ipcRenderer.send'.
38
+ * Fetches event data and updates the EventData state after transforming the data.
43
39
*/
44
40
45
- const fetchEventData = useCallback ( ( arg : any ) => {
46
- if ( arg === 'kafkametrics' ) {
47
- ipcRenderer . removeAllListeners ( 'kafkaResponse' ) ;
48
- ipcRenderer . send ( 'kafkaRequest' ) ;
49
- ipcRenderer . on ( 'kafkaResponse' , ( event : Electron . Event , data : any ) => {
50
- let result : any ;
51
- if ( tryParseJSON ( data ) ) result = JSON . parse ( data ) ;
52
- let transformedData : any = { } ;
53
- if ( result && result . length > 0 ) {
54
- transformedData = transformEventData ( result [ 0 ] [ 'kafkametrics' ] ) ;
55
- setEventData ( transformedData ) ;
56
- }
57
- } ) ;
58
- } else if ( arg === 'kubernetesmetrics' ) {
59
- ipcRenderer . removeAllListeners ( 'kubernetesResponse' ) ;
60
- ipcRenderer . send ( 'kubernetesRequest' ) ;
61
- ipcRenderer . on ( 'kubernetesResponse' , ( event : Electron . Event , data : any ) => {
62
- let result : any ;
63
- if ( tryParseJSON ( data ) ) result = JSON . parse ( data ) ;
64
- let transformedData : any = { } ;
41
+ const fetchEventData = useCallback ( ( arg : string ) => {
42
+ const argDict = {
43
+ kafkametrics : {
44
+ request : 'kafkaRequest' ,
45
+ response : 'kafkaResponse' ,
46
+ } ,
47
+ kubernetesmetrics : {
48
+ request : 'kubernetesRequest' ,
49
+ response : 'kubernetesResponse' ,
50
+ } ,
51
+ } ;
52
+
53
+ ipcRenderer . removeAllListeners ( argDict [ arg ] . response ) ;
54
+ ipcRenderer . send ( argDict [ arg ] . request ) ;
55
+ ipcRenderer . on ( argDict [ arg ] . response , ( event : Electron . Event , data : any ) => {
56
+ if ( tryParseJSON ( data ) ) {
57
+ const result : object [ ] = JSON . parse ( data ) ;
65
58
if ( result && result . length > 0 ) {
66
- transformedData = transformEventData ( result [ 0 ] [ 'kubernetesmetrics' ] ) ;
59
+ const transformedData : object = eventTransformer ( result [ 0 ] [ arg ] ) ;
67
60
setEventData ( transformedData ) ;
68
61
}
69
- } ) ;
70
- }
71
- } , [ ] ) ;
72
-
73
- // const fetchKafkaEventData = useCallback(() => {
74
- // ipcRenderer.removeAllListeners('kafkaResponse');
75
- // ipcRenderer.send('kafkaRequest');
76
- // ipcRenderer.on('kafkaResponse', (event: Electron.Event, data: any) => {
77
- // let result: any;
78
- // if (tryParseJSON(data)) result = JSON.parse(data);
79
- // let transformedData: any = {};
80
- // if (result && result.length > 0) {
81
- // transformedData = transformEventData(result[0]['kafkametrics']);
82
- // setEventData(transformedData);
83
- // }
84
- // });
85
- // }, []);
86
-
87
- // const fetchKubernetesEventData = useCallback(() => {
88
- // ipcRenderer.removeAllListeners('kafkaResponse');
89
- // ipcRenderer.send('kafkaRequest');
90
- // ipcRenderer.on('kafkaResponse', (event: Electron.Event, data: any) => {
91
- // let result: any;
92
- // if (tryParseJSON(data)) result = JSON.parse(data);
93
- // let transformedData: any = {};
94
- // if (result && result.length > 0) {
95
- // transformedData = transformEventData(result[0]['kafkametrics']);
96
- // setEventData(transformedData);
97
- // }
98
- // });
99
- // }, []);
100
- /**
101
- * @function transformEventData - seems like this function tranforms raw data into a format that can be visualize in graphs.
102
- */
103
- const transformEventData = ( data : any [ ] ) => {
104
- const dataList : any [ ] = [ ] ;
105
- const timeList : any [ ] = [ ] ;
106
- const metricSet = new Set ( ) ;
107
- data . forEach ( element => {
108
- const metricName = element . metric ;
109
- const time = element . time ;
110
- const value = element . value ;
111
- if ( ! metricSet . has ( metricName ) ) {
112
- metricSet . add ( metricName ) ;
113
- const metricObj_data : any = { } ;
114
- const metricObj_time : any = { } ;
115
- metricObj_data [ metricName ] = [ value ] ;
116
- metricObj_time [ metricName ] = [ time ] ;
117
- dataList . push ( metricObj_data ) ;
118
- timeList . push ( metricObj_time ) ;
119
- } else {
120
- dataList . forEach ( element => {
121
- if ( Object . keys ( element ) [ 0 ] === metricName ) {
122
- element [ metricName ] . push ( value ) ;
123
- }
124
- } ) ;
125
- timeList . forEach ( element => {
126
- if ( Object . keys ( element ) [ 0 ] === metricName ) {
127
- element [ metricName ] . push ( time ) ;
128
- }
129
- } ) ;
130
62
}
131
63
} ) ;
132
- return { eventDataList : dataList , eventTimeList : timeList } ;
133
- } ;
64
+ } , [ ] ) ;
134
65
135
66
return (
136
67
< EventContext . Provider
0 commit comments