tendermint/alert/alert.go

66 lines
1.7 KiB
Go
Raw Normal View History

2014-11-27 04:04:07 -08:00
package alert
import (
"fmt"
"time"
2014-12-29 18:09:06 -08:00
"github.com/sfreiberg/gotwilio"
2015-04-01 17:30:16 -07:00
"github.com/tendermint/tendermint/config"
2014-11-27 04:04:07 -08:00
)
var lastAlertUnix int64 = 0
var alertCountSince int = 0
2014-11-27 04:04:07 -08:00
// Sends a critical alert message to administrators.
2014-11-27 04:04:07 -08:00
func Alert(message string) {
log.Error("<!> ALERT <!>\n" + message)
now := time.Now().Unix()
2015-03-16 23:16:26 -07:00
if now-lastAlertUnix > int64(config.App().GetInt("Alert.MinInterval")) {
message = fmt.Sprintf("%v:%v", config.App().GetString("Network"), message)
if alertCountSince > 0 {
message = fmt.Sprintf("%v (+%v more since)", message, alertCountSince)
alertCountSince = 0
2014-11-27 04:04:07 -08:00
}
2015-03-16 23:16:26 -07:00
if len(config.App().GetString("Alert.TwilioSid")) > 0 {
2014-11-27 04:04:07 -08:00
go sendTwilio(message)
}
2015-03-16 23:16:26 -07:00
if len(config.App().GetString("Alert.EmailRecipients")) > 0 {
2014-11-27 04:04:07 -08:00
go sendEmail(message)
}
} else {
alertCountSince++
2014-11-27 04:04:07 -08:00
}
}
func sendTwilio(message string) {
defer func() {
if err := recover(); err != nil {
2014-12-29 18:39:19 -08:00
log.Error("sendTwilio error", "error", err)
2014-11-27 04:04:07 -08:00
}
}()
if len(message) > 50 {
message = message[:50]
}
2015-03-16 23:16:26 -07:00
twilio := gotwilio.NewTwilioClient(config.App().GetString("Alert.TwilioSid"), config.App().GetString("Alert.TwilioToken"))
res, exp, err := twilio.SendSMS(config.App().GetString("Alert.TwilioFrom"), config.App().GetString("Alert.TwilioTo"), message, "", "")
2014-11-27 04:04:07 -08:00
if exp != nil || err != nil {
2014-12-29 18:39:19 -08:00
log.Error("sendTwilio error", "res", res, "exp", exp, "error", err)
2014-11-27 04:04:07 -08:00
}
}
func sendEmail(message string) {
defer func() {
if err := recover(); err != nil {
2014-12-29 18:39:19 -08:00
log.Error("sendEmail error", "error", err)
2014-11-27 04:04:07 -08:00
}
}()
subject := message
if len(subject) > 80 {
subject = subject[:80]
}
2015-03-16 23:16:26 -07:00
err := SendEmail(subject, message, config.App().GetStringSlice("Alert.EmailRecipients"))
2014-11-27 04:04:07 -08:00
if err != nil {
2014-12-29 18:39:19 -08:00
log.Error("sendEmail error", "error", err, "message", message)
2014-11-27 04:04:07 -08:00
}
}