Skip to content

Commit c37c525

Browse files
MytsVmaany
authored andcommitted
Make the dashboard fetch only the latest rules
1 parent 7eb485c commit c37c525

File tree

1 file changed

+35
-24
lines changed

1 file changed

+35
-24
lines changed

src/component-library/pages/Dashboard/Dashboard.tsx

+35-24
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
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';
1414

1515
const AccountHeading = () => {
1616
const querySiteHeader = async () => {
@@ -34,7 +34,7 @@ const AccountHeading = () => {
3434
retry: false,
3535
});
3636

37-
if (isHeaderFetching) return <LoadingSpinner />;
37+
if (isHeaderFetching) return <LoadingSpinner/>;
3838

3939
if (headerError || !header?.activeAccount) {
4040
return (
@@ -46,16 +46,16 @@ const AccountHeading = () => {
4646

4747
return (
4848
<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}/>
5151
</div>
5252
);
5353
};
5454

5555
const UsageView = () => {
5656
const usageBuffer = useRef<RSEAccountUsageViewModel[] | undefined>([]);
5757
const [usages, setUsages] = useState<RSEAccountUsageViewModel[]>();
58-
const { start, stop, error, status } = useStreamReader<RSEAccountUsageViewModel>();
58+
const {start, stop, error, status} = useStreamReader<RSEAccountUsageViewModel>();
5959

6060
useEffect(() => {
6161
// TODO: handle error view models
@@ -80,18 +80,29 @@ const UsageView = () => {
8080

8181
const isLoading = (!usages && !error) || status === StreamingStatus.RUNNING;
8282

83-
return <TopStorageUsageWidget usages={usages} isLoading={isLoading} errorMessage={error?.message} />;
83+
return <TopStorageUsageWidget usages={usages} isLoading={isLoading} errorMessage={error?.message}/>;
8484
};
8585

8686
const RulesView = () => {
8787
const rulesBuffer = useRef<RuleViewModel[] | undefined>([]);
8888
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+
};
9097

9198
useEffect(() => {
9299
// TODO: handle error view models
100+
const params = new URLSearchParams({
101+
scope: '*',
102+
created_after: getCreatedAfterDate(),
103+
});
93104
start({
94-
url: '/api/feature/list-rules?scope=*',
105+
url: '/api/feature/list-rules?' + params.toString(),
95106
onData: data => {
96107
if (!rulesBuffer.current) {
97108
rulesBuffer.current = data;
@@ -111,17 +122,17 @@ const RulesView = () => {
111122

112123
const isLoading = (!rules && !error) || status === StreamingStatus.RUNNING;
113124

114-
return <TopRulesWidget rules={rules} isLoading={isLoading} errorMessage={error?.message} />;
125+
return <TopRulesWidget rules={rules} isLoading={isLoading} errorMessage={error?.message}/>;
115126
};
116127

117128
export const Dashboard = () => {
118129
return (
119130
<div className="flex flex-col space-y-3 w-full">
120131
<div className="h-14">
121-
<AccountHeading />
132+
<AccountHeading/>
122133
</div>
123-
<RulesView />
124-
<UsageView />
134+
<RulesView/>
135+
<UsageView/>
125136
</div>
126137
);
127138
};

0 commit comments

Comments
 (0)