@@ -39,6 +39,7 @@ import {
3939 onIncidentFiltersSelect ,
4040 parseUrlParams ,
4141 updateBrowserUrl ,
42+ DAY_MS ,
4243} from './utils' ;
4344import { groupAlertsForTable , convertToAlerts } from './processAlerts' ;
4445import { CompressArrowsAltIcon , CompressIcon , FilterIcon } from '@patternfly/react-icons' ;
@@ -231,52 +232,54 @@ const IncidentsPage = () => {
231232 } , [ incidentsActiveFilters . days ] ) ;
232233
233234 useEffect ( ( ) => {
234- ( async ( ) => {
235- const currentTime = incidentsLastRefreshTime ;
236- Promise . all (
237- timeRanges . map ( async ( range ) => {
238- const response = await fetchDataForIncidentsAndAlerts (
239- safeFetch ,
240- range ,
241- createAlertsQuery ( incidentForAlertProcessing ) ,
242- ) ;
243- return response . data . result ;
244- } ) ,
245- )
246- . then ( ( results ) => {
247- const prometheusResults = results . flat ( ) ;
248- const alerts = convertToAlerts (
249- prometheusResults ,
250- incidentForAlertProcessing ,
251- currentTime ,
252- ) ;
235+ if ( incidentForAlertProcessing . length === 0 ) {
236+ return ;
237+ }
238+
239+ const currentTime = incidentsLastRefreshTime ;
240+
241+ // Always fetch 15 days of alert data so firstTimestamp is computed from full history
242+ const fetchTimeRanges = getIncidentsTimeRanges ( 15 * DAY_MS , currentTime ) ;
243+
244+ Promise . all (
245+ fetchTimeRanges . map ( async ( range ) => {
246+ const response = await fetchDataForIncidentsAndAlerts (
247+ safeFetch ,
248+ range ,
249+ createAlertsQuery ( incidentForAlertProcessing ) ,
250+ ) ;
251+ return response . data . result ;
252+ } ) ,
253+ )
254+ . then ( ( alertsResults ) => {
255+ const prometheusResults = alertsResults . flat ( ) ;
256+ const alerts = convertToAlerts (
257+ prometheusResults ,
258+ incidentForAlertProcessing ,
259+ currentTime ,
260+ daysSpan ,
261+ ) ;
262+ dispatch (
263+ setAlertsData ( {
264+ alertsData : alerts ,
265+ } ) ,
266+ ) ;
267+ if ( rules && alerts ) {
253268 dispatch (
254- setAlertsData ( {
255- alertsData : alerts ,
269+ setAlertsTableData ( {
270+ alertsTableData : groupAlertsForTable ( alerts , rules ) ,
256271 } ) ,
257272 ) ;
258- if ( rules && alerts ) {
259- dispatch (
260- setAlertsTableData ( {
261- alertsTableData : groupAlertsForTable ( alerts , rules ) ,
262- } ) ,
263- ) ;
264- }
265- if ( ! isEmpty ( filteredData ) ) {
266- dispatch ( setAlertsAreLoading ( { alertsAreLoading : false } ) ) ;
267- } else {
268- dispatch ( setAlertsAreLoading ( { alertsAreLoading : true } ) ) ;
269- }
270- } )
271- . catch ( ( err ) => {
272- // eslint-disable-next-line no-console
273- console . log ( err ) ;
274-
275- dispatch ( setAlertsAreLoading ( { alertsAreLoading : false } ) ) ;
276- setLoadError ( err ) ;
277- } ) ;
278- } ) ( ) ;
279- } , [ incidentForAlertProcessing ] ) ;
273+ }
274+ dispatch ( setAlertsAreLoading ( { alertsAreLoading : false } ) ) ;
275+ } )
276+ . catch ( ( err ) => {
277+ // eslint-disable-next-line no-console
278+ console . error ( err ) ;
279+ dispatch ( setAlertsAreLoading ( { alertsAreLoading : false } ) ) ;
280+ setLoadError ( err ) ;
281+ } ) ;
282+ } , [ incidentForAlertProcessing , rules , daysSpan ] ) ;
280283
281284 useEffect ( ( ) => {
282285 if ( ! isInitialized ) return ;
@@ -293,30 +296,34 @@ const IncidentsPage = () => {
293296 ? incidentsActiveFilters . days [ 0 ] . split ( ' ' ) [ 0 ] + 'd'
294297 : '' ,
295298 ) ;
296- const calculatedTimeRanges = getIncidentsTimeRanges ( daysDuration , currentTime ) ;
297299
298300 const isGroupSelected = ! ! selectedGroupId ;
299301 const incidentsQuery = isGroupSelected
300302 ? `cluster_health_components_map{group_id='${ selectedGroupId } '}`
301303 : 'cluster_health_components_map' ;
302304
305+ // Always fetch 15 days of data so firstTimestamp is computed from full history
306+ const fetchTimeRanges = getIncidentsTimeRanges ( 15 * DAY_MS , currentTime ) ;
307+
303308 Promise . all (
304- calculatedTimeRanges . map ( async ( range ) => {
309+ fetchTimeRanges . map ( async ( range ) => {
305310 const response = await fetchDataForIncidentsAndAlerts ( safeFetch , range , incidentsQuery ) ;
306311 return response . data . result ;
307312 } ) ,
308313 )
309- . then ( ( results ) => {
310- const prometheusResults = results . flat ( ) ;
311- const incidents = convertToIncidents ( prometheusResults , currentTime ) ;
314+ . then ( ( incidentsResults ) => {
315+ const prometheusResults = incidentsResults . flat ( ) ;
316+ const incidents = convertToIncidents ( prometheusResults , currentTime , daysDuration ) ;
312317
313318 // Update the raw, unfiltered incidents state
314319 dispatch ( setIncidents ( { incidents } ) ) ;
315320
321+ const filteredData = filterIncident ( incidentsActiveFilters , incidents ) ;
322+
316323 // Filter the incidents and dispatch
317324 dispatch (
318325 setFilteredIncidentsData ( {
319- filteredIncidentsData : filterIncident ( incidentsActiveFilters , incidents ) ,
326+ filteredIncidentsData : filteredData ,
320327 } ) ,
321328 ) ;
322329
0 commit comments