diff --git a/backend/src/main/java/com/sysadmin/monitor/MonitorApplication.java b/backend/src/main/java/com/sysadmin/monitor/MonitorApplication.java index 3c4c4ad..e72d655 100644 --- a/backend/src/main/java/com/sysadmin/monitor/MonitorApplication.java +++ b/backend/src/main/java/com/sysadmin/monitor/MonitorApplication.java @@ -2,8 +2,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication +@EnableScheduling public class MonitorApplication { public static void main(String[] args) { diff --git a/backend/src/main/java/com/sysadmin/monitor/repository/SystemMetricRepository.java b/backend/src/main/java/com/sysadmin/monitor/repository/SystemMetricRepository.java index 4c8e04e..029d56c 100644 --- a/backend/src/main/java/com/sysadmin/monitor/repository/SystemMetricRepository.java +++ b/backend/src/main/java/com/sysadmin/monitor/repository/SystemMetricRepository.java @@ -4,9 +4,12 @@ import com.sysadmin.monitor.entity.SystemMetric; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.util.List; @Repository @@ -16,9 +19,13 @@ public interface SystemMetricRepository extends JpaRepository findByHostnameOrderByTimestampDesc(String hostname, Pageable pageable); + @Modifying + @Transactional + long deleteByTimestampBefore(LocalDateTime limite); + @Query("SELECT DISTINCT m.hostname FROM SystemMetric m ORDER BY m.hostname") List findDistinctHostnames(); @Query("SELECT new com.sysadmin.monitor.dto.MetricSummaryDTO(m.hostname, AVG(m.cpuUsage), MAX(m.cpuUsage), AVG(m.ramUsage), MAX(m.ramUsage), AVG(m.diskUsage), MAX(m.diskUsage)) FROM SystemMetric m GROUP BY m.hostname ORDER BY m.hostname") List findSummaryByHost(); -} \ No newline at end of file +} diff --git a/backend/src/main/java/com/sysadmin/monitor/service/MetricService.java b/backend/src/main/java/com/sysadmin/monitor/service/MetricService.java index be38bf1..9e7af53 100644 --- a/backend/src/main/java/com/sysadmin/monitor/service/MetricService.java +++ b/backend/src/main/java/com/sysadmin/monitor/service/MetricService.java @@ -31,6 +31,9 @@ public class MetricService { @Value("${monitor.alerts.ram:90}") private double ramThreshold; + @Value("${monitor.retention.days:7}") + private int retentionDays; + public SystemMetric saveMetric(SystemMetricDTO dto) { SystemMetric metric = SystemMetric.builder() @@ -119,6 +122,15 @@ public List getAlerts() { return alerts; } + public long deleteOldMetrics() { + LocalDateTime limite = LocalDateTime.now().minusDays(retentionDays); + long borradas = metricRepository.deleteByTimestampBefore(limite); + + log.info("Retencion - borradas {} metricas anteriores a {}", borradas, limite); + + return borradas; + } + public List getHostnames() { return metricRepository.findDistinctHostnames(); } diff --git a/backend/src/main/java/com/sysadmin/monitor/task/RetentionTask.java b/backend/src/main/java/com/sysadmin/monitor/task/RetentionTask.java new file mode 100644 index 0000000..e693456 --- /dev/null +++ b/backend/src/main/java/com/sysadmin/monitor/task/RetentionTask.java @@ -0,0 +1,18 @@ +package com.sysadmin.monitor.task; + +import com.sysadmin.monitor.service.MetricService; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class RetentionTask { + + private final MetricService metricService; + + @Scheduled(cron = "${monitor.retention.cron:0 0 4 * * *}") + public void limpiarMetricasAntiguas() { + metricService.deleteOldMetrics(); + } +} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index 2ce99ff..fbbab98 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -10,3 +10,7 @@ spring.jpa.properties.hibernate.format_sql=true # umbrales de alerta en porcentaje monitor.alerts.cpu=85 monitor.alerts.ram=90 + +# retencion: borramos las metricas de mas de 7 dias cada noche a las 4 +monitor.retention.days=7 +monitor.retention.cron=0 0 4 * * *