From 505448a5e86418ecca36eede754e202923c343f3 Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Thu, 22 Feb 2018 13:36:50 +0100 Subject: [PATCH] wildcard.py --- boswatch/plugin/plugin.py | 13 +++++++- boswatch/utils/wildcard.py | 61 ++++++++++++++++++++++++++++---------- plugins/readme.md | 9 ++++-- 3 files changed, 64 insertions(+), 19 deletions(-) diff --git a/boswatch/plugin/plugin.py b/boswatch/plugin/plugin.py index 6e521da..89b3200 100644 --- a/boswatch/plugin/plugin.py +++ b/boswatch/plugin/plugin.py @@ -19,6 +19,7 @@ import time from boswatch.utils import paths from boswatch.config import Config +from boswatch.utils import wildcard logging.debug("- %s loaded", __name__) @@ -33,6 +34,9 @@ class Plugin: self._pluginName = pluginName self._pluginsActive += 1 + # to save the packet while alarm is running for other functions + self._bwPacket = None + # for time counting self._sumTime = 0 self._cumTime = 0 @@ -111,8 +115,8 @@ class Plugin: self._teardownTime = time.time() - self._tmpTime self._sumTime = self._setupTime + self._alarmTime + self._teardownTime self._cumTime += self._sumTime - self._endTime = time.time() + logging.debug("[%s] took %0.3f seconds", self._pluginName, self._sumTime) # logging.debug("- setup: %0.2f sec.", self._setupTime) # logging.debug("- alarm: %0.2f sec.", self._alarmTime) @@ -180,3 +184,10 @@ class Plugin: """!Called by destruction of the plugin Must be inherit""" pass + + def parseWildcards(self, msg): + """!Return the message with parsed wildcards + + todo self._bwPacket is set nowehere!!!! + """ + return wildcard.replaceWildcards(self._bwPacket, msg) diff --git a/boswatch/utils/wildcard.py b/boswatch/utils/wildcard.py index b021421..8a9b53b 100644 --- a/boswatch/utils/wildcard.py +++ b/boswatch/utils/wildcard.py @@ -16,31 +16,65 @@ @todo not completed yet """ import logging +import time # from boswatch.module import file logging.debug("- %s loaded", __name__) -# todo insert all wildcards and delete testcode under the function +# todo check function and document + write an test -def replaceWildcards(message): #, bwPacket): +def replaceWildcards(message, bwPacket): _wildcards = { # formatting wildcards - "%BR%": "\r\n", - "%LPAR%": "(", - "%RPAR%": ")", + "{BR}": "\r\n", + "{LPAR}": "(", + "{RPAR}": ")", + + # info wildcards + "{SNAME}": bwPacket.getField("serverName"), + "{SVERS}": bwPacket.getField("serverVersion"), + "{SDATE}": bwPacket.getField("serverBuildDate"), + "{SBRCH}": bwPacket.getField("serverBranch"), + "{CNAME}": bwPacket.getField("clientName"), + "{CIP}": bwPacket.getField("clientIP"), + "{CVERS}": bwPacket.getField("clientVersion"), + "{CDATE}": bwPacket.getField("clientBuildDate"), + "{CBRCH}": bwPacket.getField("clientBranch"), # boswatch wildcards - "%MODE%": "",# bwPacket.getField("mode"), - "%FREQ% ": "",# bwPacket.getField("frequency") + "{MODE}": bwPacket.getField("mode"), + "{FREQ}": bwPacket.getField("frequency"), + "{DESCS}": bwPacket.getField("descriptionShort"), + "{DESCL}": bwPacket.getField("descriptionLong"), + "{INSRC}": bwPacket.getField("mode"), + "{TIME}": time.time(), + "{TIMES}": bwPacket.getField("mode"), # fms wildcards - # pocsag wildcards - # zvei wildcards - } - message.replace("nett", "test") + "{FMS}": bwPacket.getField("fms"), + "{SERV}": bwPacket.getField("service"), + "{COUNT}": bwPacket.getField("country"), + "{LOC}": bwPacket.getField("location"), + "{VEHC}": bwPacket.getField("vehicle"), + "{STAT}": bwPacket.getField("status"), + "{DIR}": bwPacket.getField("direction"), + "{DIRT}": bwPacket.getField("dirextionText"), + "{TACI}": bwPacket.getField("tacticalInfo"), + # pocsag wildcards + "{BIT}": bwPacket.getField("bitrate"), + "{RIC}": bwPacket.getField("ric"), + "{SRIC}": bwPacket.getField("subric"), + "{SRICT}": bwPacket.getField("subricText"), + "{MSG}": bwPacket.getField("message"), + + # zvei wildcards + "{TONE}": bwPacket.getField("tone"), + + # message for MSG packet is done in poc + } for wildcard in _wildcards: try: message = message.replace(wildcard, _wildcards[wildcard]) @@ -48,8 +82,3 @@ def replaceWildcards(message): #, bwPacket): logging.exception("error in wildcard replacement") return message - - -ttext = "das ist ein test %BR% der echt gut %TEST% ist weil %LPAR% er es ust." -print(ttext) -print(replaceWildcards(ttext)) diff --git a/plugins/readme.md b/plugins/readme.md index b3d62fc..abff90a 100644 --- a/plugins/readme.md +++ b/plugins/readme.md @@ -5,7 +5,7 @@ Dies kann als Vorlage für das eigene Plugin genutzt werden. ### 1.) Informationen anpassen - Dateikopf anpassen -- Namen des Plugins vergeben in der __init__ Methode `super().__init__("template")` +- Namen des Plugins vergeben in der `__init__` Methode `super().__init__("template")` ### 2.) Benötigte Methode überschreiben Die Plugin Basisklasse bietet einige Methoden, welche vom Plugin überschrieben werden können. @@ -14,6 +14,7 @@ Die Plugin Basisklasse bietet einige Methoden, welche vom Plugin überschrieben - `fms(bwPacket)` wird bei einem FMS Paket ausgeführt - `pocsag(bwPacket)` wird bei einem POCSAG Paket ausgeführt - `zvei(bwPacket)` wird bei einem ZVEI Packet ausgeführt +- `msg(bwPacket)` wird bei einem Nachrichten Packet ausgeführt - `teardown()` wird nach jeder Ausführung gerufen - `onUnload()` wird beim Zerstören der Plugin Instanz zum Programmende ausgeführt @@ -33,4 +34,8 @@ BOSWatch-Packet Objekts übergeben. Aus dieser kann mittels `bwPacket.get(FELDNAME)` das entsprechende Feld ausgelesen werden. Eine Auflistung der bereitgestellten Informationen -findet sich im entsprechenden BOSWatch-Packet Dokument. \ No newline at end of file +findet sich im entsprechenden BOSWatch-Packet Dokument. + +### 5.) Wildcards parsen +Das parsen der Wildcars funktioniert komfortabel über die interne Methode `self.parseWildcards(MSG)`. +Die Platzhalter für die Wildcards findet man in `boswatch/utils/wildcard.py`