@@ -25,7 +25,8 @@ import { ContentPanel } from '../../../../components/ContentPanel';
25
25
import {
26
26
getAlertsVisualizationSpec ,
27
27
getChartTimeUnit ,
28
- getDateFormatByTimeUnit ,
28
+ getDomainRange ,
29
+ TimeUnit ,
29
30
} from '../../../Overview/utils/helpers' ;
30
31
import moment from 'moment' ;
31
32
import {
@@ -54,6 +55,8 @@ import {
54
55
} from '../../../../utils/helpers' ;
55
56
import { NotificationsStart } from 'opensearch-dashboards/public' ;
56
57
import { match , withRouter } from 'react-router-dom' ;
58
+ import { DateTimeFilter } from '../../../Overview/models/interfaces' ;
59
+ import { ChartContainer } from '../../../../components/Charts/ChartContainer' ;
57
60
58
61
export interface AlertsProps {
59
62
alertService : AlertsService ;
@@ -63,12 +66,12 @@ export interface AlertsProps {
63
66
opensearchService : OpenSearchService ;
64
67
notifications : NotificationsStart ;
65
68
match : match ;
69
+ dateTimeFilter ?: DateTimeFilter ;
70
+ setDateTimeFilter ?: Function ;
66
71
}
67
72
68
73
export interface AlertsState {
69
74
groupBy : string ;
70
- startTime : string ;
71
- endTime : string ;
72
75
recentlyUsedRanges : DurationRange [ ] ;
73
76
selectedItems : AlertItem [ ] ;
74
77
alerts : AlertItem [ ] ;
@@ -77,7 +80,8 @@ export interface AlertsState {
77
80
filteredAlerts : AlertItem [ ] ;
78
81
detectors : { [ key : string ] : Detector } ;
79
82
loading : boolean ;
80
- timeUnit : string ;
83
+ timeUnit : TimeUnit ;
84
+ dateFormat : string ;
81
85
}
82
86
83
87
const groupByOptions = [
@@ -90,25 +94,38 @@ class Alerts extends Component<AlertsProps, AlertsState> {
90
94
91
95
constructor ( props : AlertsProps ) {
92
96
super ( props ) ;
97
+
98
+ const {
99
+ dateTimeFilter = {
100
+ startTime : DEFAULT_DATE_RANGE . start ,
101
+ endTime : DEFAULT_DATE_RANGE . end ,
102
+ } ,
103
+ } = props ;
104
+ const timeUnits = getChartTimeUnit ( dateTimeFilter . startTime , dateTimeFilter . endTime ) ;
93
105
this . state = {
106
+ loading : true ,
94
107
groupBy : 'status' ,
95
- startTime : DEFAULT_DATE_RANGE . start ,
96
- endTime : DEFAULT_DATE_RANGE . end ,
97
108
recentlyUsedRanges : [ DEFAULT_DATE_RANGE ] ,
98
109
selectedItems : [ ] ,
99
110
alerts : [ ] ,
100
111
alertsFiltered : false ,
101
112
filteredAlerts : [ ] ,
102
113
detectors : { } ,
103
- loading : false ,
104
- timeUnit : 'yearmonthdatehoursminutes' ,
114
+ timeUnit : timeUnits . timeUnit ,
115
+ dateFormat : timeUnits . dateFormat ,
105
116
} ;
106
117
}
107
118
108
119
componentDidUpdate ( prevProps : Readonly < AlertsProps > , prevState : Readonly < AlertsState > ) {
120
+ const {
121
+ dateTimeFilter = {
122
+ startTime : DEFAULT_DATE_RANGE . start ,
123
+ endTime : DEFAULT_DATE_RANGE . end ,
124
+ } ,
125
+ } = this . props ;
109
126
const alertsChanged =
110
- prevState . startTime !== this . state . startTime ||
111
- prevState . endTime !== this . state . endTime ||
127
+ prevProps . dateTimeFilter ?. startTime !== dateTimeFilter . startTime ||
128
+ prevProps . dateTimeFilter ?. endTime !== dateTimeFilter . endTime ||
112
129
prevState . alerts !== this . state . alerts ||
113
130
prevState . alerts . length !== this . state . alerts . length ;
114
131
@@ -120,9 +137,15 @@ class Alerts extends Component<AlertsProps, AlertsState> {
120
137
}
121
138
122
139
filterAlerts = ( ) => {
123
- const { alerts, startTime, endTime } = this . state ;
124
- const startMoment = dateMath . parse ( startTime ) ;
125
- const endMoment = dateMath . parse ( endTime ) ;
140
+ const { alerts } = this . state ;
141
+ const {
142
+ dateTimeFilter = {
143
+ startTime : DEFAULT_DATE_RANGE . start ,
144
+ endTime : DEFAULT_DATE_RANGE . end ,
145
+ } ,
146
+ } = this . props ;
147
+ const startMoment = dateMath . parse ( dateTimeFilter . startTime ) ;
148
+ const endMoment = dateMath . parse ( dateTimeFilter . endTime ) ;
126
149
const filteredAlerts = alerts . filter ( ( alert ) =>
127
150
moment ( alert . last_notification_time ) . isBetween ( moment ( startMoment ) , moment ( endMoment ) )
128
151
) ;
@@ -226,10 +249,20 @@ class Alerts extends Component<AlertsProps, AlertsState> {
226
249
severity : parseAlertSeverityToOption ( alert . severity ) ?. label || alert . severity ,
227
250
} ;
228
251
} ) ;
229
-
252
+ const {
253
+ dateTimeFilter = {
254
+ startTime : DEFAULT_DATE_RANGE . start ,
255
+ endTime : DEFAULT_DATE_RANGE . end ,
256
+ } ,
257
+ } = this . props ;
258
+ const chartTimeUnits = getChartTimeUnit ( dateTimeFilter . startTime , dateTimeFilter . endTime ) ;
230
259
return getAlertsVisualizationSpec ( visData , this . state . groupBy , {
231
- timeUnit : this . state . timeUnit ,
232
- dateFormat : getDateFormatByTimeUnit ( this . state . startTime , this . state . endTime ) ,
260
+ timeUnit : chartTimeUnits . timeUnit ,
261
+ dateFormat : chartTimeUnits . dateFormat ,
262
+ domain : getDomainRange (
263
+ [ dateTimeFilter . startTime , dateTimeFilter . endTime ] ,
264
+ chartTimeUnits . timeUnit . unit
265
+ ) ,
233
266
} ) ;
234
267
}
235
268
@@ -313,13 +346,17 @@ class Alerts extends Component<AlertsProps, AlertsState> {
313
346
recentlyUsedRanges = recentlyUsedRanges . slice ( 0 , MAX_RECENTLY_USED_TIME_RANGES ) ;
314
347
const endTime = start === end ? DEFAULT_DATE_RANGE . end : end ;
315
348
316
- const timeUnit = getChartTimeUnit ( start , endTime ) ;
349
+ const timeUnits = getChartTimeUnit ( start , endTime ) ;
317
350
this . setState ( {
318
- startTime : start ,
319
- endTime : endTime ,
320
351
recentlyUsedRanges : recentlyUsedRanges ,
321
- timeUnit ,
352
+ ... timeUnits ,
322
353
} ) ;
354
+
355
+ this . props . setDateTimeFilter &&
356
+ this . props . setDateTimeFilter ( {
357
+ startTime : start ,
358
+ endTime : endTime ,
359
+ } ) ;
323
360
} ;
324
361
325
362
onRefresh = async ( ) => {
@@ -375,11 +412,15 @@ class Alerts extends Component<AlertsProps, AlertsState> {
375
412
filteredAlerts,
376
413
flyoutData,
377
414
loading,
378
- startTime,
379
- endTime,
380
415
recentlyUsedRanges,
381
416
} = this . state ;
382
417
418
+ const {
419
+ dateTimeFilter = {
420
+ startTime : DEFAULT_DATE_RANGE . start ,
421
+ endTime : DEFAULT_DATE_RANGE . end ,
422
+ } ,
423
+ } = this . props ;
383
424
const severities = new Set ( ) ;
384
425
const statuses = new Set ( ) ;
385
426
filteredAlerts . forEach ( ( alert ) => {
@@ -455,8 +496,8 @@ class Alerts extends Component<AlertsProps, AlertsState> {
455
496
</ EuiFlexItem >
456
497
< EuiFlexItem grow = { false } >
457
498
< EuiSuperDatePicker
458
- start = { startTime }
459
- end = { endTime }
499
+ start = { dateTimeFilter . startTime }
500
+ end = { dateTimeFilter . endTime }
460
501
recentlyUsedRanges = { recentlyUsedRanges }
461
502
isLoading = { loading }
462
503
onTimeChange = { this . onTimeChange }
@@ -474,7 +515,7 @@ class Alerts extends Component<AlertsProps, AlertsState> {
474
515
{ this . createGroupByControl ( ) }
475
516
</ EuiFlexItem >
476
517
< EuiFlexItem >
477
- < div id = " alerts-view" > </ div >
518
+ < ChartContainer chartViewId = { ' alerts-view' } loading = { loading } / >
478
519
</ EuiFlexItem >
479
520
</ EuiFlexGroup >
480
521
</ EuiPanel >
@@ -491,6 +532,7 @@ class Alerts extends Component<AlertsProps, AlertsState> {
491
532
search = { search }
492
533
sorting = { sorting }
493
534
selection = { selection }
535
+ loading = { loading }
494
536
/>
495
537
</ ContentPanel >
496
538
</ EuiFlexItem >
0 commit comments