1
- import { useQuery } from '@tanstack/react-query' ;
2
- import { SiteHeaderViewModel } from '@/lib/infrastructure/data/view-model/site-header' ;
3
- import { getSiteHeader } from '@/app/(rucio)/queries' ;
4
- import { LoadingSpinner } from '@/component-library/atoms/loading/LoadingSpinner' ;
5
- import { Heading } from '@/component-library/atoms/misc/Heading' ;
6
- import { WarningField } from '@/component-library/features/fields/WarningField' ;
7
- import { AccountRoleBadge } from '@/component-library/features/badges/account/AccountRoleBadge' ;
8
- import { TopRulesWidget } from '@/component-library/pages/Dashboard/widgets/TopRulesWidget' ;
9
- import { useEffect , useRef , useState } from 'react' ;
10
- import { RuleViewModel } from '@/lib/infrastructure/data/view-model/rule' ;
11
- import useStreamReader , { StreamingStatus } from '@/lib/infrastructure/hooks/useStreamReader' ;
12
- import { RSEAccountUsageViewModel } from '@/lib/infrastructure/data/view-model/rse' ;
13
- import { TopStorageUsageWidget } from '@/component-library/pages/Dashboard/widgets/TopStorageUsageWidget' ;
1
+ import { useQuery } from '@tanstack/react-query' ;
2
+ import { SiteHeaderViewModel } from '@/lib/infrastructure/data/view-model/site-header' ;
3
+ import { getSiteHeader } from '@/app/(rucio)/queries' ;
4
+ import { LoadingSpinner } from '@/component-library/atoms/loading/LoadingSpinner' ;
5
+ import { Heading } from '@/component-library/atoms/misc/Heading' ;
6
+ import { WarningField } from '@/component-library/features/fields/WarningField' ;
7
+ import { AccountRoleBadge } from '@/component-library/features/badges/account/AccountRoleBadge' ;
8
+ import { TopRulesWidget } from '@/component-library/pages/Dashboard/widgets/TopRulesWidget' ;
9
+ import { useEffect , useRef , useState } from 'react' ;
10
+ import { RuleViewModel } from '@/lib/infrastructure/data/view-model/rule' ;
11
+ import useStreamReader , { StreamingStatus } from '@/lib/infrastructure/hooks/useStreamReader' ;
12
+ import { RSEAccountUsageViewModel } from '@/lib/infrastructure/data/view-model/rse' ;
13
+ import { TopStorageUsageWidget } from '@/component-library/pages/Dashboard/widgets/TopStorageUsageWidget' ;
14
14
15
15
const AccountHeading = ( ) => {
16
16
const querySiteHeader = async ( ) => {
@@ -34,7 +34,7 @@ const AccountHeading = () => {
34
34
retry : false ,
35
35
} ) ;
36
36
37
- if ( isHeaderFetching ) return < LoadingSpinner /> ;
37
+ if ( isHeaderFetching ) return < LoadingSpinner /> ;
38
38
39
39
if ( headerError || ! header ?. activeAccount ) {
40
40
return (
@@ -46,16 +46,16 @@ const AccountHeading = () => {
46
46
47
47
return (
48
48
< div className = "flex space-x-2 items-center" >
49
- < Heading text = { `Hello, ${ header . activeAccount . rucioAccount } !` } />
50
- < AccountRoleBadge className = "text-xl" value = { header . activeAccount . role } />
49
+ < Heading text = { `Hello, ${ header . activeAccount . rucioAccount } !` } />
50
+ < AccountRoleBadge className = "text-xl" value = { header . activeAccount . role } />
51
51
</ div >
52
52
) ;
53
53
} ;
54
54
55
55
const UsageView = ( ) => {
56
56
const usageBuffer = useRef < RSEAccountUsageViewModel [ ] | undefined > ( [ ] ) ;
57
57
const [ usages , setUsages ] = useState < RSEAccountUsageViewModel [ ] > ( ) ;
58
- const { start, stop, error, status } = useStreamReader < RSEAccountUsageViewModel > ( ) ;
58
+ const { start, stop, error, status} = useStreamReader < RSEAccountUsageViewModel > ( ) ;
59
59
60
60
useEffect ( ( ) => {
61
61
// TODO: handle error view models
@@ -80,18 +80,29 @@ const UsageView = () => {
80
80
81
81
const isLoading = ( ! usages && ! error ) || status === StreamingStatus . RUNNING ;
82
82
83
- return < TopStorageUsageWidget usages = { usages } isLoading = { isLoading } errorMessage = { error ?. message } /> ;
83
+ return < TopStorageUsageWidget usages = { usages } isLoading = { isLoading } errorMessage = { error ?. message } /> ;
84
84
} ;
85
85
86
86
const RulesView = ( ) => {
87
87
const rulesBuffer = useRef < RuleViewModel [ ] | undefined > ( [ ] ) ;
88
88
const [ rules , setRules ] = useState < RuleViewModel [ ] > ( ) ;
89
- const { start, stop, error, status } = useStreamReader < RuleViewModel > ( ) ;
89
+ const { start, stop, error, status} = useStreamReader < RuleViewModel > ( ) ;
90
+
91
+ const getCreatedAfterDate = ( ) => {
92
+ // Only the rules that were created less than 15 days ago should get loaded
93
+ const now = new Date ( ) ;
94
+ const fifteenDaysAgo = new Date ( now . setDate ( now . getDate ( ) - 15 ) ) ;
95
+ return fifteenDaysAgo . toISOString ( ) ;
96
+ } ;
90
97
91
98
useEffect ( ( ) => {
92
99
// TODO: handle error view models
100
+ const params = new URLSearchParams ( {
101
+ scope : '*' ,
102
+ created_after : getCreatedAfterDate ( ) ,
103
+ } ) ;
93
104
start ( {
94
- url : '/api/feature/list-rules?scope=*' ,
105
+ url : '/api/feature/list-rules?' + params . toString ( ) ,
95
106
onData : data => {
96
107
if ( ! rulesBuffer . current ) {
97
108
rulesBuffer . current = data ;
@@ -111,17 +122,17 @@ const RulesView = () => {
111
122
112
123
const isLoading = ( ! rules && ! error ) || status === StreamingStatus . RUNNING ;
113
124
114
- return < TopRulesWidget rules = { rules } isLoading = { isLoading } errorMessage = { error ?. message } /> ;
125
+ return < TopRulesWidget rules = { rules } isLoading = { isLoading } errorMessage = { error ?. message } /> ;
115
126
} ;
116
127
117
128
export const Dashboard = ( ) => {
118
129
return (
119
130
< div className = "flex flex-col space-y-3 w-full" >
120
131
< div className = "h-14" >
121
- < AccountHeading />
132
+ < AccountHeading />
122
133
</ div >
123
- < RulesView />
124
- < UsageView />
134
+ < RulesView />
135
+ < UsageView />
125
136
</ div >
126
137
) ;
127
138
} ;
0 commit comments