Fixes and enhancements for calculate metrics script

This commit is contained in:
2025-01-12 18:13:05 -05:00
parent 4d3f956a03
commit 35105f9474
3 changed files with 337 additions and 60 deletions

View File

@@ -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>