forked from joshrendek/influx-alert
/
main.go
83 lines (69 loc) · 1.36 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main
/*
Generate slack token: https://api.slack.com/web
Environment Variables:
* SLACK_API_TOKEN
* SLACK_ROOM
* HIPCHAT_API_TOKEN
* HIPCHAT_ROOM_ID
* HIPCHAT_SERVER (optional)
*/
import (
"fmt"
"github.com/bluele/slack"
flag "github.com/ogier/pflag"
"github.com/tbruyelle/hipchat-go/hipchat"
"gopkg.in/yaml.v2"
"io/ioutil"
"os"
"time"
)
type Trigger struct {
Operator string
Value int64
}
type Notifier struct {
Name string
}
type Alert struct {
Name string
Type string
Function string
Limit int
Timeshift string
Query string
Interval float64
Trigger Trigger
NotifiersRaw []string `yaml:"notifiers"`
Notifiers []Notifier `yaml:"-"`
}
var err error
var slack_api *slack.Slack
var slack_channel *slack.Channel
var hipchat_api *hipchat.Client
func main() {
var file *string = flag.StringP("config", "c", "", "Config file to use")
flag.Parse()
setupInflux()
alerts := []Alert{}
data, _ := ioutil.ReadFile(*file)
err := yaml.Unmarshal(data, &alerts)
if err != nil {
panic(err)
}
if os.Getenv("DEBUG") == "true" {
fmt.Printf("%+v\n", alerts)
}
setupSlack()
setupHipchat()
done := make(chan bool)
for _, alert := range alerts {
go func(alert Alert) {
for {
alert.Run()
time.Sleep(time.Duration(alert.Interval) * time.Second)
}
}(alert)
}
<-done // wait
}