2020-04-09 01:47:27 +00:00
package notifiers
import (
"fmt"
"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"
"net/url"
"strings"
"time"
)
const (
pushoverUrl = "https://api.pushover.net/1/messages.json"
)
var _ notifier . Notifier = ( * pushover ) ( nil )
type pushover struct {
* notifications . Notification
}
func ( t * pushover ) Select ( ) * notifications . Notification {
return t . Notification
}
var Pushover = & pushover { & notifications . Notification {
Method : "pushover" ,
Title : "Pushover" ,
Description : "Use Pushover to receive push notifications. You will need to create a <a href=\"https://pushover.net/apps/build\">New Application</a> on Pushover before using this notifier." ,
Author : "Hunter Long" ,
AuthorUrl : "https://github.com/hunterlong" ,
Icon : "fa dot-circle" ,
Delay : time . Duration ( 10 * time . Second ) ,
Limits : 60 ,
2020-06-15 04:46:28 +00:00
SuccessData : ` Your service ' {{ .Service .Name }} ' is currently online! ` ,
FailureData : ` Your service ' {{ .Service .Name }} ' is currently offline! ` ,
DataType : "text" ,
2020-04-09 01:47:27 +00:00
Form : [ ] notifications . NotificationForm { {
Type : "text" ,
Title : "User Token" ,
Placeholder : "Insert your device's Pushover Token" ,
DbField : "api_key" ,
Required : true ,
} , {
Type : "text" ,
Title : "Application API Key" ,
Placeholder : "Create an Application and insert the API Key here" ,
DbField : "api_secret" ,
Required : true ,
} ,
} } ,
}
// Send will send a HTTP Post to the Pushover API. It accepts type: string
2020-04-11 05:59:51 +00:00
func ( t * pushover ) sendMessage ( message string ) ( string , error ) {
2020-04-09 01:47:27 +00:00
v := url . Values { }
v . Set ( "token" , t . ApiSecret )
v . Set ( "user" , t . ApiKey )
v . Set ( "message" , message )
rb := strings . NewReader ( v . Encode ( ) )
2020-05-20 06:41:50 +00:00
content , _ , err := utils . HttpRequest ( pushoverUrl , "POST" , "application/x-www-form-urlencoded" , nil , rb , time . Duration ( 10 * time . Second ) , true , nil )
2020-04-09 01:47:27 +00:00
if err != nil {
2020-04-11 05:59:51 +00:00
return "" , err
2020-04-09 01:47:27 +00:00
}
2020-04-11 05:59:51 +00:00
return string ( content ) , err
2020-04-09 01:47:27 +00:00
}
// OnFailure will trigger failing service
func ( t * pushover ) OnFailure ( s * services . Service , f * failures . Failure ) error {
2020-06-15 04:46:28 +00:00
message := ReplaceVars ( t . FailureData , s , f )
_ , err := t . sendMessage ( message )
2020-04-11 05:59:51 +00:00
return err
2020-04-09 01:47:27 +00:00
}
// OnSuccess will trigger successful service
func ( t * pushover ) OnSuccess ( s * services . Service ) error {
2020-06-15 04:46:28 +00:00
message := ReplaceVars ( t . SuccessData , s , nil )
_ , err := t . sendMessage ( message )
2020-04-11 05:59:51 +00:00
return err
2020-04-09 01:47:27 +00:00
}
// OnTest will test the Pushover SMS messaging
2020-04-11 05:59:51 +00:00
func ( t * pushover ) OnTest ( ) ( string , error ) {
2020-05-02 09:51:47 +00:00
msg := fmt . Sprintf ( "Testing the Pushover Notifier, Your service '%s' is currently offline! Error: %s" , exampleService . Name , exampleFailure . Issue )
2020-04-11 05:59:51 +00:00
content , err := t . sendMessage ( msg )
return content , err
2020-04-09 01:47:27 +00:00
}