go-common/app/job/main/search/dao/sms.go
2019-04-22 18:49:16 +08:00

73 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package dao
import (
"net/http"
"net/url"
"strconv"
"time"
"go-common/library/log"
)
const _smsURL = "http://ops-mng.bilibili.co/api/sendsms"
type sms struct {
d *Dao
client *http.Client
lastTime int64
interval int64
params *url.Values
}
func newSMS(d *Dao) (s *sms) {
s = &sms{
d: d,
client: &http.Client{},
lastTime: time.Now().Unix() - d.c.SMS.Interval, //如果不想让初始化的时候告警,把减号去掉
interval: d.c.SMS.Interval,
params: &url.Values{
"phone": []string{d.c.SMS.Phone},
"token": []string{d.c.SMS.Token},
},
}
return
}
// SendSMS .
func (d *Dao) SendSMS(msg string) (err error) {
if !d.sms.IntervalCheck() {
log.Error("发短信太频繁啦, msg%s", msg)
return
}
if err = d.sms.Send(msg); err != nil {
log.Error("发短信失败, msg%s, error(%v)", msg, err)
}
return
}
func (sms *sms) Send(msg string) (err error) {
var req *http.Request
sms.params.Set("message", msg)
if req, err = http.NewRequest("GET", _smsURL+"?"+sms.params.Encode(), nil); err != nil {
return
}
req.Header.Set("x1-bilispy-timeout", strconv.FormatInt(int64(time.Duration(1)/time.Millisecond), 10))
if _, err = sms.client.Do(req); err != nil {
log.Error("ops-mng sendsms url(%s) error(%v)", _smsURL+"?"+sms.params.Encode(), err)
}
return
}
// IntervalCheck accessible or not to send msg at present time
func (sms *sms) IntervalCheck() (send bool) {
now := time.Now().Unix()
if (now - sms.lastTime) >= sms.interval {
send = true
sms.lastTime = now
} else {
send = false
}
return
}