fix(aria): fix stats 500 — use native SQL cast for threat_severity enum
CD - Develop / build-and-deploy (push) Failing after 52s

PostgreSQL named enum types don't accept implicit varchar casts, causing
the derived JPA query findBySeverityOrderByDetectedAtDesc to fail with
'operator does not exist: threat_severity = character varying'.

Replace the count calls in getStats() with a native query that explicitly
casts: CAST(:severity AS threat_severity). Also remove the unused since24h
and since7d variables.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-15 15:36:53 -04:00
parent 68cee9bd90
commit 1e7625db8b
2 changed files with 9 additions and 11 deletions
@@ -10,12 +10,12 @@ import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Map;
@RestController
@@ -50,16 +50,9 @@ public class ThreatEventController {
@GetMapping("/stats")
@PreAuthorize("hasAnyRole('MSP_ADMIN','BCOS_ADMIN')")
public ResponseEntity<Map<String, Object>> getStats() {
Instant since24h = Instant.now().minus(24, ChronoUnit.HOURS);
Instant since7d = Instant.now().minus(7, ChronoUnit.DAYS);
long totalEvents = eventRepository.count();
long critical24h = eventRepository.findBySeverityOrderByDetectedAtDesc(
ThreatEvent.ThreatSeverity.CRITICAL,
PageRequest.of(0, Integer.MAX_VALUE)).getTotalElements();
long high24h = eventRepository.findBySeverityOrderByDetectedAtDesc(
ThreatEvent.ThreatSeverity.HIGH,
PageRequest.of(0, Integer.MAX_VALUE)).getTotalElements();
long critical24h = eventRepository.countBySeverityNative("CRITICAL");
long high24h = eventRepository.countBySeverityNative("HIGH");
long activeIocs = iocRepository.findByActiveTrue().size();
long activeSequences = sequenceAlertRepository.countByResolvedAtIsNull();
@@ -4,6 +4,8 @@ import com.hiveops.aria.entity.ThreatEvent;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.time.Instant;
@@ -22,5 +24,8 @@ public interface ThreatEventRepository extends JpaRepository<ThreatEvent, Long>
Page<ThreatEvent> findBySeverityOrderByDetectedAtDesc(ThreatEvent.ThreatSeverity severity, Pageable pageable);
@Query(value = "SELECT COUNT(*) FROM threat_event WHERE severity = CAST(:severity AS threat_severity)", nativeQuery = true)
long countBySeverityNative(@Param("severity") String severity);
Page<ThreatEvent> findAllByOrderByDetectedAtDesc(Pageable pageable);
}