This commit is contained in:
2025-05-23 13:44:18 +04:00
parent 79d66e4b6b
commit b2eb9d3116
5 changed files with 476 additions and 5480 deletions

View File

@@ -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,