Added script notification

This commit is contained in:
Magnus Åhall 2024-06-02 10:59:06 +02:00
parent 4a52c319c4
commit f29693a066
3 changed files with 109 additions and 30 deletions

View file

@ -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
View 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
}