Fixes and enhancements for calculate metrics script
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { useState } from 'react';
|
||||
import { useState, useEffect } from 'react';
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
|
||||
import { Progress } from "@/components/ui/progress";
|
||||
@@ -61,6 +61,77 @@ export function DataManagement() {
|
||||
const [isCalculatingMetrics, setIsCalculatingMetrics] = useState(false);
|
||||
const [metricsProgress, setMetricsProgress] = useState<ImportProgress | null>(null);
|
||||
|
||||
// Helper to check if any operation is running
|
||||
const isAnyOperationRunning = () => {
|
||||
return isUpdating || isImporting || isResetting || isResettingMetrics || isCalculatingMetrics;
|
||||
};
|
||||
|
||||
// Check status on mount
|
||||
useEffect(() => {
|
||||
const checkStatus = async () => {
|
||||
try {
|
||||
// Check calculate-metrics status first
|
||||
const metricsResponse = await fetch(`${config.apiUrl}/csv/calculate-metrics/status`, {
|
||||
credentials: 'include'
|
||||
});
|
||||
const metricsData = await metricsResponse.json();
|
||||
|
||||
if (metricsData.active && metricsData.progress) {
|
||||
setIsCalculatingMetrics(true);
|
||||
setMetricsProgress(metricsData.progress);
|
||||
connectToEventSource('calculate-metrics');
|
||||
return;
|
||||
} else {
|
||||
setIsCalculatingMetrics(false);
|
||||
setMetricsProgress(null);
|
||||
}
|
||||
|
||||
// Check other operations
|
||||
const response = await fetch(`${config.apiUrl}/csv/status`, {
|
||||
credentials: 'include'
|
||||
});
|
||||
const data = await response.json();
|
||||
|
||||
if (data.active && data.progress) {
|
||||
if (data.progress?.operation?.toLowerCase().includes('import')) {
|
||||
setIsImporting(true);
|
||||
setImportProgress(data.progress);
|
||||
connectToEventSource('import');
|
||||
} else if (data.progress?.operation?.toLowerCase().includes('update')) {
|
||||
setIsUpdating(true);
|
||||
setUpdateProgress(data.progress);
|
||||
connectToEventSource('update');
|
||||
} else if (data.progress?.operation?.toLowerCase().includes('reset')) {
|
||||
setIsResetting(true);
|
||||
setResetProgress(data.progress);
|
||||
connectToEventSource('reset');
|
||||
}
|
||||
} else {
|
||||
// Reset all states if no active process
|
||||
setIsImporting(false);
|
||||
setIsUpdating(false);
|
||||
setIsResetting(false);
|
||||
setImportProgress(null);
|
||||
setUpdateProgress(null);
|
||||
setResetProgress(null);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error checking status:', error);
|
||||
// Reset all states on error
|
||||
setIsCalculatingMetrics(false);
|
||||
setIsImporting(false);
|
||||
setIsUpdating(false);
|
||||
setIsResetting(false);
|
||||
setMetricsProgress(null);
|
||||
setImportProgress(null);
|
||||
setUpdateProgress(null);
|
||||
setResetProgress(null);
|
||||
}
|
||||
};
|
||||
|
||||
checkStatus();
|
||||
}, []);
|
||||
|
||||
// Helper to connect to event source
|
||||
const connectToEventSource = (type: 'update' | 'import' | 'reset' | 'reset-metrics' | 'calculate-metrics') => {
|
||||
console.log(`Setting up EventSource for ${type}...`);
|
||||
@@ -541,7 +612,7 @@ export function DataManagement() {
|
||||
<Button
|
||||
className="flex-1"
|
||||
onClick={handleUpdateCSV}
|
||||
disabled={isUpdating || isImporting}
|
||||
disabled={isAnyOperationRunning()}
|
||||
>
|
||||
{isUpdating ? (
|
||||
<>
|
||||
@@ -581,7 +652,7 @@ export function DataManagement() {
|
||||
<Button
|
||||
className="flex-1"
|
||||
onClick={handleImportCSV}
|
||||
disabled={isImporting || isUpdating || isResetting}
|
||||
disabled={isAnyOperationRunning()}
|
||||
>
|
||||
{isImporting ? (
|
||||
<>
|
||||
@@ -626,7 +697,7 @@ export function DataManagement() {
|
||||
<Button
|
||||
className="flex-1"
|
||||
onClick={handleCalculateMetrics}
|
||||
disabled={isCalculatingMetrics || isImporting || isUpdating || isResetting || isResettingMetrics}
|
||||
disabled={isAnyOperationRunning()}
|
||||
>
|
||||
{isCalculatingMetrics ? (
|
||||
<>
|
||||
@@ -668,7 +739,7 @@ export function DataManagement() {
|
||||
<Button
|
||||
variant="destructive"
|
||||
className="flex-1 min-w-[140px]"
|
||||
disabled={isResetting || isImporting || isUpdating || isResettingMetrics}
|
||||
disabled={isAnyOperationRunning()}
|
||||
>
|
||||
{isResetting ? (
|
||||
<>
|
||||
@@ -699,7 +770,7 @@ export function DataManagement() {
|
||||
<Button
|
||||
variant="destructive"
|
||||
className="flex-1 min-w-[140px]"
|
||||
disabled={isResetting || isImporting || isUpdating || isResettingMetrics}
|
||||
disabled={isAnyOperationRunning()}
|
||||
>
|
||||
Reset Metrics Only
|
||||
</Button>
|
||||
|
||||
Reference in New Issue
Block a user