From ba1c35b44dcd40c1d8fb9af601e2502c73145221 Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Thu, 21 Dec 2017 09:27:00 +0100 Subject: [PATCH 01/29] dev ready for next version --- CHANGELOG.md | 9 +++++++++ includes/globalVars.py | 6 +++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 447246f..e829202 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Changelog +### __[2.3.1]__ - Unreleased +##### Added +##### Changed +##### Deprecated +##### Removed +##### Fixed +##### Security + + ### __[2.3]__ - 22.12.2017 ##### Added - zuschaltbare POCSAG Multicast-Alarm Funktionalität [#307](https://github.com/Schrolli91/BOSWatch/pull/307) diff --git a/includes/globalVars.py b/includes/globalVars.py index 23f9377..3b71248 100644 --- a/includes/globalVars.py +++ b/includes/globalVars.py @@ -9,9 +9,9 @@ Global variables """ # version info -versionNr = "2.3" -branch = "master" -buildDate = "22/12/2017" +versionNr = "2.3.1" +branch = "dev" +buildDate = "unreleased" # Global variables From 5cabb9ab4dcf292779e9239d9dbe128b9b3b743b Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Thu, 21 Dec 2017 09:31:06 +0100 Subject: [PATCH 02/29] dev ready for next version --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e829202..bfff188 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog -### __[2.3.1]__ - Unreleased +### __[v2.3.1]__ - Unreleased ##### Added ##### Changed ##### Deprecated @@ -10,7 +10,7 @@ ##### Security -### __[2.3]__ - 22.12.2017 +### __[v2.3]__ - 22.12.2017 ##### Added - zuschaltbare POCSAG Multicast-Alarm Funktionalität [#307](https://github.com/Schrolli91/BOSWatch/pull/307) - Flag in Config um nur letzte Net Ident oder gesamte Historie zu speichern [#317](https://github.com/Schrolli91/BOSWatch/pull/317) @@ -57,7 +57,7 @@ Zum schreiben des Changelog's siehe: http://keepachangelog.com/de/1.0.0/ -### __[version]__ - date +### __[v#.#]__ - date ##### Added ##### Changed ##### Deprecated From b565a31637394a73401cbf20876075619bdf8209 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Plogmann Date: Sat, 23 Dec 2017 12:35:02 +0100 Subject: [PATCH 03/29] added mysql Port to mysql connect and config --- config/config.template.ini | 1 + plugins/MySQL/MySQL.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/config/config.template.ini b/config/config.template.ini index bbb6e95..23cf14b 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -192,6 +192,7 @@ template = 0 [MySQL] # MySQL configuration dbserver = localhost +dbport = 3306 #default port: 3306 dbuser = boswatch dbpassword = root database = boswatch diff --git a/plugins/MySQL/MySQL.py b/plugins/MySQL/MySQL.py index 3d4db16..e7414df 100644 --- a/plugins/MySQL/MySQL.py +++ b/plugins/MySQL/MySQL.py @@ -91,7 +91,7 @@ def run(typ,freq,data): # Connect to MySQL # logging.debug("connect to MySQL") - connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset='utf8') + connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), host = globalVars.config.get("port","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset='utf8') cursor = connection.cursor() except: logging.error("cannot connect to MySQL") From 46f7719c8972d8fd967d128724a7c3d03c141487 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Plogmann Date: Sat, 23 Dec 2017 12:37:13 +0100 Subject: [PATCH 04/29] fixed syntax --- plugins/MySQL/MySQL.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/MySQL/MySQL.py b/plugins/MySQL/MySQL.py index e7414df..69bbb22 100644 --- a/plugins/MySQL/MySQL.py +++ b/plugins/MySQL/MySQL.py @@ -91,7 +91,7 @@ def run(typ,freq,data): # Connect to MySQL # logging.debug("connect to MySQL") - connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), host = globalVars.config.get("port","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset='utf8') + connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), port = globalVars.config.get("MySQL","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset='utf8') cursor = connection.cursor() except: logging.error("cannot connect to MySQL") From c212eac45b6cc7656326e4b414c9d165fcc5dbd6 Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Sat, 23 Dec 2017 13:24:02 +0100 Subject: [PATCH 05/29] edit CL --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfff188..c9abc23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### __[v2.3.1]__ - Unreleased ##### Added +- Config Eintrag um Port für MySQL Plugin festzulegen [#345](https://github.com/Schrolli91/BOSWatch/pull/345) ##### Changed ##### Deprecated ##### Removed From 16f576064efa761a559e84c3a143b7940ae0a394 Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Sat, 23 Dec 2017 14:54:07 +0100 Subject: [PATCH 06/29] fix travis build --- citest/config.mysql.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/citest/config.mysql.ini b/citest/config.mysql.ini index 317d3d9..723df46 100644 --- a/citest/config.mysql.ini +++ b/citest/config.mysql.ini @@ -175,6 +175,7 @@ template = 0 [MySQL] # MySQL configuration dbserver = localhost +dbport = 3306 #default port: 3306 dbuser = boswatch dbpassword = root database = boswatch From 52e724be5dd11ec7680467a5de28c831f5ab79a1 Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Sat, 23 Dec 2017 18:24:05 +0100 Subject: [PATCH 07/29] fix travis build --- citest/config.httpRequest.ini | 4 +++- citest/config.mysql.ini | 3 ++- config/config.template.ini | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/citest/config.httpRequest.ini b/citest/config.httpRequest.ini index 665a66e..512070a 100644 --- a/citest/config.httpRequest.ini +++ b/citest/config.httpRequest.ini @@ -174,8 +174,10 @@ template = 0 [MySQL] # MySQL configuration +#default port: 3306 dbserver = localhost -dbuser = root +dbport = 3306 +dbuser = boswatch dbpassword = root database = boswatch diff --git a/citest/config.mysql.ini b/citest/config.mysql.ini index 723df46..bad62e6 100644 --- a/citest/config.mysql.ini +++ b/citest/config.mysql.ini @@ -174,8 +174,9 @@ template = 0 [MySQL] # MySQL configuration +#default port: 3306 dbserver = localhost -dbport = 3306 #default port: 3306 +dbport = 3306 dbuser = boswatch dbpassword = root database = boswatch diff --git a/config/config.template.ini b/config/config.template.ini index 23cf14b..8f21093 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -191,8 +191,9 @@ template = 0 [MySQL] # MySQL configuration +#default port: 3306 dbserver = localhost -dbport = 3306 #default port: 3306 +dbport = 3306 dbuser = boswatch dbpassword = root database = boswatch From 7c6611a072854b2d8e3e22380e69aee567c6ce6c Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Wed, 3 Jan 2018 12:10:20 +0100 Subject: [PATCH 08/29] fix mysql plugin --- plugins/MySQL/MySQL.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/MySQL/MySQL.py b/plugins/MySQL/MySQL.py index 69bbb22..c38410f 100644 --- a/plugins/MySQL/MySQL.py +++ b/plugins/MySQL/MySQL.py @@ -111,7 +111,7 @@ def run(typ,freq,data): elif typ == "POC": if isSignal(data["ric"]): - if globalVars.config.getint("POC","netIdent_histry"): + if globalVars.config.getint("POC","netIdent_history"): cursor.execute("INSERT INTO "+globalVars.config.get("MySQL","tableSIG")+" (time,ric) VALUES (NOW(), '"+data["ric"]+"');") else: cursor.execute("UPDATE "+globalVars.config.get("MySQL","tableSIG")+" SET time = NOW() WHERE ric = '"+data["ric"]+"';") From 64a5fe5868eeee5ca713d9b100cd32a012dfe528 Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Wed, 3 Jan 2018 12:13:43 +0100 Subject: [PATCH 09/29] edit CL --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9abc23..a778e71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ ##### Deprecated ##### Removed ##### Fixed +- Fehler beim auslesen der netIdent_RIC im MySQL Plugin [#347](https://github.com/Schrolli91/BOSWatch/pull/347) ##### Security From 173e552018fc85ec09448203dc0340a57d57c325 Mon Sep 17 00:00:00 2001 From: Florian Date: Sun, 14 Jan 2018 23:33:39 +0100 Subject: [PATCH 10/29] Enabling FMS and ZVEI for Pushover - enabling alarmtype-specific titles and messages (and prios) --- config/config.template.ini | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/config/config.template.ini b/config/config.template.ini index 8f21093..496070b 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -377,14 +377,24 @@ api_key = # Pushover Userkey or Groupkey to receive message user_key = -# Title of the message -title = BOSWatch Message - +# Section for POCSAG # Adapt Pocsag Subric (a,b,c,d) to Pushover Priorities (see https://pushover.net/api#priority) -SubA = 0 -SubB = 2 -SubC = 1 -SubD = 0 +SubA = 1 +SubB = 1 +SubC = 2 +SubD = -2 +poc_title = Alarm: %RIC%%LPAR%%FUNCCHAR%%RPAR% +poc_message = %DATE% %TIME% - %DESCR%: %MSG% + +# Section for ZVEI +zvei_prio = 1 +zvei_title = Alarm: %ZVEI% +zvei_message = %DATE% %TIME%: %ZVEI% + +# Section for FMS +fms_prio = 1 +fms_title = FMS: %FMS% +fms_message = %DATE% %TIME%: %FMS%%BR%Status: %STATUS% - Direction: %DIRT% - TSI: %TSI% %LPAR%%DESCR%%RPAR% # how often should Pushover re-alert in seconds (emergency-messages) retry = 30 From 098fcc2c460710b30795d71ae124b39447e06455 Mon Sep 17 00:00:00 2001 From: Florian Date: Sun, 14 Jan 2018 23:35:31 +0100 Subject: [PATCH 11/29] Increasing functions for FMS and ZVEI - reading new sections from config - enabling wildcard-handling - sending POCSAG, ZVEI and FMS --- plugins/Pushover/Pushover.py | 91 ++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 30 deletions(-) diff --git a/plugins/Pushover/Pushover.py b/plugins/Pushover/Pushover.py index 1f97c95..d1edb66 100644 --- a/plugins/Pushover/Pushover.py +++ b/plugins/Pushover/Pushover.py @@ -16,6 +16,7 @@ from includes import globalVars # Global variables #from includes.helper import timeHandler from includes.helper import configHandler +from includes.helper import wildcardHandler ## # @@ -59,31 +60,62 @@ def run(typ,freq,data): try: if configHandler.checkConfig("Pushover"): #read and debug the config - try: + if typ == "FMS": + # + # building message for FMS + # + + message = globalVars.config.get("Pushover", "fms_message") + title = globalVars.config.get("Pushover", "fms_title") + priority = globalVars.config.get("Pushover", "fms_prio") + logging.debug("Sending message: %s", message) + + elif typ == "ZVEI": + # + # building message for ZVEI + # + message = globalVars.config.get("Pushover", "zvei_message") + title = globalVars.config.get("Pushover", "zvei_title") + priority = globalVars.config.get("Pushover", "zvei_prio") + logging.debug("Sending message: %s", message) + + elif typ == "POC": + # # Pushover-Request # - logging.debug("send Pushover %s", typ) - - if data["function"] == '1': - priority = globalVars.config.get("Pushover", "SubA") - elif data["function"] == '2': - priority = globalVars.config.get("Pushover", "SubB") - elif data["function"] == '3': - priority = globalVars.config.get("Pushover", "SubC") - elif data["function"] == '4': - priority = globalVars.config.get("Pushover", "SubD") - else: - priority = 0 - + logging.debug("send Pushover for %s", typ) + + if data["function"] == '1': + priority = globalVars.config.get("Pushover", "SubA") + elif data["function"] == '2': + priority = globalVars.config.get("Pushover", "SubB") + elif data["function"] == '3': + priority = globalVars.config.get("Pushover", "SubC") + elif data["function"] == '4': + priority = globalVars.config.get("Pushover", "SubD") + else: + priority = 0 + message = globalVars.config.get("Pushover", "poc_message") + title = globalVars.config.get("Pushover", "poc_title") + + else: + logging.warning("Invalid type: %s", typ) + + try: + # replace the wildcards + message = wildcardHandler.replaceWildcards(message,data) + title = wildcardHandler.replaceWildcards(title,data) + + # start the connection conn = httplib.HTTPSConnection("api.pushover.net:443") conn.request("POST", "/1/messages.json", urllib.urlencode({ "token": globalVars.config.get("Pushover", "api_key"), "user": globalVars.config.get("Pushover", "user_key"), - "message": ""+data["description"]+"
"+data["msg"].replace(";", "
"), + "message": message, "html": globalVars.config.get("Pushover", "html"), - "title": globalVars.config.get("Pushover", "title"), + "title": title, "priority": priority, "retry": globalVars.config.get("Pushover", "retry"), "expire": globalVars.config.get("Pushover", "expire") @@ -94,20 +126,19 @@ def run(typ,freq,data): logging.debug("cannot send Pushover request", exc_info=True) return - else: - try: - # - # check Pushover-Response - # - response = conn.getresponse() - if str(response.status) == "200": #Check Pushover Response and print a Log or Error - logging.debug("Pushover response: %s - %s" , str(response.status), str(response.reason)) - else: - logging.warning("Pushover response: %s - %s" , str(response.status), str(response.reason)) - except: #otherwise - logging.error("cannot get Pushover response") - logging.debug("cannot get Pushover response", exc_info=True) - return + try: + # + # check Pushover-Response + # + response = conn.getresponse() + if str(response.status) == "200": #Check Pushover Response and print a Log or Error + logging.debug("Pushover response: %s - %s" , str(response.status), str(response.reason)) + else: + logging.warning("Pushover response: %s - %s" , str(response.status), str(response.reason)) + except: #otherwise + logging.error("cannot get Pushover response") + logging.debug("cannot get Pushover response", exc_info=True) + return finally: logging.debug("close Pushover-Connection") From f92ce0d5f8ca3da203943b3694a39e5a8a34874a Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Mon, 15 Jan 2018 06:55:52 +0100 Subject: [PATCH 12/29] edit CL --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a778e71..c4e9d3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,13 @@ ### __[v2.3.1]__ - Unreleased ##### Added - Config Eintrag um Port für MySQL Plugin festzulegen [#345](https://github.com/Schrolli91/BOSWatch/pull/345) +- FMS und ZVEI Support für Pushover Plugin [#352](https://github.com/Schrolli91/BOSWatch/pull/352) +- Benutzerdefinierte Nachrichten für Pushover Plugin in config [#352](https://github.com/Schrolli91/BOSWatch/pull/352) ##### Changed ##### Deprecated ##### Removed ##### Fixed -- Fehler beim auslesen der netIdent_RIC im MySQL Plugin [#347](https://github.com/Schrolli91/BOSWatch/pull/347) +- Fehler beim Auslesen der netIdent_RIC im MySQL Plugin [#347](https://github.com/Schrolli91/BOSWatch/pull/347) ##### Security From cf1b5b3fc4960f6c688d242b227c00d4e8e24666 Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Mon, 15 Jan 2018 06:56:12 +0100 Subject: [PATCH 13/29] PEP8 changes to pushover --- .gitignore | 2 + plugins/Pushover/Pushover.py | 225 ++++++++++++++++++----------------- 2 files changed, 115 insertions(+), 112 deletions(-) diff --git a/.gitignore b/.gitignore index 3b70e90..f37fd5c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ log/ \.pydevproject \.settings/ + +\.idea/ diff --git a/plugins/Pushover/Pushover.py b/plugins/Pushover/Pushover.py index d1edb66..d220de6 100644 --- a/plugins/Pushover/Pushover.py +++ b/plugins/Pushover/Pushover.py @@ -9,31 +9,32 @@ Pushover-Plugin to send FMS-, ZVEI- and POCSAG - messages to Pushover Clients @requires: Pushover-Configuration has to be set in the config.ini """ -import logging # Global logger -import httplib #for the HTTP request +import logging # Global logger +import httplib # for the HTTP request import urllib from includes import globalVars # Global variables -#from includes.helper import timeHandler +# from includes.helper import timeHandler from includes.helper import configHandler from includes.helper import wildcardHandler + ## # # onLoad (init) function of plugin # will be called one time by the pluginLoader on start # def onLoad(): - """ - While loading the plugins by pluginLoader.loadPlugins() - this onLoad() routine is called one time for initialize the plugin + """ + While loading the plugins by pluginLoader.loadPlugins() + this onLoad() routine is called one time for initialize the plugin - @requires: nothing + @requires: nothing - @return: nothing - """ - # nothing to do for this plugin - return + @return: nothing + """ + # nothing to do for this plugin + return ## @@ -41,112 +42,112 @@ def onLoad(): # Main function of Pushover-plugin # will be called by the alarmHandler # -def run(typ,freq,data): - """ - This function is the implementation of the Pushover-Plugin. - It will send the data to Pushover API +def run(typ, freq, data): + """ + This function is the implementation of the Pushover-Plugin. + It will send the data to Pushover API - @type typ: string (FMS|ZVEI|POC) - @param typ: Typ of the dataset - @type data: map of data (structure see readme.md in plugin folder) - @param data: Contains the parameter - @type freq: string - @keyword freq: frequency of the SDR Stick + @type typ: string (FMS|ZVEI|POC) + @param typ: Typ of the dataset + @type data: map of data (structure see readme.md in plugin folder) + @param data: Contains the parameter + @type freq: string + @keyword freq: frequency of the SDR Stick - @requires: Pushover-Configuration has to be set in the config.ini + @requires: Pushover-Configuration has to be set in the config.ini - @return: nothing - """ - try: - if configHandler.checkConfig("Pushover"): #read and debug the config + @return: nothing + """ + try: + if configHandler.checkConfig("Pushover"): # read and debug the config - if typ == "FMS": - # - # building message for FMS - # - - message = globalVars.config.get("Pushover", "fms_message") - title = globalVars.config.get("Pushover", "fms_title") - priority = globalVars.config.get("Pushover", "fms_prio") - logging.debug("Sending message: %s", message) - - elif typ == "ZVEI": - # - # building message for ZVEI - # - message = globalVars.config.get("Pushover", "zvei_message") - title = globalVars.config.get("Pushover", "zvei_title") - priority = globalVars.config.get("Pushover", "zvei_prio") - logging.debug("Sending message: %s", message) - - elif typ == "POC": - - # - # Pushover-Request - # - logging.debug("send Pushover for %s", typ) - - if data["function"] == '1': - priority = globalVars.config.get("Pushover", "SubA") - elif data["function"] == '2': - priority = globalVars.config.get("Pushover", "SubB") - elif data["function"] == '3': - priority = globalVars.config.get("Pushover", "SubC") - elif data["function"] == '4': - priority = globalVars.config.get("Pushover", "SubD") - else: - priority = 0 - message = globalVars.config.get("Pushover", "poc_message") - title = globalVars.config.get("Pushover", "poc_title") - - else: - logging.warning("Invalid type: %s", typ) - - try: - # replace the wildcards - message = wildcardHandler.replaceWildcards(message,data) - title = wildcardHandler.replaceWildcards(title,data) - - # start the connection - conn = httplib.HTTPSConnection("api.pushover.net:443") - conn.request("POST", "/1/messages.json", - urllib.urlencode({ - "token": globalVars.config.get("Pushover", "api_key"), - "user": globalVars.config.get("Pushover", "user_key"), - "message": message, - "html": globalVars.config.get("Pushover", "html"), - "title": title, - "priority": priority, - "retry": globalVars.config.get("Pushover", "retry"), - "expire": globalVars.config.get("Pushover", "expire") - }),{"Content-type": "application/x-www-form-urlencoded"}) + if typ == "FMS": + # + # building message for FMS + # - except: - logging.error("cannot send Pushover request") - logging.debug("cannot send Pushover request", exc_info=True) - return + message = globalVars.config.get("Pushover", "fms_message") + title = globalVars.config.get("Pushover", "fms_title") + priority = globalVars.config.get("Pushover", "fms_prio") + logging.debug("Sending message: %s", message) - try: - # - # check Pushover-Response - # - response = conn.getresponse() - if str(response.status) == "200": #Check Pushover Response and print a Log or Error - logging.debug("Pushover response: %s - %s" , str(response.status), str(response.reason)) - else: - logging.warning("Pushover response: %s - %s" , str(response.status), str(response.reason)) - except: #otherwise - logging.error("cannot get Pushover response") - logging.debug("cannot get Pushover response", exc_info=True) - return + elif typ == "ZVEI": + # + # building message for ZVEI + # + message = globalVars.config.get("Pushover", "zvei_message") + title = globalVars.config.get("Pushover", "zvei_title") + priority = globalVars.config.get("Pushover", "zvei_prio") + logging.debug("Sending message: %s", message) - finally: - logging.debug("close Pushover-Connection") - try: - request.close() - except: - pass + elif typ == "POC": - except: - logging.error("unknown error") - logging.debug("unknown error", exc_info=True) + # + # Pushover-Request + # + logging.debug("send Pushover for %s", typ) + + if data["function"] == '1': + priority = globalVars.config.get("Pushover", "SubA") + elif data["function"] == '2': + priority = globalVars.config.get("Pushover", "SubB") + elif data["function"] == '3': + priority = globalVars.config.get("Pushover", "SubC") + elif data["function"] == '4': + priority = globalVars.config.get("Pushover", "SubD") + else: + priority = 0 + message = globalVars.config.get("Pushover", "poc_message") + title = globalVars.config.get("Pushover", "poc_title") + + else: + logging.warning("Invalid type: %s", typ) + + try: + # replace the wildcards + message = wildcardHandler.replaceWildcards(message, data) + title = wildcardHandler.replaceWildcards(title, data) + + # start the connection + conn = httplib.HTTPSConnection("api.pushover.net:443") + conn.request("POST", "/1/messages.json", + urllib.urlencode({ + "token": globalVars.config.get("Pushover", "api_key"), + "user": globalVars.config.get("Pushover", "user_key"), + "message": message, + "html": globalVars.config.get("Pushover", "html"), + "title": title, + "priority": priority, + "retry": globalVars.config.get("Pushover", "retry"), + "expire": globalVars.config.get("Pushover", "expire") + }), {"Content-type": "application/x-www-form-urlencoded"}) + + except: + logging.error("cannot send Pushover request") + logging.debug("cannot send Pushover request", exc_info=True) + return + + try: + # + # check Pushover-Response + # + response = conn.getresponse() + if str(response.status) == "200": # Check Pushover Response and print a Log or Error + logging.debug("Pushover response: %s - %s", str(response.status), str(response.reason)) + else: + logging.warning("Pushover response: %s - %s", str(response.status), str(response.reason)) + except: # otherwise + logging.error("cannot get Pushover response") + logging.debug("cannot get Pushover response", exc_info=True) + return + + finally: + logging.debug("close Pushover-Connection") + try: + request.close() + except: + pass + + except: + logging.error("unknown error") + logging.debug("unknown error", exc_info=True) From 5209ac0804bbe799d172260643b266b1364953ad Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Thu, 18 Jan 2018 08:00:30 +0100 Subject: [PATCH 14/29] edit comment in config (%FUNCTEXT%) --- config/config.template.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/config/config.template.ini b/config/config.template.ini index 496070b..d17cd3f 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -486,6 +486,7 @@ test2 = 123456 # %RIC% = POCSAG RIC # %FUNC% = POCSAG function/Subric (1-4) # %FUNCCHAR% = POCSAG function/Subric als character (a-d) +# %FUNCTEXT% = POCSAG static Subric message (see [POC]) # %MSG% = Message of the POCSAG telegram # %BITRATE% = Bitrate of the POCSAG telegram # %DESCR% = Description, if description-module is used From fcae71a7d1a88777fcec64f39593c591f65cab9e Mon Sep 17 00:00:00 2001 From: CJHarms Date: Tue, 13 Feb 2018 18:31:04 +0100 Subject: [PATCH 15/29] Added some more Logging Added more Debug Logging for the alarmHeaders --- plugins/FFAgent/FFAgent.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index 8dcff85..fa16d76 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -132,6 +132,7 @@ def run(typ,freq,data): "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest() } + logging.debug(alarmHeaders) if globalVars.config.get("FFAgent", "live") == "1": r = requests.post(url, data=alarmData, headers=headers, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) From 14df7d7fa40744cd4f873efefdc6a41ec7ab9218 Mon Sep 17 00:00:00 2001 From: CJHarms Date: Tue, 13 Feb 2018 18:31:40 +0100 Subject: [PATCH 16/29] Fixed small Typo Fixed a small Typo --- plugins/FFAgent/FFAgent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index fa16d76..561ca86 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -135,7 +135,7 @@ def run(typ,freq,data): logging.debug(alarmHeaders) if globalVars.config.get("FFAgent", "live") == "1": - r = requests.post(url, data=alarmData, headers=headers, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) + r = requests.post(url, data=alarmData, headers=alarmHeaders, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) else: r = requests.post(url, data=alarmData, headers=alarmHeaders, verify=serverCertFile) From 0468db2647d8d36f098bfd64832cb6bf2666dc38 Mon Sep 17 00:00:00 2001 From: Florian Date: Thu, 15 Feb 2018 12:20:39 +0100 Subject: [PATCH 17/29] Fixing deprecated functions Replacing old functions --- exampleAddOns/simpleWeb/mysql.class.php | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/exampleAddOns/simpleWeb/mysql.class.php b/exampleAddOns/simpleWeb/mysql.class.php index 69d5fbd..a74b4b6 100644 --- a/exampleAddOns/simpleWeb/mysql.class.php +++ b/exampleAddOns/simpleWeb/mysql.class.php @@ -23,16 +23,16 @@ Simple Database Class (C) by Bastian Schroll function __construct($host, $user, $password, $database, $show_error = 1) { $this->show_error = $show_error; - @$this->conn = mysql_connect($host, $user, $password); + @$this->conn = mysqli_connect($host, $user, $password); if ($this->conn == false) { - $this->error("Keine Verbindung zum Datenbank Server!", mysql_error()); + $this->error("Keine Verbindung zum Datenbank Server!", mysqli_error($this->conn)); return false; } - if (!@mysql_select_db($database, $this->conn)) + if (!@mysqli_select_db($this->conn, $database)) { - $this->error("Datenbank nicht gefunden!", mysql_error()); + $this->error("Datenbank nicht gefunden!", mysqli_error($this->conn)); return false; } return true; @@ -41,17 +41,17 @@ Simple Database Class (C) by Bastian Schroll /** * Database::query() * - * F�hrt einen MySQL Query aus + * Fuehrt einen MySQL Query aus * - * @param mixed $query Auszuf�hrender Query + * @param mixed $query Auszufuehrender Query * @return Result-Handler/FALSE */ function query($query) { - $this->result = @mysql_query($query, $this->conn); + $this->result = @mysqli_query($this->conn, $query); if ($this->result == false) { - $this->error("Fehlerhafte Datenbank Anfrage!", mysql_error()); + $this->error("Fehlerhafte Datenbank Anfrage!", mysqli_error($this->conn)); return false; } return $this->result; @@ -60,51 +60,51 @@ Simple Database Class (C) by Bastian Schroll /** * Database::fetchAssoc() * - * Liefert alle gefundnen Datens�tze als Assoc + * Liefert alle gefundnen Datensaetze als Assoc * * @param mixed $result Externer Result-Handler - * @return gefundene Datens�tze als Assoc + * @return gefundene Datensaetze als Assoc */ function fetchAssoc($result = null) { if ($result != null) { - return @mysql_fetch_assoc($result); + return @mysqli_fetch_assoc($result); } else { - return @mysql_fetch_assoc($this->result); + return @mysqli_fetch_assoc($this->result); } } /** * Database::count() * - * Z�hlt alle gefundenen Datens�tze + * Zaehlt alle gefundenen Datensaetze * * @param mixed $result Externer Result-Handler - * @return Anzahl gefundener Datens�tze + * @return Anzahl gefundener Datensaetze */ function count($result = null) { if ($result != null) { - return @mysql_num_rows($result); + return @mysqli_num_rows($result); } else { - return @mysql_num_rows($this->result); + return @mysqli_num_rows($this->result); } } /** * Database::closeConnection() * - * Schlie�t die bestehende MySQL Verbindung + * Schliesst die bestehende MySQL Verbindung * * @return TRUE/FALSE */ function closeConnection() { - if (!@mysql_close($this->conn)) + if (!@mysqli_close($this->conn)) { $this->error("Verbindung zur Datenbank konnte nicht getrennt werden!", mysql_error()); return false; From 9257cb2cfe654295ae23950e3bc57900c154ea73 Mon Sep 17 00:00:00 2001 From: CJHarms Date: Fri, 16 Feb 2018 22:07:45 +0100 Subject: [PATCH 18/29] Convert alarmHeaders to OrderedDict Used OrderedDict for the alarmHeaders to make sure the Dictionary Order is preserved to serve a correctly formated and ordered JSON when using Perl <3.6 --- plugins/FFAgent/FFAgent.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index 561ca86..759ec19 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -18,6 +18,9 @@ from includes import globalVars # Global variables #from includes.helper import timeHandler from includes.helper import configHandler +# needed for Ordered Dictionaries to serve correctly ordered JSON +from collections import OrderedDict + ## # # onLoad (init) function of plugin @@ -125,13 +128,13 @@ def run(typ,freq,data): alarmData = json.dumps(alarmData) logging.debug(alarmData) - alarmHeaders = { - "Content-Type": "application/json", - "webApiToken": webApiToken, - "accessToken": accessToken, - "selectiveCallCode": selectiveCallCode, - "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest() - } + alarmHeaders = OrderedDict([ + ("Content-Type", "application/json"), + ("webApiToken", webApiToken), + ("accessToken", accessToken), + ("selectiveCallCode", selectiveCallCode), + ("hmac", hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()) + ]) logging.debug(alarmHeaders) if globalVars.config.get("FFAgent", "live") == "1": From 3ed90b4a97c6c8aa39bdedf36ca0b6e3e2d4809f Mon Sep 17 00:00:00 2001 From: CJHarms Date: Mon, 19 Feb 2018 17:37:02 +0100 Subject: [PATCH 19/29] Revert "Convert alarmHeaders to OrderedDict" This reverts commit 9257cb2cfe654295ae23950e3bc57900c154ea73. --- plugins/FFAgent/FFAgent.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index 759ec19..561ca86 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -18,9 +18,6 @@ from includes import globalVars # Global variables #from includes.helper import timeHandler from includes.helper import configHandler -# needed for Ordered Dictionaries to serve correctly ordered JSON -from collections import OrderedDict - ## # # onLoad (init) function of plugin @@ -128,13 +125,13 @@ def run(typ,freq,data): alarmData = json.dumps(alarmData) logging.debug(alarmData) - alarmHeaders = OrderedDict([ - ("Content-Type", "application/json"), - ("webApiToken", webApiToken), - ("accessToken", accessToken), - ("selectiveCallCode", selectiveCallCode), - ("hmac", hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()) - ]) + alarmHeaders = { + "Content-Type": "application/json", + "webApiToken": webApiToken, + "accessToken": accessToken, + "selectiveCallCode": selectiveCallCode, + "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest() + } logging.debug(alarmHeaders) if globalVars.config.get("FFAgent", "live") == "1": From 6ce67f24ddd596a9dc273e9e9196feecfc1f2a4b Mon Sep 17 00:00:00 2001 From: f-kessler Date: Thu, 22 Feb 2018 14:20:33 +0100 Subject: [PATCH 20/29] Enhancement for multicastAlarm. The RICs configured in multicastAlarm_delimiter_ric and multicastAlarm_ric no longer need to be included in allow_ric or filter_range_start/filter_range_end. --- includes/decoders/poc.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/includes/decoders/poc.py b/includes/decoders/poc.py index da86318..30a0e22 100644 --- a/includes/decoders/poc.py +++ b/includes/decoders/poc.py @@ -62,11 +62,23 @@ def isAllowed(poc_id): return True else: allowed = 0 + # 5.) Implementation for multicastAlarm + if globalVars.config.get("multicastAlarm", "multicastAlarm_delimiter_ric"): + if poc_id in globalVars.config.get("multicastAlarm", "multicastAlarm_delimiter_ric"): + logging.info("RIC %s as multicastAlarm delimiter", poc_id) + return True + else: + allowed = 0 + if globalVars.config.get("multicastAlarm", "multicastAlarm_ric"): + if poc_id in globalVars.config.get("multicastAlarm", "multicastAlarm_ric"): + logging.info("RIC %s as multicastAlarm message", poc_id) + return True + else: + allowed = 0 if allowed == 0: return False return True - ## # # POCSAG decoder function From fadb1de813ca30d8dc97838bbca51bb4f412504d Mon Sep 17 00:00:00 2001 From: f-kessler Date: Fri, 23 Feb 2018 14:42:47 +0100 Subject: [PATCH 21/29] =?UTF-8?q?347=20und=20357=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c4e9d3a..3a5e25e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,10 +7,13 @@ - FMS und ZVEI Support für Pushover Plugin [#352](https://github.com/Schrolli91/BOSWatch/pull/352) - Benutzerdefinierte Nachrichten für Pushover Plugin in config [#352](https://github.com/Schrolli91/BOSWatch/pull/352) ##### Changed +- multicastAlarm Plugin - RICs die von multicastAlarm genutzt werden, müssen nicht mehr in der config bei allow_ric bzw. filter_range_start/filter_range_end berücksichtigt werden. [#357](https://github.com/Schrolli91/BOSWatch/pull/357) +- FFAgent Plugin - Debug Logging für die alarmHeaders eingebaut zwecks Troubleshooting [#354](https://github.com/Schrolli91/BOSWatch/pull/354) ##### Deprecated ##### Removed ##### Fixed - Fehler beim Auslesen der netIdent_RIC im MySQL Plugin [#347](https://github.com/Schrolli91/BOSWatch/pull/347) +- FFAgent Plugin - Typo bei alarmHeaders für Live Betrieb gefixt [#354](https://github.com/Schrolli91/BOSWatch/pull/354) ##### Security From 58ad0e5308a995fb5ebced9c79691ed4523b292b Mon Sep 17 00:00:00 2001 From: f-kessler Date: Fri, 10 Aug 2018 23:12:42 +0200 Subject: [PATCH 22/29] Clear buffer after multicastAlarm_ric received Fix for networks that mix normal alarms with multicastAlarms (delimiter needs to be deactivated). If the delimiter is deactivated, RICs in the buffer will be deleted only if they are older than multicastAlarm_ignore_time. This could cause a mixture of RICs of the current and the privious multicastAlarm. This problem can be fixed, by clearing the buffer after the multicastAlarm sequence has finished. --- includes/multicastAlarm.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/includes/multicastAlarm.py b/includes/multicastAlarm.py index 40a8344..b6d1e7d 100644 --- a/includes/multicastAlarm.py +++ b/includes/multicastAlarm.py @@ -58,6 +58,8 @@ def multicastAlarmExec(freq, data): try: from includes import alarmHandler alarmHandler.processAlarmHandler("POC", freq, data) + multiList = [] + logging.debug("multicastAlarm finished - buffer cleared") except: logging.error("processing alarm failed") logging.debug("processing alarm failed", exc_info=True) From 86c0467ee23b05982171f58333d2739d3dd63a2b Mon Sep 17 00:00:00 2001 From: f-kessler Date: Fri, 10 Aug 2018 23:19:08 +0200 Subject: [PATCH 23/29] Updated description for the multicastAlarm_delimiter_ric --- config/config.template.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.template.ini b/config/config.template.ini index d17cd3f..11a6caf 100644 --- a/config/config.template.ini +++ b/config/config.template.ini @@ -144,7 +144,7 @@ multicastAlarm = 0 # time limit for alarms that do not belong to the multicastAlarm sequence in seconds multicastAlarm_ignore_time = 15 -# multicastAlarm delimiter RIC (usually used as a starting point for a alarm sequence) (can be empty) +# multicastAlarm delimiter RIC (usually used as a starting point for a alarm sequence). Needs to be empty if multicastAlarms are interrupted by normal alarms. multicastAlarm_delimiter_ric = # multicastAlarm RIC that is used to send the text message From 8c1351ccbd467f2b6bb2ef44b45687021dbc054d Mon Sep 17 00:00:00 2001 From: f-kessler Date: Sat, 11 Aug 2018 12:52:30 +0200 Subject: [PATCH 24/29] fixed the delete of all contents in multiList --- includes/multicastAlarm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/multicastAlarm.py b/includes/multicastAlarm.py index b6d1e7d..e9b8122 100644 --- a/includes/multicastAlarm.py +++ b/includes/multicastAlarm.py @@ -29,7 +29,7 @@ def newEntrymultiList(data): timestamp = int(time.time()) # multicastAlarm processing if enabled and delimiter RIC has been received if data['ric'] == globalVars.config.get("multicastAlarm", "multicastAlarm_delimiter_ric"): - multiList = [] + del multiList[:] logging.debug("delimiter RIC received - buffer cleared") else: multiList.append([data, timestamp]) @@ -58,7 +58,7 @@ def multicastAlarmExec(freq, data): try: from includes import alarmHandler alarmHandler.processAlarmHandler("POC", freq, data) - multiList = [] + del multiList[:] logging.debug("multicastAlarm finished - buffer cleared") except: logging.error("processing alarm failed") From ce144c82e19fa3517971cc94ba27f4d2a5c54703 Mon Sep 17 00:00:00 2001 From: f-kessler Date: Sat, 11 Aug 2018 13:37:30 +0200 Subject: [PATCH 25/29] moved delete to the end of the function --- includes/multicastAlarm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/multicastAlarm.py b/includes/multicastAlarm.py index e9b8122..d8736fd 100644 --- a/includes/multicastAlarm.py +++ b/includes/multicastAlarm.py @@ -58,8 +58,8 @@ def multicastAlarmExec(freq, data): try: from includes import alarmHandler alarmHandler.processAlarmHandler("POC", freq, data) - del multiList[:] - logging.debug("multicastAlarm finished - buffer cleared") except: logging.error("processing alarm failed") logging.debug("processing alarm failed", exc_info=True) + del multiList[:] + logging.debug("multicastAlarm finished - buffer cleared") From e5db9fed097970c1a3492dfb005e5842f661ec6e Mon Sep 17 00:00:00 2001 From: f-kessler Date: Sat, 11 Aug 2018 16:43:38 +0200 Subject: [PATCH 26/29] fixed indenting bug --- includes/multicastAlarm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/multicastAlarm.py b/includes/multicastAlarm.py index d8736fd..8aafadd 100644 --- a/includes/multicastAlarm.py +++ b/includes/multicastAlarm.py @@ -61,5 +61,5 @@ def multicastAlarmExec(freq, data): except: logging.error("processing alarm failed") logging.debug("processing alarm failed", exc_info=True) - del multiList[:] - logging.debug("multicastAlarm finished - buffer cleared") + del multiList[:] + logging.debug("multicastAlarm finished - buffer cleared") From 95262e0c7c5f74ed64f38d338b9bbdfe51c05ffc Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Wed, 15 Aug 2018 07:26:22 +0200 Subject: [PATCH 27/29] edit dev version --- includes/globalVars.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/globalVars.py b/includes/globalVars.py index 3b71248..b14594d 100644 --- a/includes/globalVars.py +++ b/includes/globalVars.py @@ -9,7 +9,7 @@ Global variables """ # version info -versionNr = "2.3.1" +versionNr = "2.5" branch = "dev" buildDate = "unreleased" From cf7e8ead5afbbdf4eed296e0e36e3591a58855c5 Mon Sep 17 00:00:00 2001 From: f-kessler Date: Thu, 16 Aug 2018 10:58:10 +0200 Subject: [PATCH 28/29] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a5e25e..e9475dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ##### Changed - multicastAlarm Plugin - RICs die von multicastAlarm genutzt werden, müssen nicht mehr in der config bei allow_ric bzw. filter_range_start/filter_range_end berücksichtigt werden. [#357](https://github.com/Schrolli91/BOSWatch/pull/357) - FFAgent Plugin - Debug Logging für die alarmHeaders eingebaut zwecks Troubleshooting [#354](https://github.com/Schrolli91/BOSWatch/pull/354) +- multicastAlarm Plugin - Buffer nach jedem Alarm löschen - erlaubt in kombination mit "doubleFilter_check_msg" die Verwendung in Netzen, die zwischen multicastAlarm RICs auch normale Alarme senden. #370(https://github.com/Schrolli91/BOSWatch/pull/370) ##### Deprecated ##### Removed ##### Fixed From dbaedf83b5319e038932a6b477993ae1511182dd Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Thu, 16 Aug 2018 20:17:33 +0200 Subject: [PATCH 29/29] v2.4 prepare --- CHANGELOG.md | 6 +----- includes/globalVars.py | 6 +++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9475dc..9530fae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,6 @@ # Changelog - -### __[v2.3.1]__ - Unreleased +### __[v2.4]__ - 17.08.2018 ##### Added - Config Eintrag um Port für MySQL Plugin festzulegen [#345](https://github.com/Schrolli91/BOSWatch/pull/345) - FMS und ZVEI Support für Pushover Plugin [#352](https://github.com/Schrolli91/BOSWatch/pull/352) @@ -10,12 +9,9 @@ - multicastAlarm Plugin - RICs die von multicastAlarm genutzt werden, müssen nicht mehr in der config bei allow_ric bzw. filter_range_start/filter_range_end berücksichtigt werden. [#357](https://github.com/Schrolli91/BOSWatch/pull/357) - FFAgent Plugin - Debug Logging für die alarmHeaders eingebaut zwecks Troubleshooting [#354](https://github.com/Schrolli91/BOSWatch/pull/354) - multicastAlarm Plugin - Buffer nach jedem Alarm löschen - erlaubt in kombination mit "doubleFilter_check_msg" die Verwendung in Netzen, die zwischen multicastAlarm RICs auch normale Alarme senden. #370(https://github.com/Schrolli91/BOSWatch/pull/370) -##### Deprecated -##### Removed ##### Fixed - Fehler beim Auslesen der netIdent_RIC im MySQL Plugin [#347](https://github.com/Schrolli91/BOSWatch/pull/347) - FFAgent Plugin - Typo bei alarmHeaders für Live Betrieb gefixt [#354](https://github.com/Schrolli91/BOSWatch/pull/354) -##### Security ### __[v2.3]__ - 22.12.2017 diff --git a/includes/globalVars.py b/includes/globalVars.py index b14594d..a809c19 100644 --- a/includes/globalVars.py +++ b/includes/globalVars.py @@ -9,9 +9,9 @@ Global variables """ # version info -versionNr = "2.5" -branch = "dev" -buildDate = "unreleased" +versionNr = "2.4" +branch = "master" +buildDate = "17.08.2018" # Global variables