import React, { useState, useEffect } from 'react'; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { Loader2, Database, Trash2, AlertTriangle, Globe, Server } from "lucide-react"; import { useToast } from "@/hooks/use-toast"; import { useLanguage } from "@/contexts/LanguageContext"; import { authService } from "@/services/authService"; import { dataRetentionService } from "@/services/dataRetentionService"; interface RetentionSettings { uptimeRetentionDays: number; serverRetentionDays: number; } const DataRetentionSettings = () => { const { t } = useLanguage(); const { toast } = useToast(); const [settings, setSettings] = useState({ uptimeRetentionDays: 30, serverRetentionDays: 30 }); const [isLoading, setIsLoading] = useState(true); const [isSaving, setIsSaving] = useState(false); const [isUptimeShrinking, setIsUptimeShrinking] = useState(false); const [isServerShrinking, setIsServerShrinking] = useState(false); const [isFullShrinking, setIsFullShrinking] = useState(false); const [lastCleanup, setLastCleanup] = useState(null); // Check if user is super admin const currentUser = authService.getCurrentUser(); const isSuperAdmin = currentUser?.role === "superadmin"; useEffect(() => { if (isSuperAdmin) { loadSettings(); } }, [isSuperAdmin]); const loadSettings = async () => { try { setIsLoading(true); const result = await dataRetentionService.getRetentionSettings(); if (result) { setSettings({ uptimeRetentionDays: result.uptimeRetentionDays || 30, serverRetentionDays: result.serverRetentionDays || 30 }); setLastCleanup(result.lastCleanup); } } catch (error) { toast({ title: "Error", description: "Failed to load retention settings", variant: "destructive", }); } finally { setIsLoading(false); } }; const handleSave = async () => { try { setIsSaving(true); await dataRetentionService.updateRetentionSettings(settings); toast({ title: "Settings saved", description: "Data retention settings have been updated", }); } catch (error) { toast({ title: "Error", description: "Failed to save retention settings", variant: "destructive", }); } finally { setIsSaving(false); } }; const handleUptimeShrink = async () => { try { setIsUptimeShrinking(true); const result = await dataRetentionService.manualUptimeCleanup(); toast({ title: "Uptime cleanup completed", description: `Deleted ${result.deletedRecords} old uptime records`, }); // Reload settings to get updated last cleanup time await loadSettings(); } catch (error) { toast({ title: "Error", description: "Failed to perform uptime data cleanup", variant: "destructive", }); } finally { setIsUptimeShrinking(false); } }; const handleServerShrink = async () => { try { setIsServerShrinking(true); const result = await dataRetentionService.manualServerCleanup(); toast({ title: "Server cleanup completed", description: `Deleted ${result.deletedRecords} old server records`, }); // Reload settings to get updated last cleanup time await loadSettings(); } catch (error) { toast({ title: "Error", description: "Failed to perform server data cleanup", variant: "destructive", }); } finally { setIsServerShrinking(false); } }; const handleFullShrink = async () => { try { setIsFullShrinking(true); const result = await dataRetentionService.manualCleanup(); toast({ title: "Database cleanup completed", description: `Deleted ${result.deletedRecords} old records`, }); // Reload settings to get updated last cleanup time await loadSettings(); } catch (error) { toast({ title: "Error", description: "Failed to perform database cleanup", variant: "destructive", }); } finally { setIsFullShrinking(false); } }; // Show permission notice for admin users if (!isSuperAdmin) { return (
{t("dataRetention", "settings")} Permission Notice: As an admin user, you do not have access to data retention settings. These settings can only be accessed and modified by Super Admins.
); } if (isLoading) { return (
Loading retention settings...
); } return (
Data Retention Settings Configure how long monitoring data is kept in the system
{ const value = e.target.value; if (value === '' || isNaN(Number(value))) { return; } setSettings(prev => ({ ...prev, uptimeRetentionDays: Number(value) })); }} className="mt-1" />

Service uptime and incident data older than this will be automatically deleted

{ const value = e.target.value; if (value === '' || isNaN(Number(value))) { return; } setSettings(prev => ({ ...prev, serverRetentionDays: Number(value) })); }} className="mt-1" />

Server metrics and process data older than this will be automatically deleted

{lastCleanup && ( Last automatic cleanup: {new Date(lastCleanup).toLocaleString()} )}
); }; export default DataRetentionSettings;