Commit 5cc0bcf0 authored by szh's avatar szh

send email id node error

parent 073f98a1
......@@ -51,4 +51,11 @@ SS=/home/pi/chain33-pai/scripts/ss.sh
SSH=/home/pi/.ssh
Scripts=/home/pi/scripts/
Keygen=/home/pi/chain33-pai/scripts/ssh-keygen.sh
NetStat=/home/pi/chain33-pai/scripts/netstat.sh
\ No newline at end of file
NetStat=/home/pi/chain33-pai/scripts/netstat.sh
[email]
Sender=123456@qq.com
Name=test
Host=smtp.qq.com
Port=25
Password=123456
\ No newline at end of file
......@@ -33,6 +33,7 @@ func init() {
func main() {
go app.CornDayJob(time.NewTicker(time.Hour*24))
go app.CornData(time.NewTicker(time.Minute*5))
go app.EmailJob()
gin.SetMode(setting.ServerSetting.RunMode)
routersInit := routers.InitRouter()
readTimeout := setting.ServerSetting.ReadTimeout
......
......@@ -17,6 +17,28 @@ type RaspDevList struct {
Phone string `json:"phone"`
}
type RaspDevListQuery struct {
Id int64
Page int64
PageSize int64
}
func GetDevList(rasp RaspDevListQuery)([]*RaspDevList,error) {
var list []*RaspDevList
if err := db.Model(&RaspDevList{}).Limit(rasp.Page).Order("id desc").Find(&list).Error ;err != nil {
return nil,err
}
return list,nil
}
func GetAllDevList() ([]*RaspDevList,error) {
var list []*RaspDevList
if err := db.Model(&RaspDevList{}).Find(&list).Error ;err != nil {
return nil,err
}
return list,nil
}
func UpdateDevList(rasp RaspDevList) error {
var dev RaspDevList
err := db.Where(RaspDevList{Addr: rasp.Addr}).Assign(rasp).FirstOrCreate(&dev).Error
......
package app
var JobChan chan MsgType
type MsgType struct {
Name string
Email string
}
func Setup() {
JobChan = make(chan MsgType,100)
}
......@@ -154,6 +154,7 @@ func CornData(ticker *time.Ticker){
select {
case <-ticker.C:
UploadMinerData()
SendMailIfNodeError()
}
}
}
......@@ -175,6 +176,42 @@ func UploadMinerData() bool {
}
func SendMailIfNodeError() error {
list,err := models.GetAllDevList()
if err != nil {
fmt.Println("GetAllDevList",err)
return err
}
for _, v:= range list {
if v.NodeStatus == 1 {
continue
}
if v.NodeStatus == 0 && v.Email != "" {//节点未启动
fmt.Println(NODEERROR,"addr=",v.Addr,"email=",v.Email)
JobChan <- MsgType{Name:NODEERROR,Email:v.Email}
continue
}
if (time.Now().Unix() - v.UpdateTime) > 600 && v.Email != "" {//超过10分钟未上传数据
fmt.Println(NETWORKERROR,"addr=",v.Addr,"email=",v.Email)
JobChan <- MsgType{Name:NETWORKERROR,Email:v.Email}
}
two,err := models.GetDevList(models.RaspDevListQuery{Page:2})
if err != nil {
fmt.Println("GetDevList",err)
continue
}
if len(two) == 2 {
if two[0].Height == two[1].Height && v.Height != 0 && v.Email != "" {
fmt.Println(NODENOTSYNC,"addr=",v.Addr,"email=",v.Email)
JobChan <- MsgType{Name:NODENOTSYNC,Email:v.Email}
}
}
}
return nil
}
func CreateMonthTable() error {
return models.CreateMonthDevHistoryTable()
}
\ No newline at end of file
package app
import (
"chain33-pai/pkg/email"
"fmt"
)
const (
NODEERROR = "NODEEERROR"
NETWORKERROR = "NETWORKERROR"
NODENOTSYNC = "NODENOTSYNC"
)
var mailMsg = map[string]string{
"NODEERROR":"节点不能正常启动,请联系技术远程排查问题",
"NETWORKERROR":"网络出现异常,请排查家里网络是否正常上网以及网线接口是否松动",
"NODENOTSYNC":"节点不同步,尝试排查网络,一键回滚,一键恢复,重置节点等功能",
}
func EmailJob() error {
for {
for v:= range JobChan {
switch v.Name {
case NODEERROR:
err := email.SendToMail(mailMsg[NODEERROR],v.Email)
if err != nil {
fmt.Println("SendToMail",err)
}
case NETWORKERROR:
err := email.SendToMail(mailMsg[NETWORKERROR],v.Email)
if err != nil {
fmt.Println("SendToMail",err)
}
case NODENOTSYNC:
err := email.SendToMail(mailMsg[NODENOTSYNC],v.Email)
if err != nil {
fmt.Println("SendToMail",err)
}
}
}
}
}
package email
import (
"gopkg.in/gomail.v2"
"fmt"
"chain33-pai/pkg/setting"
)
func SendToMail(message string, toAddr string) error {
m := gomail.NewMessage()
m.SetAddressHeader("From", setting.EmailSetting.Sender, setting.EmailSetting.Name) // 发件人
m.SetHeader("To", // 收件人
m.FormatAddress(toAddr, "wkf"),
)
m.SetHeader("Subject", "节点监控异常") // 主题
m.SetBody("text/html", message) // 正文
d := gomail.NewPlainDialer(setting.EmailSetting.Host, setting.EmailSetting.Port, setting.EmailSetting.Sender, setting.EmailSetting.Password) // 发送邮件服务器、端口、发件人账号、发件人密码
if err := d.DialAndSend(m); err != nil {
fmt.Println("发送失败", err)
return err
}
return nil
}
package email
import (
"testing"
"gopkg.in/gomail.v2"
"fmt"
)
func TestSendToMail(t *testing.T) {
m := gomail.NewMessage()
m.SetAddressHeader("From", "2066632394@qq.com", "szh") // 发件人
m.SetHeader("To", // 收件人
m.FormatAddress("szh@disanbo.com", "szh"),
)
m.SetHeader("Subject", "节点监控异常") // 主题
m.SetBody("text/html", "test 节点不同步") // 正文
d := gomail.NewPlainDialer("smtp.qq.com", 25, "2066632394@qq.com", "123456") // 发送邮件服务器、端口、发件人账号、发件人密码
if err := d.DialAndSend(m); err != nil {
fmt.Println("发送失败", err)
} else {
fmt.Println("send ok")
}
}
......@@ -79,6 +79,16 @@ type Chain33_pai struct {
var Chain33Pai =&Chain33_pai{}
type Email struct {
Sender string
Name string
Host string
Port int
Password string
}
var EmailSetting = &Email{}
var cfg *ini.File
// Setup initialize the configuration instance
......@@ -95,6 +105,7 @@ func Setup() {
mapTo("redis", RedisSetting)
mapTo("block",BlockSetting)
mapTo("chain33-pai",Chain33Pai)
mapTo("email",EmailSetting)
AppSetting.ImageMaxSize = AppSetting.ImageMaxSize * 1024 * 1024
ServerSetting.ReadTimeout = ServerSetting.ReadTimeout * time.Second
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment