mirror of
https://github.com/GlueOps/autoglue.git
synced 2026-02-15 13:50:06 +01:00
initial jobs dashboard
This commit is contained in:
66
internal/handlers/jobs/kpi.go
Normal file
66
internal/handlers/jobs/kpi.go
Normal file
@@ -0,0 +1,66 @@
|
||||
package jobs
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/glueops/autoglue/internal/db/models"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type KPI struct {
|
||||
RunningNow int64
|
||||
DueNow int64
|
||||
ScheduledFuture int64
|
||||
Succeeded24h int64
|
||||
Failed24h int64
|
||||
Retryable int64
|
||||
}
|
||||
|
||||
func LoadKPI(db *gorm.DB) (KPI, error) {
|
||||
var k KPI
|
||||
now := time.Now()
|
||||
dayAgo := now.Add(-24 * time.Hour)
|
||||
|
||||
if err := db.Model(&models.Job{}).
|
||||
Where("status = ?", "running").
|
||||
Count(&k.RunningNow).Error; err != nil {
|
||||
return k, err
|
||||
}
|
||||
|
||||
if err := db.Model(&models.Job{}).
|
||||
Where("status IN ?", []string{"queued", "scheduled", "pending"}).
|
||||
Where("scheduled_at > ?", now).
|
||||
Count(&k.ScheduledFuture).Error; err != nil {
|
||||
return k, err
|
||||
}
|
||||
|
||||
if err := db.Model(&models.Job{}).
|
||||
Where("status IN ?", []string{"queued", "scheduled", "pending"}).
|
||||
Where("scheduled_at <= ?", now).
|
||||
Count(&k.DueNow).Error; err != nil {
|
||||
return k, err
|
||||
}
|
||||
|
||||
if err := db.Model(&models.Job{}).
|
||||
Where("status = ?", "success").
|
||||
Where("updated_at >= ?", dayAgo).
|
||||
Count(&k.Succeeded24h).Error; err != nil {
|
||||
return k, err
|
||||
}
|
||||
|
||||
if err := db.Model(&models.Job{}).
|
||||
Where("status = ?", "failed").
|
||||
Where("updated_at >= ?", dayAgo).
|
||||
Count(&k.Failed24h).Error; err != nil {
|
||||
return k, err
|
||||
}
|
||||
|
||||
if err := db.Model(&models.Job{}).
|
||||
Where("status = ?", "failed").
|
||||
Where("retry_count < max_retry").
|
||||
Count(&k.Retryable).Error; err != nil {
|
||||
return k, err
|
||||
}
|
||||
|
||||
return k, nil
|
||||
}
|
||||
Reference in New Issue
Block a user