expand notifyMyAndroid-plugin for multi recipients and/or different priorities #33

use csv/nma.csv to config different priorities or multiple recipients
This commit is contained in:
JHCD 2015-07-28 22:50:22 +02:00
parent 990f0b579d
commit b529e93763
5 changed files with 291 additions and 99 deletions

View file

@ -1,73 +1,73 @@
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Logging Handler for NotifyMyAndroid
@author: Jens Herrmann
"""
import logging
from includes.pynma import pynma
class NMAHandler(logging.Handler): # Inherit from logging.Handler
"""
Handler instances dispatch logging events to NotifyMyAndroid.
"""
def __init__(self, APIKey, application="BOSWatch", event="Logging-Handler"):
"""
Initializes the handler with NMA-specific parameters.
@param APIKey: might be a string containing 1 key or an array of keys
@param application: application name [256]
@param event: event name [1000]
"""
# run the regular Handler __init__
logging.Handler.__init__(self)
# Our custom argument
self.APIKey = APIKey
self.application = application
self.event = event
self.nma = pynma.PyNMA(self.APIKey)
def emit(self, record):
"""
Send logging record via NMA
"""
# record.message is the log message
message = record.message
# if exist, add details as NMA event:
# record.module is the module- or filename
if (len(record.module) > 0):
event = "Module: " + record.module
# record.functionName is the name of the function
# will be "<module>" if the message is not in a function
if len(record.funcName) > 0:
if not record.funcName == "<module>":
event += " - " + record.funcName + "()"
else:
# we have to set an event-text, use self.event now
event = self.event
# record.levelno is the log level
# loglevel: 10 = debug => priority: -2
# loglevel: 20 = info => priority: -1
# loglevel: 30 = warning => priority: 0
# loglevel: 40 = error => priority: 1
# loglevel: 50 = critical => priority: 2
if record.levelno >= 50:
priority = 2
elif record.levelno >= 40:
priority = 1
elif record.levelno >= 30:
priority = 0
elif record.levelno >= 20:
priority = -1
else:
priority = -2
# pynma.push(self, application="", event="", description="", url="", contenttype=None, priority=0, batch_mode=False, html=False)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Logging Handler for NotifyMyAndroid
@author: Jens Herrmann
"""
import logging
from includes.pynma import pynma
class NMAHandler(logging.Handler): # Inherit from logging.Handler
"""
Handler instances dispatch logging events to NotifyMyAndroid.
"""
def __init__(self, APIKey, application="BOSWatch", event="Logging-Handler"):
"""
Initializes the handler with NMA-specific parameters.
@param APIKey: might be a string containing 1 key or an array of keys
@param application: application name [256]
@param event: event name [1000]
"""
# run the regular Handler __init__
logging.Handler.__init__(self)
# Our custom argument
self.APIKey = APIKey
self.application = application
self.event = event
self.nma = pynma.PyNMA(self.APIKey)
def emit(self, record):
"""
Send logging record via NMA
"""
# record.message is the log message
message = record.message
# if exist, add details as NMA event:
# record.module is the module- or filename
if (len(record.module) > 0):
event = "Module: " + record.module
# record.functionName is the name of the function
# will be "<module>" if the message is not in a function
if len(record.funcName) > 0:
if not record.funcName == "<module>":
event += " - " + record.funcName + "()"
else:
# we have to set an event-text, use self.event now
event = self.event
# record.levelno is the log level
# loglevel: 10 = debug => priority: -2
# loglevel: 20 = info => priority: -1
# loglevel: 30 = warning => priority: 0
# loglevel: 40 = error => priority: 1
# loglevel: 50 = critical => priority: 2
if record.levelno >= 50:
priority = 2
elif record.levelno >= 40:
priority = 1
elif record.levelno >= 30:
priority = 0
elif record.levelno >= 20:
priority = -1
else:
priority = -2
# pynma.push(self, application="", event="", description="", url="", contenttype=None, priority=0, batch_mode=False, html=False)
self.nma.push(application=self.application, event=event, description=message, priority=priority)

8
includes/pynma/pynma.py Executable file → Normal file
View file

@ -68,6 +68,14 @@ takes 2 optional arguments:
if type(developerkey) == str and len(developerkey) == 48:
self._developerkey = developerkey
def pushWithAPIKey(self, apikey=[], application="", event="", description="", url="", contenttype=None, priority=0, batch_mode=False, html=False):
"""Special Funktion"""
if apikey:
if type(apikey) == str:
apikey = [apikey]
self._apikey = uniq(apikey)
return self.push(application, event, description, url, contenttype, priority, batch_mode, html)
def push(self, application="", event="", description="", url="", contenttype=None, priority=0, batch_mode=False, html=False):
"""Pushes a message on the registered API keys.
takes 5 arguments: