-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathvalidate.go
99 lines (90 loc) · 2.46 KB
/
validate.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package gossm
import (
"fmt"
)
func (c *Config) Validate() error {
if err := c.Settings.Validate(); err != nil {
return fmt.Errorf("invalid settings: %v", err)
}
if err := c.Servers.Validate(); err != nil {
return fmt.Errorf("invalid servers: %v", err)
}
return nil
}
func (s *Settings) Validate() error {
if err := s.Monitor.Validate(); err != nil {
return fmt.Errorf("invalid monitor settings: %v", err)
}
if err := s.Notifications.Validate(); err != nil {
return fmt.Errorf("invalid notification settings: %v", err)
}
return nil
}
func (ms *MonitorSettings) Validate() error {
// ExponentialBackoffSeconds can be 0, which means when calculated,
// delay for notifications will always be 1 second
if ms.CheckInterval <= 0 || ms.MaxConnections <= 0 || ms.Timeout <= 0 || ms.ExponentialBackoffSeconds < 0 {
return fmt.Errorf("monitor settings missing")
}
return nil
}
func (ns *NotificationSettings) Validate() error {
for _, email := range ns.Email {
if err := email.Validate(); err != nil {
return fmt.Errorf("invalid email settings: %v", err)
}
}
for _, sms := range ns.Sms {
if err := sms.Validate(); err != nil {
return fmt.Errorf("invalid sms settings: %v", err)
}
}
for _, telegram := range ns.Telegram {
if err := telegram.Validate(); err != nil {
return fmt.Errorf("invalid telegram settings: %v", err)
}
}
for _, slack := range ns.Slack {
if err := slack.Validate(); err != nil {
return fmt.Errorf("invalid slack settings: %v", err)
}
}
for _, pushover := range ns.Pushover {
if err := pushover.Validate(); err != nil {
return fmt.Errorf("invalid pushover settings: %v", err)
}
}
for _, webhook := range ns.Webhook {
if err := webhook.Validate(); err != nil {
return fmt.Errorf("invalid webhook settings: %v", err)
}
}
return nil
}
func (servers Servers) Validate() error {
if len(servers) == 0 {
return fmt.Errorf("no servers found in config")
}
for _, server := range servers {
if err := server.Validate(); err != nil {
return fmt.Errorf("invalid server settings: %s", err)
}
}
return nil
}
func (s *Server) Validate() error {
errServerProperty := func(property string) error {
return fmt.Errorf("missing server property %s", property)
}
switch {
case s.Name == "":
return errServerProperty("name")
case s.IPAddress == "":
return errServerProperty("ipAddress")
case s.Port == 0:
return errServerProperty("port")
case s.Protocol == "":
return errServerProperty("protocol")
}
return nil
}