Added script notification
This commit is contained in:
parent
4a52c319c4
commit
f29693a066
3 changed files with 109 additions and 30 deletions
|
|
@ -16,7 +16,16 @@ func ServiceFactory(t string, config []byte, prio int, ackURL string, logger *sl
|
|||
err = werr.Wrap(err).WithData(config)
|
||||
return nil, err
|
||||
}
|
||||
ntfy.SetLogger(logger)
|
||||
return ntfy, nil
|
||||
case "SCRIPT":
|
||||
script, err := NewScript(config, prio, ackURL)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err).WithData(config)
|
||||
return nil, err
|
||||
}
|
||||
script.SetLogger(logger)
|
||||
return script, nil
|
||||
}
|
||||
|
||||
return nil, werr.New("Unknown notification service, '%s'", t).WithCode("002-0000")
|
||||
|
|
|
|||
70
notification/script.go
Normal file
70
notification/script.go
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
package notification
|
||||
|
||||
import (
|
||||
// External
|
||||
werr "git.gibonuddevalla.se/go/wrappederror"
|
||||
|
||||
// Standard
|
||||
"encoding/json"
|
||||
"log/slog"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Script struct {
|
||||
Filename string
|
||||
Prio int
|
||||
AcknowledgeURL string
|
||||
logger *slog.Logger
|
||||
}
|
||||
|
||||
func NewScript(config []byte, prio int, ackURL string) (instance *Script, err error) {
|
||||
instance = new(Script)
|
||||
err = json.Unmarshal(config, &instance)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err).WithCode("002-0001").WithData(config)
|
||||
return
|
||||
}
|
||||
instance.Prio = prio
|
||||
instance.AcknowledgeURL = ackURL
|
||||
return instance, nil
|
||||
}
|
||||
|
||||
func (script *Script) SetLogger(l *slog.Logger) {
|
||||
script.logger = l
|
||||
}
|
||||
|
||||
func (script *Script) GetType() string {
|
||||
return "SCRIPT"
|
||||
}
|
||||
|
||||
func (script *Script) GetPrio() int {
|
||||
return script.Prio
|
||||
}
|
||||
|
||||
func (script Script) Send(problemID int, msg []byte) (err error) {
|
||||
var errbuf strings.Builder
|
||||
cmd := exec.Command(script.Filename, strconv.Itoa(problemID), script.AcknowledgeURL, string(msg))
|
||||
cmd.Stderr = &errbuf
|
||||
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
script.logger.Error("notification", "type", "script", "error", err)
|
||||
err = werr.Wrap(err).WithData(
|
||||
struct {
|
||||
Filename string
|
||||
ProblemID int
|
||||
Msg string
|
||||
StdErr string
|
||||
}{
|
||||
script.Filename,
|
||||
problemID,
|
||||
string(msg),
|
||||
errbuf.String(),
|
||||
},
|
||||
).Log()
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue