add monitoring stats fetch

This commit is contained in:
smanylov
2026-04-01 11:24:47 +07:00
parent b89e5b4c6b
commit dd483cb628
5 changed files with 91 additions and 3 deletions
+44
View File
@@ -45,3 +45,47 @@ export async function setMonitoring(fileId: string, monitoringType: string) {
}; };
} }
} }
export interface MonitoringStats {
total_searches: number;
searches_by_status: {
processing: number;
completed: number;
failed: number;
total: number;
};
recent_searches: any[];
}
export async function fetchMonitoringStats(): Promise<MonitoringStats | null> {
const token = await getSessionData('token');
try {
const response = await fetch(`${API_BASE_URL}/api/v1/data`, {
method: 'POST',
body: JSON.stringify({
version: 1,
msg_id: 30011,
message_body: {
token: token
}
}),
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
});
if (response.ok) {
const parsed = await response.json();
console.log(parsed);
if (parsed?.message_body?.searches_by_status) {
return parsed.message_body;
}
}
return null;
} catch (error) {
return null
}
}
@@ -0,0 +1,29 @@
import { useQuery } from '@tanstack/react-query';
import { fetchMonitoringStats } from '@/app/actions/monitoringActions';
interface MonitoringStats {
total_searches: number;
searches_by_status: {
processing: number;
completed: number;
failed: number;
total: number;
};
recent_searches: any[];
}
export const useMonitoringStats = () => {
return useQuery({
queryKey: ['monitoringStats'],
queryFn: () => {
return fetchMonitoringStats()
},
select: (data: MonitoringStats | null) => {
if (!data) {
return null
}
return data;
},
retry: false
});
};
+1 -1
View File
@@ -11,7 +11,7 @@ export default function UserUsage() {
useEffect(() => { useEffect(() => {
console.log('log from user-usage'); console.log('log from user-usage');
console.log(userData); console.log(userData);
}, [userData]) }, [userData]);
return ( return (
<div className="usage-stats"> <div className="usage-stats">
+6 -1
View File
@@ -4,11 +4,13 @@ import { useUserFilesInfo } from '@/app/hooks/react-query/useUserFilesInfo';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { useEffect } from 'react'; import { useEffect } from 'react';
import { useViolationStatistic } from '@/app/hooks/react-query/useViolationStatistic'; import { useViolationStatistic } from '@/app/hooks/react-query/useViolationStatistic';
import {useMonitoringStats} from '@/app/hooks/react-query/useMonitoringStats';
export default function FinalSummary() { export default function FinalSummary() {
const t = useTranslations('Global'); const t = useTranslations('Global');
const { data: filesInfo, isLoading, isError, error } = useUserFilesInfo(); const { data: filesInfo, isLoading, isError, error } = useUserFilesInfo();
const { data: violationStatistic } = useViolationStatistic(); const { data: violationStatistic } = useViolationStatistic();
const { data: monitoringStats } = useMonitoringStats();
return ( return (
<div className="final-summary"> <div className="final-summary">
@@ -23,7 +25,10 @@ export default function FinalSummary() {
<div className="summary-stats"> <div className="summary-stats">
<div className="summary-stat"> <div className="summary-stat">
{/* <div className="summary-stat-icon">🔍</div> */} {/* <div className="summary-stat-icon">🔍</div> */}
<div className="summary-stat-value">{filesInfo?.total.check ? filesInfo?.total.check : 0}</div> <div className="summary-stat-value">
{monitoringStats?.total_searches ? monitoringStats?.total_searches : 0}
{/* {filesInfo?.total.check ? filesInfo?.total.check : 0} */}
</div>
<div className="summary-stat-label"> <div className="summary-stat-label">
{t('total-number-of-checks')} {t('total-number-of-checks')}
</div> </div>
+11 -1
View File
@@ -4,11 +4,18 @@ import { useTranslations } from 'next-intl';
import { useUserFilesInfo } from '@/app/hooks/react-query/useUserFilesInfo'; import { useUserFilesInfo } from '@/app/hooks/react-query/useUserFilesInfo';
import { IconDocument, IconSearch, IconWarning, IconGraph } from '@/app/ui/icons/icons'; import { IconDocument, IconSearch, IconWarning, IconGraph } from '@/app/ui/icons/icons';
import { useViolationStatistic } from '@/app/hooks/react-query/useViolationStatistic'; import { useViolationStatistic } from '@/app/hooks/react-query/useViolationStatistic';
import { useMonitoringStats } from '@/app/hooks/react-query/useMonitoringStats';
import { useEffect } from 'react';
export default function ReportsInfo() { export default function ReportsInfo() {
const t = useTranslations("Global"); const t = useTranslations("Global");
const { data: filesInfo, isLoading, isError, error } = useUserFilesInfo(); const { data: filesInfo, isLoading, isError, error } = useUserFilesInfo();
const { data: violationStatistic } = useViolationStatistic(); const { data: violationStatistic } = useViolationStatistic();
const { data: monitoringStats } = useMonitoringStats();
useEffect(() => {
console.log(monitoringStats)
}, [monitoringStats]);
return ( return (
<> <>
@@ -39,7 +46,10 @@ export default function ReportsInfo() {
<IconSearch /> <IconSearch />
</div> </div>
</div> </div>
<div className="stat-value">{filesInfo?.total.check ? filesInfo?.total.check : 0}</div> <div className="stat-value">
{/* {filesInfo?.total.check ? filesInfo?.total.check : 0} */}
{monitoringStats?.total_searches ? monitoringStats?.total_searches : 0}
</div>
<div className="stat-label">{t('monitoring')}</div> <div className="stat-label">{t('monitoring')}</div>
</div> </div>