15
15
*/
16
16
17
17
import React , { useState , useEffect } from 'react'
18
- import { not , Progressing , ToastManager , ToastVariantType , useAsync , useTheme } from '@devtron-labs/devtron-fe-common-lib'
18
+ import {
19
+ not ,
20
+ Progressing ,
21
+ ToastManager ,
22
+ ToastVariantType ,
23
+ useAsync ,
24
+ useTheme ,
25
+ } from '@devtron-labs/devtron-fe-common-lib'
19
26
import { useParams , Link , NavLink } from 'react-router-dom'
20
27
import moment , { Moment } from 'moment'
21
28
import Tippy from '@tippyjs/react'
22
- import {
23
- getIframeSrc ,
24
- ThroughputSelect ,
25
- getCalendarValue ,
26
- isK8sVersionValid ,
27
- LatencySelect ,
28
- } from './utils'
29
+ import { getIframeSrc , ThroughputSelect , getCalendarValue , isK8sVersionValid , LatencySelect , AppInfo } from './utils'
29
30
import {
30
31
ChartTypes ,
31
32
AppMetricsTab ,
@@ -50,7 +51,7 @@ import {
50
51
ModuleNameMap ,
51
52
URLS ,
52
53
} from '../../../../config'
53
- import { isDatasourceConfigured , isDatasourceHealthy } from './appDetails.service'
54
+ import { getDataSourceDetailsFromEnvironment , isDatasourceHealthy } from './appDetails.service'
54
55
import { getHostURLConfiguration } from '../../../../services/service'
55
56
import PrometheusErrorImage from '../../../../assets/img/ic-error-prometheus.png'
56
57
import HostErrorImage from '../../../../assets/img/ic-error-hosturl.png'
@@ -59,15 +60,17 @@ import { getModuleInfo } from '../../../v2/devtronStackManager/DevtronStackManag
59
60
import { ModuleStatus } from '../../../v2/devtronStackManager/DevtronStackManager.type'
60
61
import { APP_METRICS_CALENDAR_INPUT_DATE_FORMAT } from './constants'
61
62
62
- export const AppMetrics : React . FC < {
63
- appName : string
64
- environment
65
- podMap : Map < string , any >
66
- k8sVersion
67
- addExtraSpace : boolean
68
- } > = ( { appName, environment, podMap, k8sVersion, addExtraSpace } ) => {
63
+ export const AppMetrics : React . FC <
64
+ {
65
+ appName : string
66
+ environment
67
+ podMap : Map < string , any >
68
+ k8sVersion
69
+ addExtraSpace : boolean
70
+ }
71
+ > = ( { appName, podMap, k8sVersion, addExtraSpace, environment } ) => {
69
72
const { appTheme } = useTheme ( )
70
- const { appMetrics, environmentName , infraMetrics } = environment
73
+ const { appMetrics, infraMetrics , environmentName } = environment
71
74
const [ calendar , setDateRange ] = useState < { startDate : Moment ; endDate : Moment } > ( {
72
75
startDate : moment ( ) . subtract ( 5 , 'minute' ) ,
73
76
endDate : moment ( ) ,
@@ -76,10 +79,16 @@ export const AppMetrics: React.FC<{
76
79
startDate : 'now-5m' ,
77
80
endDate : 'now' ,
78
81
} )
79
- const [ datasource , setDatasource ] = useState ( {
82
+ const [ datasource , setDatasource ] = useState < {
83
+ isLoading : boolean
84
+ isConfigured : boolean
85
+ isHealthy : boolean
86
+ dataSourceName : string
87
+ } > ( {
80
88
isLoading : true ,
81
89
isConfigured : false ,
82
90
isHealthy : false ,
91
+ dataSourceName : '' ,
83
92
} )
84
93
const [ focusedInput , setFocusedInput ] = useState ( CalendarFocusInput . StartDate )
85
94
const [ tab , setTab ] = useState < AppMetricsTabType > ( AppMetricsTab . Aggregate )
@@ -96,6 +105,8 @@ export const AppMetrics: React.FC<{
96
105
throughput : '' ,
97
106
latency : '' ,
98
107
} )
108
+
109
+ const { dataSourceName } = datasource
99
110
const addSpace : string = addExtraSpace ? 'mb-16' : ''
100
111
const pod = podMap ?. values ( ) . next ( ) . value
101
112
const newPodHash = pod ?. networkingInfo ?. labels ?. [ 'rollouts-pod-template-hash' ]
@@ -135,20 +146,28 @@ export const AppMetrics: React.FC<{
135
146
136
147
async function checkDatasource ( ) {
137
148
try {
138
- let datasourceConfiguredRes
139
- let datasourceHealthyRes
140
- let hostUrlRes
141
- hostUrlRes = await getHostURLConfiguration ( )
149
+ const hostUrlRes = await getHostURLConfiguration ( )
142
150
setHostURLConfig ( hostUrlRes . result )
143
- datasourceConfiguredRes = await isDatasourceConfigured ( environmentName )
144
- if ( datasourceConfiguredRes . id ) {
145
- datasourceHealthyRes = await isDatasourceHealthy ( datasourceConfiguredRes . id )
151
+
152
+ const { dataSourceName, dataSourceId } = await getDataSourceDetailsFromEnvironment ( environmentName )
153
+
154
+ if ( dataSourceId ) {
155
+ const datasourceHealthyRes = await isDatasourceHealthy ( dataSourceId )
156
+
157
+ setDatasource ( {
158
+ isLoading : false ,
159
+ isConfigured : true ,
160
+ isHealthy : datasourceHealthyRes ?. status . toLowerCase ( ) === 'success' ,
161
+ dataSourceName,
162
+ } )
163
+ } else {
164
+ setDatasource ( {
165
+ isLoading : false ,
166
+ isConfigured : false ,
167
+ isHealthy : false ,
168
+ dataSourceName : '' ,
169
+ } )
146
170
}
147
- setDatasource ( {
148
- isLoading : false ,
149
- isConfigured : ! ! datasourceConfiguredRes . id ,
150
- isHealthy : datasourceHealthyRes . status . toLowerCase ( ) === 'success' ,
151
- } )
152
171
} catch ( error ) {
153
172
setDatasource ( {
154
173
...datasource ,
@@ -170,19 +189,20 @@ export const AppMetrics: React.FC<{
170
189
setCalendarValue ( str )
171
190
}
172
191
173
- const getIframeSrcWrapper : GraphModalProps [ 'getIframeSrcWrapper' ] = ( params ) => getIframeSrc ( {
174
- ...params ,
175
- grafanaTheme : appTheme ,
176
- } )
192
+ const getIframeSrcWrapper : GraphModalProps [ 'getIframeSrcWrapper' ] = ( params ) =>
193
+ getIframeSrc ( {
194
+ ...params ,
195
+ grafanaTheme : appTheme ,
196
+ } )
177
197
178
198
function handleStatusChange ( selected ) : void {
179
199
if ( ! isK8sVersionValid ( k8sVersion ) ) {
180
200
k8sVersion = DEFAULTK8SVERSION
181
201
}
182
- const appInfo = {
202
+ const appInfo : AppInfo = {
183
203
appId,
184
204
envId,
185
- environmentName ,
205
+ dataSourceName ,
186
206
newPodHash,
187
207
k8sVersion,
188
208
}
@@ -192,7 +212,7 @@ export const AppMetrics: React.FC<{
192
212
calendarInputs,
193
213
tab,
194
214
isLegendRequired : true ,
195
- statusCode : selected . value
215
+ statusCode : selected . value ,
196
216
} )
197
217
setStatusCode ( selected . value )
198
218
setGraphs ( {
@@ -205,15 +225,21 @@ export const AppMetrics: React.FC<{
205
225
if ( ! isK8sVersionValid ( k8sVersion ) ) {
206
226
k8sVersion = DEFAULTK8SVERSION
207
227
}
208
- const appInfo = {
228
+ const appInfo : AppInfo = {
209
229
appId,
210
230
envId,
211
- environmentName ,
231
+ dataSourceName ,
212
232
newPodHash,
213
233
k8sVersion,
214
234
}
215
235
const latency = getIframeSrcWrapper ( {
216
- appInfo, chartName : ChartType . Latency , calendarInputs, tab, isLegendRequired : true , statusCode : undefined , latency : selected . value
236
+ appInfo,
237
+ chartName : ChartType . Latency ,
238
+ calendarInputs,
239
+ tab,
240
+ isLegendRequired : true ,
241
+ statusCode : undefined ,
242
+ latency : selected . value ,
217
243
} )
218
244
setLatency ( selected . value )
219
245
setGraphs ( {
@@ -237,18 +263,26 @@ export const AppMetrics: React.FC<{
237
263
} )
238
264
}
239
265
240
- const appInfo = {
266
+ const appInfo : AppInfo = {
241
267
appId,
242
268
envId,
243
- environmentName ,
269
+ dataSourceName ,
244
270
newPodHash,
245
271
k8sVersion,
246
272
}
247
273
const cpu = getIframeSrcWrapper ( {
248
- appInfo, chartName : ChartType . Cpu , calendarInputs, tab : newTab , isLegendRequired : true
274
+ appInfo,
275
+ chartName : ChartType . Cpu ,
276
+ calendarInputs,
277
+ tab : newTab ,
278
+ isLegendRequired : true ,
249
279
} )
250
280
const ram = getIframeSrcWrapper ( {
251
- appInfo, chartName : ChartType . Ram , calendarInputs, tab : newTab , isLegendRequired : true
281
+ appInfo,
282
+ chartName : ChartType . Ram ,
283
+ calendarInputs,
284
+ tab : newTab ,
285
+ isLegendRequired : true ,
252
286
} )
253
287
const latency = getIframeSrcWrapper ( {
254
288
appInfo,
@@ -265,7 +299,7 @@ export const AppMetrics: React.FC<{
265
299
calendarInputs,
266
300
tab : newTab ,
267
301
isLegendRequired : true ,
268
- statusCode : StatusType . Throughput
302
+ statusCode : StatusType . Throughput ,
269
303
} )
270
304
setGraphs ( {
271
305
cpu,
@@ -295,6 +329,7 @@ export const AppMetrics: React.FC<{
295
329
if (
296
330
! datasource . isConfigured ||
297
331
! datasource . isHealthy ||
332
+ ! datasource . dataSourceName ||
298
333
! hostURLConfig ||
299
334
hostURLConfig . value !== window . location . origin
300
335
) {
@@ -309,10 +344,7 @@ export const AppMetrics: React.FC<{
309
344
}
310
345
311
346
return (
312
- < section
313
- data-testid = "app-metrices-wrapper"
314
- className = "app-summary bg__primary pl-24 pr-24 pb-20 w-100"
315
- >
347
+ < section data-testid = "app-metrices-wrapper" className = "app-summary bg__primary pl-24 pr-24 pb-20 w-100" >
316
348
{ ( appMetrics || infraMetrics ) && (
317
349
< div className = "flex" style = { { justifyContent : 'space-between' , height : '68px' } } >
318
350
< span className = "fs-14 fw-6 cn-7 flex left mr-9" >
@@ -348,7 +380,7 @@ export const AppMetrics: React.FC<{
348
380
appName = { appName }
349
381
infraMetrics = { environment . infraMetrics }
350
382
appMetrics = { environment . appMetrics }
351
- environmentName = { environmentName }
383
+ dataSourceName = { dataSourceName }
352
384
chartName = { chartName }
353
385
newPodHash = { newPodHash }
354
386
calendar = { calendar }
@@ -514,10 +546,7 @@ const EnableAppMetrics = () => {
514
546
515
547
const MonitoringModuleNotInstalled = ( { addSpace } : { addSpace : string } ) => {
516
548
return (
517
- < div
518
- data-testid = "app-metrices-wrapper"
519
- className = { `bcv-1 w-100 pt-18 pb-18 pl-20 pr-20 ${ addSpace } ` }
520
- >
549
+ < div data-testid = "app-metrices-wrapper" className = { `bcv-1 w-100 pt-18 pb-18 pl-20 pr-20 ${ addSpace } ` } >
521
550
< div className = "flex left w-100 lh-20" >
522
551
< span className = "fs-14 fw-6 cv-5 flex left mr-16" >
523
552
< GraphIcon className = "mr-8 fcv-5 icon-dim-20" />
0 commit comments