77 lines
1.4 KiB
Go
77 lines
1.4 KiB
Go
package task
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
|
|
cron "github.com/robfig/cron/v3"
|
|
)
|
|
|
|
var Reporter chan *Report
|
|
var started chan struct{}
|
|
var wg sync.WaitGroup
|
|
var quit chan struct{}
|
|
|
|
func init() {
|
|
Reporter = make(chan *Report)
|
|
started = make(chan struct{}, 1)
|
|
quit = make(chan struct{}, 1)
|
|
}
|
|
|
|
type Receiver func(*Report)
|
|
|
|
var ReportReceiver Receiver = func(r *Report) {}
|
|
|
|
type Report struct {
|
|
// Entry
|
|
Next time.Time `json:"next"`
|
|
Prev time.Time `json:"prev"`
|
|
Entry cron.EntryID `json:"entry_id"`
|
|
|
|
// Task
|
|
Name string `json:"name"`
|
|
ID string `json:"id"`
|
|
Description string `json:"description"`
|
|
Group string `json:"grp"`
|
|
|
|
// _task
|
|
Spec string `json:"spec"`
|
|
Once bool `json:"once"`
|
|
Args []interface{} `json:"args"`
|
|
Carry interface{} `json:"carry"`
|
|
|
|
// Report
|
|
Error error `json:"error,omitempty"`
|
|
}
|
|
|
|
type Profile struct {
|
|
Scheduled []*Report `json:"scheduled"`
|
|
}
|
|
|
|
func GetProfile() *Profile {
|
|
p := &Profile{}
|
|
entries := c.Entries()
|
|
for i := 0; i < len(entries); i++ {
|
|
t, ok := entries[i].Job.(*_task)
|
|
if !ok {
|
|
continue
|
|
}
|
|
r := &Report{
|
|
Next: entries[i].Next,
|
|
Prev: entries[i].Prev,
|
|
Entry: entries[i].ID,
|
|
Name: t.Task.Name,
|
|
ID: t.Task.ID,
|
|
Description: t.Task.Description,
|
|
Group: t.Task.Group,
|
|
Spec: t.spec,
|
|
Once: t.once,
|
|
Args: t.args,
|
|
Carry: t.carry,
|
|
}
|
|
p.Scheduled = append(p.Scheduled, r)
|
|
}
|
|
|
|
return p
|
|
}
|