81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"gopkg.in/gomail.v2"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type smtpInfo struct {
|
|
server string
|
|
port int
|
|
user string
|
|
pass string
|
|
sender string
|
|
receiver string
|
|
}
|
|
|
|
var defaultSMTP smtpInfo
|
|
|
|
func sendStatusReport(publicName, newStatus, oldStatus string) error {
|
|
mail := gomail.NewMessage()
|
|
mail.SetHeader("From", defaultSMTP.sender)
|
|
mail.SetHeader("To", defaultSMTP.receiver)
|
|
mail.SetHeader("Subject", fmt.Sprintf("[Status Report] %s has changed to %s", publicName, newStatus))
|
|
|
|
currentTime := time.Now().Format("2006-01-02 15:04:05")
|
|
msg := fmt.Sprintf(
|
|
"%s has changed status from %s to %s at %s",
|
|
publicName, oldStatus, newStatus, currentTime)
|
|
|
|
mail.SetBody("text/plain", msg)
|
|
|
|
dial := gomail.NewDialer(defaultSMTP.server, defaultSMTP.port, defaultSMTP.user, defaultSMTP.pass)
|
|
|
|
err := dial.DialAndSend(mail)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("Status report \"%s\" sent at %s\n", publicName, currentTime)
|
|
return nil
|
|
}
|
|
|
|
func initSMTP() {
|
|
port, _ := strconv.Atoi(os.Getenv("SMTP_PORT"))
|
|
defaultSMTP = smtpInfo{
|
|
server: os.Getenv("SMTP_SERVER"),
|
|
port: port,
|
|
user: os.Getenv("SMTP_USER"),
|
|
pass: os.Getenv("SMTP_PASS"),
|
|
sender: os.Getenv("SMTP_SENDER"),
|
|
receiver: os.Getenv("SMTP_RECEIVER"),
|
|
}
|
|
}
|
|
|
|
func sendReportingStarted() {
|
|
fmt.Println("Attempting to start Status Reporting")
|
|
currentTime := time.Now().Format("2006-01-02 15:04:05")
|
|
msg := fmt.Sprintf(
|
|
"Infrabot is now watching for status changes on monitored services\r\n%s",
|
|
currentTime)
|
|
mail := gomail.NewMessage()
|
|
mail.SetHeader("From", defaultSMTP.sender)
|
|
mail.SetHeader("To", defaultSMTP.receiver)
|
|
mail.SetHeader("Subject", "[Status Report] Healthcheck Status Reporting has started")
|
|
mail.SetBody("text/plain", msg)
|
|
|
|
dial := gomail.NewDialer(defaultSMTP.server, defaultSMTP.port, defaultSMTP.user, defaultSMTP.pass)
|
|
|
|
err := dial.DialAndSend(mail)
|
|
|
|
if err != nil {
|
|
fmt.Printf("Error sending status reporting: %s\n", err)
|
|
return
|
|
}
|
|
fmt.Printf("Status reporting started at %s\n", currentTime)
|
|
return
|
|
}
|