This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/models"
|
||||
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/storage"
|
||||
@@ -103,3 +104,29 @@ func (r *JobRepository) GetJobByID(ctx context.Context, jid int64) (models.Job,
|
||||
job.Stdin = stdinVal
|
||||
return job, nil
|
||||
}
|
||||
|
||||
type JobMetrics struct {
|
||||
Total int
|
||||
Success int
|
||||
Failed int
|
||||
Pending int
|
||||
}
|
||||
|
||||
// GetJobMetrics returns job success metrics for jobs updated since the given time.
|
||||
// A successful job has status == 0, failed has status != 0, pending has status == 0 with empty stdout/stderr.
|
||||
func (r *JobRepository) GetJobMetrics(ctx context.Context, since time.Time) (JobMetrics, error) {
|
||||
var m JobMetrics
|
||||
err := r.DB.QueryRowContext(ctx,
|
||||
`SELECT
|
||||
COUNT(*),
|
||||
SUM(CASE WHEN status = 0 AND (stdout != '' OR stderr != '') THEN 1 ELSE 0 END),
|
||||
SUM(CASE WHEN status != 0 THEN 1 ELSE 0 END),
|
||||
SUM(CASE WHEN status = 0 AND stdout = '' AND stderr = '' THEN 1 ELSE 0 END)
|
||||
FROM jobs WHERE updated_at >= ?`,
|
||||
since,
|
||||
).Scan(&m.Total, &m.Success, &m.Failed, &m.Pending)
|
||||
if err != nil {
|
||||
return JobMetrics{}, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user