You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.5 KiB
71 lines
1.5 KiB
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 |
|
} |
|
|
|
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 |
|
}
|
|
|