fix: Complete AgentHealth improvements and build fixes

- Update Update scanner default from 15min to 12 hours (backend)
- Add 1 week and 2 week frequency options (frontend)
- Rename AgentScanners to AgentHealth component
- Add OS-aware package manager badges (APT, DNF, Windows/Winget, Docker)
- Fix all build errors (types, imports, storage metrics)
- Add useMemo optimization for enabled/auto-run counts
This commit is contained in:
Fimeg
2025-12-17 21:08:38 -05:00
parent 9effa967a1
commit a90692f1d8
11 changed files with 207 additions and 827 deletions

View File

@@ -4,7 +4,6 @@ import (
"context"
"database/sql"
"fmt"
"time"
"github.com/Fimeg/RedFlag/aggregator-server/internal/models"
"github.com/google/uuid"
@@ -136,7 +135,7 @@ func (q *StorageMetricsQueries) GetLatestStorageMetrics(ctx context.Context, age
// GetStorageMetricsSummary returns summary statistics for an agent
func (q *StorageMetricsQueries) GetStorageMetricsSummary(ctx context.Context, agentID uuid.UUID) (map[string]interface{}, error) {
query := `
SELECT
SELECT
COUNT(*) as total_disks,
COUNT(CASE WHEN severity = 'critical' THEN 1 END) as critical_disks,
COUNT(CASE WHEN severity = 'important' THEN 1 END) as important_disks,
@@ -149,19 +148,38 @@ func (q *StorageMetricsQueries) GetStorageMetricsSummary(ctx context.Context, ag
AND created_at >= NOW() - INTERVAL '24 hours'
`
var summary map[string]interface{}
var (
totalDisks int
criticalDisks int
importantDisks int
avgUsedPercent sql.NullFloat64
maxUsedPercent sql.NullFloat64
firstCollectedAt sql.NullTime
lastCollectedAt sql.NullTime
)
err := q.db.QueryRowContext(ctx, query, agentID).Scan(
&summary["total_disks"],
&summary["critical_disks"],
&summary["important_disks"],
&summary["avg_used_percent"],
&summary["max_used_percent"],
&summary["first_collected_at"],
&summary["last_collected_at"],
&totalDisks,
&criticalDisks,
&importantDisks,
&avgUsedPercent,
&maxUsedPercent,
&firstCollectedAt,
&lastCollectedAt,
)
if err != nil {
return nil, fmt.Errorf("failed to get storage metrics summary: %w", err)
}
summary := map[string]interface{}{
"total_disks": totalDisks,
"critical_disks": criticalDisks,
"important_disks": importantDisks,
"avg_used_percent": avgUsedPercent.Float64,
"max_used_percent": maxUsedPercent.Float64,
"first_collected_at": firstCollectedAt.Time,
"last_collected_at": lastCollectedAt.Time,
}
return summary, nil
}
}