bilibili-backup/app/job/main/web-goblin/dao/esports/message.go
2019-04-22 02:59:20 +00:00

71 lines
1.6 KiB
Go

package esports
import (
"context"
"net/url"
mdlesp "go-common/app/job/main/web-goblin/model/esports"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/xstr"
)
var _notify = "4"
// SendMessage send system notify.
func (d *Dao) SendMessage(mids []int64, msg string, contest *mdlesp.Contest) (err error) {
params := url.Values{}
params.Set("mid_list", xstr.JoinInts(mids))
params.Set("title", d.c.Rule.AlertTitle)
params.Set("mc", d.c.Message.MC)
params.Set("data_type", _notify)
params.Set("context", msg)
var res struct {
Code int `json:"code"`
}
err = d.messageHTTPClient.Post(context.Background(), d.c.Message.URL, "", params, &res)
if err != nil {
log.Error("SendMessage d.messageHTTPClient.Post(%s) error(%+v)", d.c.Message.URL+"?"+params.Encode(), err)
return
}
if res.Code != 0 {
log.Error("SendMessage url(%s) res code(%d)", d.c.Message.URL+"?"+params.Encode(), res.Code)
err = ecode.Int(res.Code)
}
return
}
//Batch 批量处理
func (d *Dao) Batch(list []int64, msg string, contest *mdlesp.Contest, batchSize int, f func(users []int64, msg string, contest *mdlesp.Contest) error) {
if msg == "" {
log.Warn("Batch msg is empty")
return
}
retry := d.c.Push.RetryTimes
for {
var (
mids []int64
err error
)
l := len(list)
if l == 0 {
break
} else if l <= batchSize {
mids = list[:l]
} else {
mids = list[:batchSize]
l = batchSize
}
list = list[l:]
for i := 0; i < retry; i++ {
if err = f(mids, msg, contest); err == nil {
break
}
}
if err != nil {
log.Error("Batch error(%v), params(%s)", err, msg)
}
}
}