Skip to content

Commit 91c41da

Browse files
fix: implement --jobs-list and --jobs-cancel CLI flags
The -L (--jobs-list) and -X (--jobs-cancel) flags were defined in CLIArgs but never handled in the runner. This adds the missing implementation.
1 parent 9d6d178 commit 91c41da

1 file changed

Lines changed: 77 additions & 0 deletions

File tree

cli/runner.go

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ import (
1414
"time"
1515

1616
"github.com/bravo1goingdark/mailgrid/config"
17+
"github.com/bravo1goingdark/mailgrid/database"
1718
"github.com/bravo1goingdark/mailgrid/email"
1819
"github.com/bravo1goingdark/mailgrid/internal/types"
20+
"github.com/bravo1goingdark/mailgrid/logger"
1921
"github.com/bravo1goingdark/mailgrid/monitor"
2022
"github.com/bravo1goingdark/mailgrid/offset"
2123
"github.com/bravo1goingdark/mailgrid/parser"
@@ -51,6 +53,16 @@ func Run(args CLIArgs) error {
5153
}
5254
}()
5355

56+
// Handle --jobs-list flag
57+
if args.ListJobs {
58+
return listScheduledJobs(args.EnvPath)
59+
}
60+
61+
// Handle --jobs-cancel flag
62+
if args.CancelJobID != "" {
63+
return cancelScheduledJob(args.EnvPath, args.CancelJobID)
64+
}
65+
5466
// Run scheduler dispatcher in foreground
5567
if args.SchedulerRun {
5668
// Load SMTP config for the scheduler
@@ -460,3 +472,68 @@ func Run(args CLIArgs) error {
460472

461473
return nil
462474
}
475+
476+
// listScheduledJobs lists all scheduled jobs from the database
477+
func listScheduledJobs(envPath string) error {
478+
if envPath == "" {
479+
return fmt.Errorf("config file required (--env)")
480+
}
481+
482+
db, err := database.NewDB("mailgrid.db")
483+
if err != nil {
484+
return fmt.Errorf("failed to open database: %w", err)
485+
}
486+
defer db.Close()
487+
488+
log := logger.New("scheduler")
489+
sched := scheduler.NewScheduler(db, log)
490+
491+
jobs, err := sched.ListJobs()
492+
if err != nil {
493+
return fmt.Errorf("failed to list jobs: %w", err)
494+
}
495+
496+
if len(jobs) == 0 {
497+
fmt.Println("No scheduled jobs found.")
498+
return nil
499+
}
500+
501+
fmt.Printf("Found %d job(s):\n\n", len(jobs))
502+
fmt.Printf("%-30s %-15s %-20s %s\n", "JOB ID", "STATUS", "RUN AT", "CREATED AT")
503+
fmt.Println("--------------------------------------------------------------------")
504+
505+
for _, job := range jobs {
506+
runAt := job.RunAt.Format("2006-01-02 15:04:05")
507+
createdAt := job.CreatedAt.Format("2006-01-02 15:04:05")
508+
fmt.Printf("%-30s %-15s %-20s %s\n", job.ID, job.Status, runAt, createdAt)
509+
}
510+
511+
return nil
512+
}
513+
514+
// cancelScheduledJob cancels a scheduled job by ID
515+
func cancelScheduledJob(envPath, jobID string) error {
516+
if envPath == "" {
517+
return fmt.Errorf("config file required (--env)")
518+
}
519+
if jobID == "" {
520+
return fmt.Errorf("job ID required (--jobs-cancel)")
521+
}
522+
523+
db, err := database.NewDB("mailgrid.db")
524+
if err != nil {
525+
return fmt.Errorf("failed to open database: %w", err)
526+
}
527+
defer db.Close()
528+
529+
log := logger.New("scheduler")
530+
sched := scheduler.NewScheduler(db, log)
531+
532+
success := sched.CancelJob(jobID)
533+
if !success {
534+
return fmt.Errorf("job not found or could not be cancelled: %s", jobID)
535+
}
536+
537+
fmt.Printf("Job %s cancelled successfully.\n", jobID)
538+
return nil
539+
}

0 commit comments

Comments
 (0)