commit c56647ea173fdf2b4bc34ef609fca7db5d4431b7
parent e1aab5bbd8dedcd6233e8184314c07cde1d9bef3
Author: Paco Esteban <paco@onna.be>
Date: Wed, 17 Jul 2019 19:08:04 +0200
add file flag creation on alerts
if the alert has a code like AC:0000 on it, it will create a flag file.
That can later be processed by other tasks
Diffstat:
M | Makefile | | | 2 | +- |
M | main.go | | | 49 | +++++++++++++++++++++++++++++++++++++++++++++++++ |
2 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
@@ -1,6 +1,6 @@
BINARY=xmpp-webhook
-VERSION=0.1
+VERSION=0.2
BUILD_DATE=`date '+%Y%m%d%H%M'`
BUILD=`git rev-parse HEAD`
OS=`uname | tr "[:upper:]" "[:lower:]"`
diff --git a/main.go b/main.go
@@ -3,9 +3,11 @@ package main
import (
"flag"
"fmt"
+ "io"
"log"
"net/http"
"os"
+ "regexp"
"strings"
"github.com/emgee/go-xmpp/src/xmpp"
@@ -17,6 +19,34 @@ var (
BuildDate string
)
+func WriteFileFlag(filename string, data string) error {
+ file, err := os.Create(filename)
+ if err != nil {
+ return err
+ }
+ defer file.Close()
+
+ _, err = io.WriteString(file, data)
+ if err != nil {
+ return err
+ }
+ return file.Sync()
+}
+
+func createFolder(path string) error {
+ if _, err := os.Stat(path); err != nil {
+ if os.IsNotExist(err) {
+ err = os.Mkdir(path, 0770)
+ if err != nil {
+ return fmt.Errorf("Error while creating folder!")
+ }
+ } else {
+ return fmt.Errorf("Folder exists, but not writable!")
+ }
+ }
+ return nil
+}
+
// starts xmpp session and returns the xmpp client
func xmppLogin(id string, pass string) (*xmpp.XMPP, error) {
// parse jid structure
@@ -61,6 +91,7 @@ func main() {
xp := os.Getenv("XMPP_PASS")
xr := os.Getenv("XMPP_RECEIVERS")
port := os.Getenv("XMPP_HOOK_PORT")
+ flagsFolder := os.Getenv("XMPP_HOOK_FLAGS_FOLDER")
// check if xmpp credentials and receiver list are supplied
if len(xi) < 1 || len(xp) < 1 || len(xr) < 1 {
@@ -71,6 +102,10 @@ func main() {
port = "4321"
}
+ if len(flagsFolder) < 1 {
+ flagsFolder = "/tmp/xmpp_flags"
+ }
+
// connect to xmpp server
xc, err := xmppLogin(xi, xp)
if err != nil {
@@ -112,6 +147,20 @@ func main() {
go func() {
for m := range messages {
for _, r := range strings.Split(xr, ",") {
+ re := regexp.MustCompile(`AC:\d{4}`)
+ alertCode := re.FindString(m)
+ if len(alertCode) > 0 {
+ log.Printf("Found alert code %s", alertCode)
+ if err := createFolder(flagsFolder); err != nil {
+ m = m + "\n" + err.Error()
+ log.Printf("ERROR: %s", err.Error())
+ }
+ err = WriteFileFlag(flagsFolder + "/" + alertCode, alertCode);
+ if err != nil {
+ m = m + "\n" + err.Error()
+ log.Printf("ERROR (on file creation): %s", err.Error())
+ }
+ }
xc.Out <- xmpp.Message{
To: r,
Body: []xmpp.MessageBody{