Ctrl K
ComunidadGuías…

internal/jobs/status.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package jobs

import (
	"encoding/json"

	"github.com/riverqueue/river/rivertype"
)

const (
	StateRunning  = "running"
	StateDone     = "done"
	StateFailed   = "failed"
	StateCanceled = "canceled"
)

// UIState maps a job's River state to the dashboard vocabulary; a job waiting
// for a retry counts as running.
func UIState(job *rivertype.JobRow) string {
	switch job.State {
	case rivertype.JobStateCompleted:
		return StateDone
	case rivertype.JobStateCancelled:
		return StateCanceled
	case rivertype.JobStateDiscarded:
		return StateFailed
	default:
		return StateRunning
	}
}

// LastError is empty until the job is discarded: earlier errors only mean a
// retry is coming.
func LastError(job *rivertype.JobRow) string {
	if job.State != rivertype.JobStateDiscarded || len(job.Errors) == 0 {
		return ""
	}
	return job.Errors[len(job.Errors)-1].Error
}

func CancelRequested(job *rivertype.JobRow) bool {
	if job.State != rivertype.JobStateRunning {
		return false
	}
	var metadata struct {
		CancelAttemptedAt *string `json:"cancel_attempted_at"`
	}
	if err := json.Unmarshal(job.Metadata, &metadata); err != nil {
		return false
	}
	return metadata.CancelAttemptedAt != nil
}