mirror of
https://github.com/acaloiaro/neoq
synced 2026-07-22 02:36:55 +00:00
add in progress job status
This commit is contained in:
parent
4dea09d446
commit
a575976aa7
2 changed files with 32 additions and 13 deletions
|
|
@ -325,6 +325,17 @@ func (s *SqliteBackend) handleJob(ctx context.Context, jobID string) (err error)
|
||||||
|
|
||||||
ctx = withJobContext(ctx, job)
|
ctx = withJobContext(ctx, job)
|
||||||
|
|
||||||
|
s.dbMutex.Lock()
|
||||||
|
err = s.updateJob(ctx, jobErr, internal.JobStatusInProgress)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, context.Canceled) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = fmt.Errorf("error updating job status: %w", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s.dbMutex.Unlock()
|
||||||
|
|
||||||
// execute the queue handler of this job
|
// execute the queue handler of this job
|
||||||
jobErr = handler.Exec(ctx, h)
|
jobErr = handler.Exec(ctx, h)
|
||||||
|
|
||||||
|
|
@ -341,12 +352,11 @@ func (s *SqliteBackend) handleJob(ctx context.Context, jobID string) (err error)
|
||||||
|
|
||||||
ctx = context.WithValue(ctx, txCtxVarKey, tx)
|
ctx = context.WithValue(ctx, txCtxVarKey, tx)
|
||||||
|
|
||||||
err = s.updateJob(ctx, jobErr)
|
err = s.updateJob(ctx, jobErr, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, context.Canceled) {
|
if errors.Is(err, context.Canceled) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = fmt.Errorf("error updating job status: %w", err)
|
err = fmt.Errorf("error updating job status: %w", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -394,16 +404,9 @@ func withJobContext(ctx context.Context, j *jobs.Job) context.Context {
|
||||||
return context.WithValue(ctx, internal.JobCtxVarKey, j)
|
return context.WithValue(ctx, internal.JobCtxVarKey, j)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SqliteBackend) updateJob(ctx context.Context, jobErr error) (err error) {
|
func (s *SqliteBackend) updateJob(ctx context.Context, jobErr error, status string) (err error) {
|
||||||
status := internal.JobStatusProcessed
|
|
||||||
errMsg := ""
|
errMsg := ""
|
||||||
|
|
||||||
if jobErr != nil {
|
|
||||||
s.logger.Error("job failed", slog.Any("job_error", jobErr))
|
|
||||||
status = internal.JobStatusFailed
|
|
||||||
errMsg = jobErr.Error()
|
|
||||||
}
|
|
||||||
|
|
||||||
var job *jobs.Job
|
var job *jobs.Job
|
||||||
if job, err = jobs.FromContext(ctx); err != nil {
|
if job, err = jobs.FromContext(ctx); err != nil {
|
||||||
return fmt.Errorf("error getting job from context: %w", err)
|
return fmt.Errorf("error getting job from context: %w", err)
|
||||||
|
|
@ -419,6 +422,21 @@ func (s *SqliteBackend) updateJob(ctx context.Context, jobErr error) (err error)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// In progress job
|
||||||
|
if len(status) != 0 {
|
||||||
|
qstr := "UPDATE neoq_jobs SET status = $1, error = $2 WHERE id = $3"
|
||||||
|
_, err = tx.ExecContext(ctx, qstr, status, errMsg, job.ID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
status = internal.JobStatusProcessed
|
||||||
|
|
||||||
|
if jobErr != nil {
|
||||||
|
s.logger.Error("job failed", slog.Any("job_error", jobErr))
|
||||||
|
status = internal.JobStatusFailed
|
||||||
|
errMsg = jobErr.Error()
|
||||||
|
}
|
||||||
|
|
||||||
var runAfter time.Time
|
var runAfter time.Time
|
||||||
if status == internal.JobStatusFailed {
|
if status == internal.JobStatusFailed {
|
||||||
runAfter = internal.CalculateBackoff(job.Retries)
|
runAfter = internal.CalculateBackoff(job.Retries)
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,10 @@ import (
|
||||||
type contextKey struct{}
|
type contextKey struct{}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
JobStatusNew = "new"
|
JobStatusNew = "new"
|
||||||
JobStatusProcessed = "processed"
|
JobStatusInProgress = "in progress"
|
||||||
JobStatusFailed = "failed"
|
JobStatusProcessed = "processed"
|
||||||
|
JobStatusFailed = "failed"
|
||||||
)
|
)
|
||||||
|
|
||||||
var JobCtxVarKey contextKey
|
var JobCtxVarKey contextKey
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue