1- import { createRequestActionTypes , createApiRequest } from '../utils' ;
2- import '../../services/api' ;
31import _ from 'lodash' ;
42import { createSelector } from 'reselect' ;
5- import { calcUptime } from '../../utils' ;
3+
4+ import { calcUptime , calcUptimeInSeconds } from '../../utils' ;
65import { getUsage } from '../../utils/storage' ;
6+ import { NodesUptimeFilterValues } from '../../utils/nodes' ;
77import { getPDiskType } from '../../utils/pdisk' ;
8+ import { HOUR_IN_SECONDS } from '../../utils/constants' ;
9+ import '../../services/api' ;
10+
11+ import { createRequestActionTypes , createApiRequest } from '../utils' ;
812
913export const VisibleEntities = {
1014 All : 'All' ,
@@ -29,13 +33,15 @@ const SET_FILTER = 'storage/SET_FILTER';
2933const SET_USAGE_FILTER = 'storage/SET_USAGE_FILTER' ;
3034const SET_VISIBLE_GROUPS = 'storage/SET_VISIBLE_GROUPS' ;
3135const SET_STORAGE_TYPE = 'storage/SET_STORAGE_TYPE' ;
36+ const SET_NODES_UPTIME_FILTER = 'storage/SET_NODES_UPTIME_FILTER' ;
3237
3338const initialState = {
3439 loading : true ,
3540 wasLoaded : false ,
3641 filter : '' ,
3742 usageFilter : [ ] ,
3843 visible : VisibleEntities . Missing ,
44+ nodesUptimeFilter : NodesUptimeFilterValues . All ,
3945 type : StorageTypes . groups ,
4046} ;
4147
@@ -93,6 +99,13 @@ const storage = (state = initialState, action) => {
9399 error : undefined ,
94100 } ;
95101 }
102+
103+ case SET_NODES_UPTIME_FILTER : {
104+ return {
105+ ...state ,
106+ nodesUptimeFilter : action . data ,
107+ } ;
108+ }
96109 case SET_STORAGE_TYPE : {
97110 return {
98111 ...state ,
@@ -149,6 +162,13 @@ export function setVisibleEntities(value) {
149162 } ;
150163}
151164
165+ export function setNodesUptimeFilter ( value ) {
166+ return {
167+ type : SET_NODES_UPTIME_FILTER ,
168+ data : value ,
169+ } ;
170+ }
171+
152172export const getStoragePools = ( state ) => state . storage . data ?. StoragePools ;
153173export const getStoragePoolsGroupsCount = ( state ) => ( {
154174 total : state . storage . data ?. TotalGroups || 0 ,
@@ -162,6 +182,7 @@ export const getStorageNodesCount = (state) => ({
162182export const getStorageFilter = ( state ) => state . storage . filter ;
163183export const getUsageFilter = ( state ) => state . storage . usageFilter ;
164184export const getVisibleEntities = ( state ) => state . storage . visible ;
185+ export const getNodesUptimeFilter = ( state ) => state . storage . nodesUptimeFilter ;
165186export const getStorageType = ( state ) => state . storage . type ;
166187export const getNodesObject = ( state ) =>
167188 _ . reduce (
@@ -337,12 +358,32 @@ const filterByUsage = (entities, usage) => {
337358 } ) ;
338359} ;
339360
361+ export const filterByUptime = ( nodes = [ ] , nodesUptimeFilter ) => {
362+ if ( nodesUptimeFilter === NodesUptimeFilterValues . All ) {
363+ return nodes ;
364+ }
365+ return nodes . filter ( ( { StartTime} ) => {
366+ return ! StartTime || calcUptimeInSeconds ( StartTime ) < HOUR_IN_SECONDS ;
367+ } ) ;
368+ } ;
369+
340370export const getFilteredEntities = createSelector (
341- [ getStorageFilter , getUsageFilter , getStorageType , getVisibleEntitiesList ] ,
342- ( textFilter , usageFilter , type , entities ) => {
371+ [
372+ getStorageFilter ,
373+ getUsageFilter ,
374+ getStorageType ,
375+ getNodesUptimeFilter ,
376+ getVisibleEntitiesList ,
377+ ] ,
378+ ( textFilter , usageFilter , type , nodesUptimeFilter , entities ) => {
343379 let result = entities ;
344380 result = filterByText ( result , type , textFilter ) ;
345381 result = filterByUsage ( result , usageFilter ) ;
382+
383+ if ( type === StorageTypes . nodes ) {
384+ result = filterByUptime ( result , nodesUptimeFilter ) ;
385+ }
386+
346387 return result ;
347388 } ,
348389) ;
0 commit comments