trying to switch instrumentation
Got 544 offers. Filtered offers: 3 ID| Ram| HDD| CPU| Price| Score| Reduce time|Specials SB64-935022| 128 GB| 2x 2 TB (4096)| Intel Xeon E5-1650V2 (12518)| 64.00 €| 91.84| 48h 17m|ECC, Ent. HDD, iNIC SB72-927788| 128 GB| 2x 2 TB (4096)| Intel Xeon E5-1650V3 (13335)| 72.00 €| 86.17| 21h 37m|ECC, Ent. HDD, iNIC SB73-910394| 128 GB| 3x 2 TB (6144)| Intel Xeon E5-1650V2 (12518)| 73.00 €| 86.13| 03h 33m|ECC, Ent. HDD, iNIC
This commit is contained in:
parent
796da12a07
commit
0dfa241f0d
5 changed files with 24 additions and 98 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
go.sum
|
11
go.mod
11
go.mod
|
@ -1 +1,12 @@
|
||||||
module github.com/mrahbar/my-bloody-hetzner-sb-notifier
|
module github.com/mrahbar/my-bloody-hetzner-sb-notifier
|
||||||
|
|
||||||
|
require (
|
||||||
|
cloud.google.com/go v0.31.0
|
||||||
|
github.com/golang/protobuf v1.2.0
|
||||||
|
github.com/googleapis/gax-go v2.0.0+incompatible // indirect
|
||||||
|
go.opencensus.io v0.18.0 // indirect
|
||||||
|
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519 // indirect
|
||||||
|
google.golang.org/api v0.0.0-20181021000519-a2651947f503 // indirect
|
||||||
|
google.golang.org/genproto v0.0.0-20181016170114-94acd270e44e
|
||||||
|
google.golang.org/grpc v1.16.0 // indirect
|
||||||
|
)
|
||||||
|
|
11
instrumentation/instrumentation.go
Normal file
11
instrumentation/instrumentation.go
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
package instrumentation
|
||||||
|
|
||||||
|
type Instrumenter struct{
|
||||||
|
projectId string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewInstrumenter(projectId string) *Instrumenter {
|
||||||
|
return &Instrumenter{
|
||||||
|
projectId: projectId,
|
||||||
|
}
|
||||||
|
}
|
4
main.go
4
main.go
|
@ -6,7 +6,6 @@ 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 (
|
||||||
|
@ -106,8 +105,7 @@ 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 := n.NewInstrumenter(*notifierRecipient, *notifierSender, *notifierPassword)
|
||||||
notifier.Act(servers)
|
|
||||||
} else {
|
} else {
|
||||||
fmt.Println("Got no offers.")
|
fmt.Println("Got no offers.")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,95 +0,0 @@
|
||||||
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