98 lines
2.4 KiB
Go
98 lines
2.4 KiB
Go
package notifiers
|
|
|
|
import (
|
|
"github.com/prometheus/common/log"
|
|
"github.com/statping/statping/types/failures"
|
|
"github.com/statping/statping/types/null"
|
|
"github.com/statping/statping/types/services"
|
|
"github.com/statping/statping/utils"
|
|
"time"
|
|
)
|
|
|
|
func InitNotifiers() {
|
|
Add(
|
|
slacker,
|
|
Command,
|
|
Discorder,
|
|
email,
|
|
LineNotify,
|
|
Telegram,
|
|
Twilio,
|
|
Webhook,
|
|
Mobile,
|
|
Pushover,
|
|
)
|
|
}
|
|
|
|
func Add(notifs ...services.ServiceNotifier) {
|
|
for _, n := range notifs {
|
|
services.AddNotifier(n)
|
|
if err := n.Select().Create(); err != nil {
|
|
log.Error(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func ToMap(srv *services.Service, f *failures.Failure) map[string]interface{} {
|
|
m := make(map[string]interface{})
|
|
m["Service"] = srv
|
|
m["Failure"] = f
|
|
return m
|
|
}
|
|
|
|
func ReplaceVars(input string, s *services.Service, f *failures.Failure) string {
|
|
input = utils.ReplaceTemplate(input, s)
|
|
if f != nil {
|
|
input = utils.ReplaceTemplate(input, f)
|
|
}
|
|
return input
|
|
}
|
|
|
|
var exampleService = &services.Service{
|
|
Id: 1,
|
|
Name: "Statping",
|
|
Domain: "https://statping.com",
|
|
Expected: null.NewNullString("a better response"),
|
|
ExpectedStatus: 200,
|
|
Interval: 60,
|
|
Type: "http",
|
|
Method: "get",
|
|
Timeout: 10,
|
|
Order: 2,
|
|
VerifySSL: null.NewNullBool(true),
|
|
Public: null.NewNullBool(true),
|
|
GroupId: 0,
|
|
Permalink: null.NewNullString("statping"),
|
|
Online: true,
|
|
Latency: 324399,
|
|
PingTime: 18399,
|
|
Online24Hours: 99.2,
|
|
Online7Days: 99.8,
|
|
AvgResponse: 300233,
|
|
FailuresLast24Hours: 4,
|
|
Checkpoint: utils.Now().Add(-10 * time.Minute),
|
|
SleepDuration: 55,
|
|
LastResponse: "returning from a response",
|
|
AllowNotifications: null.NewNullBool(true),
|
|
UserNotified: false,
|
|
UpdateNotify: null.NewNullBool(true),
|
|
SuccessNotified: false,
|
|
LastStatusCode: 200,
|
|
LastLookupTime: 5233,
|
|
LastLatency: 270233,
|
|
LastCheck: utils.Now().Add(-15 * time.Second),
|
|
LastOnline: utils.Now().Add(-15 * time.Second),
|
|
LastOffline: utils.Now().Add(-10 * time.Minute),
|
|
SecondsOnline: 4500,
|
|
SecondsOffline: 300,
|
|
}
|
|
|
|
var exampleFailure = &failures.Failure{
|
|
Id: 1,
|
|
Issue: "HTTP returned a 500 status code",
|
|
ErrorCode: 500,
|
|
Service: 1,
|
|
PingTime: 43203,
|
|
CreatedAt: utils.Now().Add(-10 * time.Minute),
|
|
}
|