mirror of https://github.com/statping/statping
				
				
				
			
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Go
		
	
	
package notifiers
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/statping/statping/types/failures"
 | 
						|
	"github.com/statping/statping/types/notifications"
 | 
						|
	"github.com/statping/statping/types/notifier"
 | 
						|
	"github.com/statping/statping/types/services"
 | 
						|
	"github.com/statping/statping/utils"
 | 
						|
)
 | 
						|
 | 
						|
var _ notifier.Notifier = (*gotify)(nil)
 | 
						|
 | 
						|
type gotify struct {
 | 
						|
	*notifications.Notification
 | 
						|
}
 | 
						|
 | 
						|
func (g *gotify) Select() *notifications.Notification {
 | 
						|
	return g.Notification
 | 
						|
}
 | 
						|
 | 
						|
var Gotify = &gotify{¬ifications.Notification{
 | 
						|
	Method:      "gotify",
 | 
						|
	Title:       "Gotify",
 | 
						|
	Description: "Use Gotify to receive push notifications. Add your Gotify URL and App Token to receive notifications.",
 | 
						|
	Author:      "Hugo van Rijswijk",
 | 
						|
	AuthorUrl:   "https://github.com/hugo-vrijswijk",
 | 
						|
	Icon:        "broadcast-tower",
 | 
						|
	Delay:       time.Duration(5 * time.Second),
 | 
						|
	Limits:      60,
 | 
						|
	SuccessData: `{"title": "{{.Service.Name}}", "message": "Your service '{{.Service.Name}}' is currently online!", "priority": 2}`,
 | 
						|
	FailureData: `{"title": "{{.Service.Name}}", "message": "Your service '{{.Service.Name}}' is currently failing! Reason: {{.Failure.Issue}}", "priority": 5}`,
 | 
						|
	DataType:    "json",
 | 
						|
	Form: []notifications.NotificationForm{{
 | 
						|
		Type:        "text",
 | 
						|
		Title:       "Gotify URL",
 | 
						|
		SmallText:   "Gotify server URL, including http(s):// and port if needed",
 | 
						|
		DbField:     "Host",
 | 
						|
		Placeholder: "https://gotify.domain.com",
 | 
						|
		Required:    true,
 | 
						|
	}, {
 | 
						|
		Type:        "text",
 | 
						|
		Title:       "App Token",
 | 
						|
		SmallText:   "The Application Token generated by Gotify",
 | 
						|
		DbField:     "api_key",
 | 
						|
		Placeholder: "TB5gatYYyR.FCD2",
 | 
						|
		Required:    true,
 | 
						|
	}}},
 | 
						|
}
 | 
						|
 | 
						|
// Send will send a HTTP Post to the Gotify API. It accepts type: string
 | 
						|
func (g *gotify) sendMessage(msg string) (string, error) {
 | 
						|
	var url string
 | 
						|
	if strings.HasSuffix(g.Host, "/") {
 | 
						|
		url = g.Host + "message"
 | 
						|
	} else {
 | 
						|
		url = g.Host + "/message"
 | 
						|
	}
 | 
						|
 | 
						|
	headers := []string{"X-Gotify-Key=" + g.ApiKey}
 | 
						|
 | 
						|
	content, _, err := utils.HttpRequest(url, "POST", "application/json", headers, strings.NewReader(msg), time.Duration(10*time.Second), true, nil)
 | 
						|
 | 
						|
	return string(content), err
 | 
						|
}
 | 
						|
 | 
						|
// OnFailure will trigger failing service
 | 
						|
func (g *gotify) OnFailure(s services.Service, f failures.Failure) (string, error) {
 | 
						|
	out, err := g.sendMessage(ReplaceVars(g.FailureData, s, f))
 | 
						|
	return out, err
 | 
						|
}
 | 
						|
 | 
						|
// OnSuccess will trigger successful service
 | 
						|
func (g *gotify) OnSuccess(s services.Service) (string, error) {
 | 
						|
	out, err := g.sendMessage(ReplaceVars(g.SuccessData, s, failures.Failure{}))
 | 
						|
	return out, err
 | 
						|
}
 | 
						|
 | 
						|
// OnTest will test the Gotify notifier
 | 
						|
func (g *gotify) OnTest() (string, error) {
 | 
						|
	msg := `{"title:" "Test" "message": "Testing the Gotify Notifier", "priority": 0}`
 | 
						|
	content, err := g.sendMessage(msg)
 | 
						|
 | 
						|
	return content, err
 | 
						|
}
 | 
						|
 | 
						|
// OnSave will trigger when this notifier is saved
 | 
						|
func (g *gotify) OnSave() (string, error) {
 | 
						|
	return "", nil
 | 
						|
}
 |