app/task/profile.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
}