Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pushover-fix #352

Merged
merged 4 commits into from
Jan 18, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ log/
\.pydevproject

\.settings/

\.idea/
4 changes: 3 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
24 changes: 17 additions & 7 deletions config/config.template.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
212 changes: 122 additions & 90 deletions plugins/Pushover/Pushover.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,113 +9,145 @@
@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


##
#
# 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

@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

@return: nothing
"""
try:
if configHandler.checkConfig("Pushover"): #read and debug the config

try:
#
# 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

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": "<b>"+data["description"]+"</b><br>"+data["msg"].replace(";", "<br>"),
"html": globalVars.config.get("Pushover", "html"),
"title": globalVars.config.get("Pushover", "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

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

finally:
logging.debug("close Pushover-Connection")
try:
request.close()
except:
pass

except:
logging.error("unknown error")
logging.debug("unknown error", exc_info=True)
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

@requires: Pushover-Configuration has to be set in the config.ini

@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"})

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)