...
This commit is contained in:
@@ -15,8 +15,8 @@ type JobDisplayInfo struct {
|
||||
Topic string `json:"topic"`
|
||||
Status string `json:"status"`
|
||||
SessionKey string `json:"sessionkey"`
|
||||
HeroScript string `json:"heroscript"`
|
||||
RhaiScript string `json:"rhaiscript"`
|
||||
Params string `json:"params"`
|
||||
ParamsType string `json:"paramstype"`
|
||||
Result string `json:"result"`
|
||||
Error string `json:"error"`
|
||||
TimeScheduled int64 `json:"time_scheduled"`
|
||||
@@ -27,15 +27,17 @@ type JobDisplayInfo struct {
|
||||
|
||||
// JobHandler handles job-related page routes
|
||||
type JobHandler struct {
|
||||
client *herojobs.Client
|
||||
client *herojobs.RedisClient
|
||||
logger *log.Logger
|
||||
}
|
||||
|
||||
// NewJobHandler creates a new job handler with the provided socket path
|
||||
func NewJobHandler(socketPath string, logger *log.Logger) (*JobHandler, error) {
|
||||
client, err := herojobs.NewClient(socketPath)
|
||||
func NewJobHandler(redisAddr string, logger *log.Logger) (*JobHandler, error) {
|
||||
// Assuming SSL is false as per README example herojobs.NewRedisClient("localhost:6379", false)
|
||||
// This might need to be configurable later.
|
||||
client, err := herojobs.NewRedisClient(redisAddr, false)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to create HeroJobs client: %w", err)
|
||||
return nil, fmt.Errorf("failed to create HeroJobs Redis client: %w", err)
|
||||
}
|
||||
|
||||
return &JobHandler{
|
||||
@@ -50,7 +52,7 @@ func (h *JobHandler) RegisterRoutes(app *fiber.App) {
|
||||
jobs := app.Group("/jobs")
|
||||
jobs.Get("/", h.getJobsPage)
|
||||
jobs.Get("/list", h.getJobsList)
|
||||
|
||||
|
||||
// Register the same routes under /admin/jobs for consistency
|
||||
adminJobs := app.Group("/admin/jobs")
|
||||
adminJobs.Get("/", h.getJobsPage)
|
||||
@@ -59,18 +61,13 @@ func (h *JobHandler) RegisterRoutes(app *fiber.App) {
|
||||
|
||||
// getJobsPage renders the jobs page
|
||||
func (h *JobHandler) getJobsPage(c *fiber.Ctx) error {
|
||||
// Check if we can connect to the HeroJobs server
|
||||
var warning string
|
||||
if err := h.client.Connect(); err != nil {
|
||||
warning = "Could not connect to HeroJobs server: " + err.Error()
|
||||
h.logger.Printf("Warning: %s", warning)
|
||||
} else {
|
||||
h.client.Close()
|
||||
}
|
||||
|
||||
// Assuming h.client (RedisClient) is valid if NewJobHandler succeeded.
|
||||
// The client is connected on creation. A Ping method could be used here for a health check if available.
|
||||
// The previous connect/close logic per-request is removed.
|
||||
var warning string // This will be empty unless a new check (e.g., Ping) sets it.
|
||||
return c.Render("admin/jobs", fiber.Map{
|
||||
"title": "Jobs",
|
||||
"warning": warning,
|
||||
"warning": warning, // warning will be empty for now
|
||||
"error": "",
|
||||
})
|
||||
}
|
||||
@@ -100,20 +97,18 @@ func (h *JobHandler) getJobsList(c *fiber.Ctx) error {
|
||||
|
||||
// getJobsData gets job data from the HeroJobs server
|
||||
func (h *JobHandler) getJobsData(circleID, topic string) ([]JobDisplayInfo, error) {
|
||||
// Connect to the HeroJobs server
|
||||
if err := h.client.Connect(); err != nil {
|
||||
return nil, fmt.Errorf("failed to connect to HeroJobs server: %w", err)
|
||||
}
|
||||
defer h.client.Close()
|
||||
// Assuming h.client (RedisClient) is already connected (established by NewJobHandler).
|
||||
// It should not be closed here as it's a long-lived client.
|
||||
// Connect() and Close() calls per-request are removed.
|
||||
|
||||
// If circleID and topic are not provided, try to list all jobs
|
||||
if circleID == "" && topic == "" {
|
||||
// Try to get some default jobs
|
||||
defaultCircles := []string{"default", "system"}
|
||||
defaultTopics := []string{"default", "system"}
|
||||
|
||||
|
||||
var allJobs []JobDisplayInfo
|
||||
|
||||
|
||||
// Try each combination
|
||||
for _, circle := range defaultCircles {
|
||||
for _, t := range defaultTopics {
|
||||
@@ -122,22 +117,22 @@ func (h *JobHandler) getJobsData(circleID, topic string) ([]JobDisplayInfo, erro
|
||||
h.logger.Printf("Could not list jobs for circle=%s, topic=%s: %v", circle, t, err)
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
for _, jobID := range jobIDs {
|
||||
job, err := h.client.GetJob(jobID)
|
||||
if err != nil {
|
||||
h.logger.Printf("Error getting job %s: %v", jobID, err)
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
allJobs = append(allJobs, JobDisplayInfo{
|
||||
JobID: job.JobID,
|
||||
JobID: fmt.Sprintf("%d", job.JobID),
|
||||
CircleID: job.CircleID,
|
||||
Topic: job.Topic,
|
||||
Status: string(job.Status),
|
||||
SessionKey: job.SessionKey,
|
||||
HeroScript: job.HeroScript,
|
||||
RhaiScript: job.RhaiScript,
|
||||
Params: job.Params,
|
||||
ParamsType: string(job.ParamsType),
|
||||
Result: job.Result,
|
||||
Error: job.Error,
|
||||
TimeScheduled: job.TimeScheduled,
|
||||
@@ -148,7 +143,7 @@ func (h *JobHandler) getJobsData(circleID, topic string) ([]JobDisplayInfo, erro
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return allJobs, nil
|
||||
} else if circleID == "" || topic == "" {
|
||||
// If only one of the parameters is provided, we can't list jobs
|
||||
@@ -171,13 +166,13 @@ func (h *JobHandler) getJobsData(circleID, topic string) ([]JobDisplayInfo, erro
|
||||
}
|
||||
|
||||
jobInfo := JobDisplayInfo{
|
||||
JobID: job.JobID,
|
||||
JobID: fmt.Sprintf("%d", job.JobID),
|
||||
CircleID: job.CircleID,
|
||||
Topic: job.Topic,
|
||||
Status: string(job.Status),
|
||||
SessionKey: job.SessionKey,
|
||||
HeroScript: job.HeroScript,
|
||||
RhaiScript: job.RhaiScript,
|
||||
Params: job.Params,
|
||||
ParamsType: string(job.ParamsType),
|
||||
Result: job.Result,
|
||||
Error: job.Error,
|
||||
TimeScheduled: job.TimeScheduled,
|
||||
|
Reference in New Issue
Block a user