added bare setup for notifier
Got 582 offers. Filtered offers: 3 ID| Ram| HDD| CPU| Price| Score| Reduce time|Specials SB57-931121| 128 GB| 2x 2 TB (4096)| Intel Xeon E5-1650V2 (12518)| 57.00 €| 103.12| 40h 16m|ECC, Ent. HDD, iNIC SB69-927780| 128 GB| 2x 2 TB (4096)| Intel Xeon E5-1650V3 (13335)| 69.00 €| 89.92| 36h 02m|ECC, Ent. HDD, iNIC SB74-910394| 128 GB| 3x 2 TB (6144)| Intel Xeon E5-1650V2 (12518)| 74.00 €| 84.96| 23h 00m|ECC, Ent. HDD, iNIC
This commit is contained in:
parent
66001f861f
commit
796da12a07
2 changed files with 116 additions and 0 deletions
22
main.go
22
main.go
|
@ -6,6 +6,7 @@ import (
|
||||||
"github.com/mrahbar/my-bloody-hetzner-sb-notifier/client"
|
"github.com/mrahbar/my-bloody-hetzner-sb-notifier/client"
|
||||||
c "github.com/mrahbar/my-bloody-hetzner-sb-notifier/crawler"
|
c "github.com/mrahbar/my-bloody-hetzner-sb-notifier/crawler"
|
||||||
"github.com/mrahbar/my-bloody-hetzner-sb-notifier/hetzner"
|
"github.com/mrahbar/my-bloody-hetzner-sb-notifier/hetzner"
|
||||||
|
n "github.com/mrahbar/my-bloody-hetzner-sb-notifier/notifier"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -64,6 +65,24 @@ var (
|
||||||
"set max benchmark",
|
"set max benchmark",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
notifierSender = flag.String(
|
||||||
|
"notifier-sender",
|
||||||
|
"",
|
||||||
|
"set notifier sender",
|
||||||
|
)
|
||||||
|
|
||||||
|
notifierPassword = flag.String(
|
||||||
|
"notifier-password",
|
||||||
|
"",
|
||||||
|
"set notifier password",
|
||||||
|
)
|
||||||
|
|
||||||
|
notifierRecipient = flag.String(
|
||||||
|
"notifier-recipient",
|
||||||
|
"",
|
||||||
|
"set notifier recipient",
|
||||||
|
)
|
||||||
|
|
||||||
alertOnScore = flag.Int(
|
alertOnScore = flag.Int(
|
||||||
"alert-on-score",
|
"alert-on-score",
|
||||||
0,
|
0,
|
||||||
|
@ -86,6 +105,9 @@ func main() {
|
||||||
|
|
||||||
fmt.Printf("Got %d offers. Filtered offers: %d\n", len(offers.Server), len(servers))
|
fmt.Printf("Got %d offers. Filtered offers: %d\n", len(offers.Server), len(servers))
|
||||||
crawler.Print(servers)
|
crawler.Print(servers)
|
||||||
|
|
||||||
|
notifier := n.NewNotifier(*notifierRecipient, *notifierSender, *notifierPassword)
|
||||||
|
notifier.Act(servers)
|
||||||
} else {
|
} else {
|
||||||
fmt.Println("Got no offers.")
|
fmt.Println("Got no offers.")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1,95 @@
|
||||||
package notifier
|
package notifier
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"github.com/mrahbar/my-bloody-hetzner-sb-notifier/hetzner"
|
||||||
|
"mime/quotedprintable"
|
||||||
|
"net/smtp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
gmailSmtpServer = "smtp.gmail.com"
|
||||||
|
contentTypeHtml = "text/html"
|
||||||
|
contentTypePlain = "text/plain"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Notifier struct {
|
||||||
|
to string
|
||||||
|
contentType string
|
||||||
|
user string
|
||||||
|
password string
|
||||||
|
server string
|
||||||
|
port int
|
||||||
|
history map[string]float64
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNotifier(Recipient, Username, Password string) Notifier {
|
||||||
|
notifier := Notifier{
|
||||||
|
Recipient,
|
||||||
|
contentTypePlain,
|
||||||
|
Username,
|
||||||
|
Password,
|
||||||
|
gmailSmtpServer,
|
||||||
|
587,
|
||||||
|
make(map[string]float64),
|
||||||
|
}
|
||||||
|
return notifier
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n Notifier) Act(servers []hetzner.Server) {
|
||||||
|
//absentFromHistory := false
|
||||||
|
//
|
||||||
|
//for _, s := range servers {
|
||||||
|
// // TODO check if server in history, if a single server is missing send email and store state
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n Notifier) sendMail(Dest []string, Subject, bodyMessage string) {
|
||||||
|
|
||||||
|
msg := "From: " + n.user + "\n" +
|
||||||
|
"To: " + strings.Join(Dest, ",") + "\n" +
|
||||||
|
"Subject: " + Subject + "\n" + bodyMessage
|
||||||
|
|
||||||
|
err := smtp.SendMail(fmt.Sprintf("%s:%d", n.server, n.port),
|
||||||
|
smtp.PlainAuth("", n.user, n.password, n.server),
|
||||||
|
n.user, Dest, []byte(msg))
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
fmt.Printf("smtp error: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Mail sent successfully!")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n Notifier) writeEmail(subject, bodyMessage string) string {
|
||||||
|
|
||||||
|
header := make(map[string]string)
|
||||||
|
header["From"] = n.user
|
||||||
|
|
||||||
|
header["To"] = n.to
|
||||||
|
header["Subject"] = subject
|
||||||
|
header["MIME-Version"] = "1.0"
|
||||||
|
header["Content-Type"] = fmt.Sprintf("%s; charset=\"utf-8\"", n.contentType)
|
||||||
|
header["Content-Transfer-Encoding"] = "quoted-printable"
|
||||||
|
header["Content-Disposition"] = "inline"
|
||||||
|
|
||||||
|
message := ""
|
||||||
|
|
||||||
|
for key, value := range header {
|
||||||
|
message += fmt.Sprintf("%s: %s\r\n", key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
var encodedMessage bytes.Buffer
|
||||||
|
|
||||||
|
finalMessage := quotedprintable.NewWriter(&encodedMessage)
|
||||||
|
finalMessage.Write([]byte(bodyMessage))
|
||||||
|
finalMessage.Close()
|
||||||
|
|
||||||
|
message += "\r\n" + encodedMessage.String()
|
||||||
|
|
||||||
|
return message
|
||||||
|
}
|
Reference in a new issue