Files
jiazhizhong 1279635d7f fix
2022-03-10 17:09:03 +08:00

144 lines
2.9 KiB
Go

package admin
import (
"fmt"
"io"
"io/ioutil"
"jiacrontab/models"
"jiacrontab/pkg/mailer"
"jiacrontab/pkg/proto"
"net/http"
"strings"
"time"
"github.com/iwannay/log"
)
type Srv struct {
adm *Admin
}
func NewSrv(adm *Admin) *Srv {
return &Srv{
adm: adm,
}
}
func (s *Srv) Register(args map[uint]models.Node, reply *bool) error {
*reply = true
for _, node := range args {
ret := models.DB().Unscoped().Model(&models.Node{}).Where("addr=? and group_id=?", node.Addr, node.GroupID).Updates(map[string]interface{}{
"daemon_task_num": node.DaemonTaskNum,
"crontab_task_num": node.CrontabTaskNum,
"crontab_job_audit_num": node.CrontabJobAuditNum,
"daemon_job_audit_num": node.DaemonJobAuditNum,
"crontab_job_fail_num": node.CrontabJobFailNum,
})
if ret.Error != nil {
return ret.Error
}
if node.GroupID == models.SuperGroup.ID {
ret = models.DB().Unscoped().Model(&models.Node{}).Where("addr=?", node.Addr).Updates(map[string]interface{}{
"name": node.Name,
"deleted_at": nil,
"disabled": false,
})
if ret.Error != nil {
return ret.Error
}
}
if ret.RowsAffected == 0 && node.GroupID == models.SuperGroup.ID {
ret = models.DB().Create(&node)
}
if ret.Error != nil {
return ret.Error
}
}
return nil
}
func (s *Srv) ExecDepend(args proto.DepJobs, reply *bool) error {
log.Infof("Callee Srv.ExecDepend jobID:%d", args[0].JobID)
*reply = true
for _, v := range args {
if err := rpcCall(v.Dest, "CrontabJob.ExecDepend", v, &reply); err != nil {
*reply = false
return err
}
}
return nil
}
func (s *Srv) SetDependDone(args proto.DepJob, reply *bool) error {
log.Infof("Callee Srv.SetDependDone jobID:%d", args.JobID)
*reply = true
if err := rpcCall(args.Dest, "CrontabJob.SetDependDone", args, &reply); err != nil {
*reply = false
return err
}
return nil
}
func (s *Srv) SendMail(args proto.SendMail, reply *bool) error {
var (
err error
cfg = s.adm.getOpts()
)
if cfg.Mailer.Enabled {
err = mailer.SendMail(args.MailTo, args.Subject, args.Content)
}
*reply = true
return err
}
func (s *Srv) PushJobLog(args models.JobHistory, reply *bool) error {
models.PushJobHistory(&args)
*reply = true
return nil
}
func (s *Srv) ApiPost(args proto.ApiPost, reply *bool) error {
var (
err error
errs []error
)
for _, url := range args.Urls {
client := http.Client{
Timeout: time.Minute,
}
response, err := client.Post(url, "application/json", strings.NewReader(args.Data))
if err != nil {
errs = append(errs, err)
log.Errorf("post url %s fail: %s", url, err)
continue
}
defer response.Body.Close()
io.Copy(ioutil.Discard, response.Body)
}
for _, v := range errs {
if err != nil {
err = fmt.Errorf("%s\n%s", err, v)
} else {
err = v
}
}
*reply = true
return err
}
func (s *Srv) Ping(args *proto.EmptyArgs, reply *proto.EmptyReply) error {
return nil
}