[server][cli] filter job list

This commit is contained in:
Abhishek Shroff
2025-06-23 10:02:25 +05:30
parent b16dd56d43
commit d4bff2a1ea
3 changed files with 63 additions and 25 deletions
+3 -8
View File
@@ -161,7 +161,7 @@ func deleteSequences(db db.Handler, jobID int32) error {
return err
}
func ListJobs(db db.Handler, only, exclude []JobStatus) ([]JobInfo, error) {
func listJobs(db db.Handler, only, exclude []JobStatus) ([]JobInfo, error) {
qb := strings.Builder{}
qb.WriteString("SELECT id, status, attempts, kind, args FROM jobs")
if len(only) > 0 {
@@ -182,7 +182,7 @@ func ListJobs(db db.Handler, only, exclude []JobStatus) ([]JobInfo, error) {
}
}
func GetJobDetails(db db.Handler, id int32) (JobDetails, error) {
func getJobDetails(db db.Handler, id int32) (JobDetails, error) {
const q = `SELECT id, status, attempts, created_at, scheduled_at, kind, args, errors,
(SELECT COALESCE(JSONB_AGG(ROW_TO_JSON(row)), '[]'::JSONB)
FROM (SELECT j.id, j.status, j.attempts, j.kind, j.args FROM jobs j JOIN job_dependencies d ON j.id = d.job_id WHERE d.dependency = $1::INTEGER) row) AS dependents,
@@ -192,13 +192,8 @@ func GetJobDetails(db db.Handler, id int32) (JobDetails, error) {
if rows, err := db.Query(q, id); err != nil {
return JobDetails{}, err
} else if job, err := pgx.CollectExactlyOneRow(rows, scanJobRow); err != nil {
if errors.Is(err, pgx.ErrNoRows) {
err = ErrJobNotFound
}
return JobDetails{}, err
} else {
return job, nil
return pgx.CollectExactlyOneRow(rows, scanJobRow)
}
}
+18 -4
View File
@@ -10,6 +10,7 @@ import (
"codeberg.org/shroff/phylum/server/internal/db"
"codeberg.org/shroff/phylum/server/internal/pubsub"
"github.com/jackc/pgx/v5"
"github.com/rs/zerolog"
)
@@ -130,12 +131,25 @@ func (c *Client) Triage() (int, error) {
}
}
}
func (c *Client) ListJobs(only, exclude []JobStatus) ([]JobInfo, error) {
c.Triage()
return listJobs(c.db, only, exclude)
}
func (c *Client) GetJobDetails(id int32) (JobDetails, error) {
c.Triage()
if job, err := getJobDetails(c.db, id); err != nil {
if errors.Is(err, pgx.ErrNoRows) {
err = ErrJobNotFound
}
return job, err
} else {
return job, nil
}
}
func (c *Client) RunJob(ctx context.Context, id int32) error {
if _, err := c.Triage(); err != nil {
return err
}
if job, err := GetJobDetails(c.db, id); err != nil {
if job, err := c.GetJobDetails(id); err != nil {
return err
} else {
if job.Status == JobStatusQueued {