@@ -2,6 +2,7 @@ package scheduler
22
33import (
44 "context"
5+ "encoding/json"
56 "fmt"
67 "time"
78
@@ -16,7 +17,7 @@ import (
1617
1718const (
1819 columnsToStore = `job_name, namespace_name, project_name, scheduled_at, start_time, end_time, status, sla_definition, sla_alert`
19- jobRunColumns = `id, ` + columnsToStore
20+ jobRunColumns = `id, ` + columnsToStore + `, monitoring`
2021)
2122
2223type JobRunRepository struct {
@@ -40,6 +41,8 @@ type jobRun struct {
4041
4142 CreatedAt time.Time
4243 UpdatedAt time.Time
44+
45+ Monitoring json.RawMessage
4346}
4447
4548func (j jobRun ) toJobRun () (* scheduler.JobRun , error ) {
@@ -51,14 +54,21 @@ func (j jobRun) toJobRun() (*scheduler.JobRun, error) {
5154 if err != nil {
5255 return nil , errors .AddErrContext (err , scheduler .EntityJobRun , "invalid job run state in database" )
5356 }
57+ var monitoring map [string ]any
58+ if j .Monitoring != nil {
59+ if err := json .Unmarshal (j .Monitoring , & monitoring ); err != nil {
60+ return nil , errors .AddErrContext (err , scheduler .EntityJobRun , "invalid monitoring values in database" )
61+ }
62+ }
5463 return & scheduler.JobRun {
55- ID : j .ID ,
56- JobName : scheduler .JobName (j .JobName ),
57- Tenant : t ,
58- State : state ,
59- StartTime : j .StartTime ,
60- SLAAlert : j .SLAAlert ,
61- EndTime : j .EndTime ,
64+ ID : j .ID ,
65+ JobName : scheduler .JobName (j .JobName ),
66+ Tenant : t ,
67+ State : state ,
68+ StartTime : j .StartTime ,
69+ SLAAlert : j .SLAAlert ,
70+ EndTime : j .EndTime ,
71+ Monitoring : monitoring ,
6272 }, nil
6373}
6474
@@ -67,7 +77,7 @@ func (j *JobRunRepository) GetByID(ctx context.Context, id scheduler.JobRunID) (
6777 getJobRunByID := `SELECT ` + jobRunColumns + ` FROM job_run where id = $1`
6878 err := j .db .QueryRow (ctx , getJobRunByID , id .UUID ()).
6979 Scan (& jr .ID , & jr .JobName , & jr .NamespaceName , & jr .ProjectName , & jr .ScheduledAt , & jr .StartTime , & jr .EndTime ,
70- & jr .Status , & jr .SLADefinition , & jr .SLAAlert )
80+ & jr .Status , & jr .SLADefinition , & jr .SLAAlert , & jr . Monitoring )
7181 if err != nil {
7282 return nil , err
7383 }
@@ -79,7 +89,7 @@ func (j *JobRunRepository) GetByScheduledAt(ctx context.Context, t tenant.Tenant
7989 getJobRunByID := `SELECT ` + jobRunColumns + `, created_at FROM job_run j where project_name = $1 and namespace_name = $2 and job_name = $3 and scheduled_at = $4 order by created_at desc limit 1`
8090 err := j .db .QueryRow (ctx , getJobRunByID , t .ProjectName (), t .NamespaceName (), jobName , scheduledAt ).
8191 Scan (& jr .ID , & jr .JobName , & jr .NamespaceName , & jr .ProjectName , & jr .ScheduledAt , & jr .StartTime , & jr .EndTime ,
82- & jr .Status , & jr .SLADefinition , & jr .SLAAlert , & jr .CreatedAt )
92+ & jr .Status , & jr .SLADefinition , & jr .SLAAlert , & jr .Monitoring , & jr . CreatedAt )
8393
8494 if err != nil {
8595 if errors .Is (err , pgx .ErrNoRows ) {
@@ -110,6 +120,16 @@ func (j *JobRunRepository) UpdateSLA(ctx context.Context, slaObjects []*schedule
110120 return errors .WrapIfErr (scheduler .EntityJobRun , "unable to update SLA" , err )
111121}
112122
123+ func (j * JobRunRepository ) UpdateMonitoring (ctx context.Context , jobRunID uuid.UUID , monitoringValues map [string ]any ) error {
124+ monitoringBytes , err := json .Marshal (monitoringValues )
125+ if err != nil {
126+ return errors .Wrap (scheduler .EntityJobRun , "error marshalling monitoring values" , err )
127+ }
128+ query := `update job_run set monitoring = $1 where id = $2`
129+ _ , err = j .db .Exec (ctx , query , monitoringBytes , jobRunID )
130+ return errors .WrapIfErr (scheduler .EntityJobRun , "cannot update monitoring" , err )
131+ }
132+
113133func (j * JobRunRepository ) Create (ctx context.Context , t tenant.Tenant , jobName scheduler.JobName , scheduledAt time.Time , slaDefinitionInSec int64 ) error {
114134 insertJobRun := `INSERT INTO job_run (` + columnsToStore + `, created_at, updated_at) values ($1, $2, $3, $4, NOW(), TIMESTAMP '3000-01-01 00:00:00', $5, $6, FALSE, NOW(), NOW())`
115135 _ , err := j .db .Exec (ctx , insertJobRun , jobName , t .NamespaceName (), t .ProjectName (), scheduledAt , scheduler .StateRunning , slaDefinitionInSec )
0 commit comments