mirror of
https://github.com/BOSWatch/BW3-Core.git
synced 2025-12-06 07:12:04 +01:00
add regexFilter and docs
This commit is contained in:
parent
a92dd8d94c
commit
61e085d555
|
|
@ -33,6 +33,10 @@ class ConfigYAML:
|
||||||
else:
|
else:
|
||||||
yield item
|
yield item
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
"""!returns the length of an config element"""
|
||||||
|
return len(self._config)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
"""!Returns the string representation of the internal config dict"""
|
"""!Returns the string representation of the internal config dict"""
|
||||||
return str(self._config)
|
return str(self._config)
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ def registerWildcard(wildcard, bwPacketField):
|
||||||
def replaceWildcards(message, bwPacket):
|
def replaceWildcards(message, bwPacket):
|
||||||
_wildcards = {
|
_wildcards = {
|
||||||
# formatting wildcards
|
# formatting wildcards
|
||||||
|
# todo check if br and par are needed - if not also change config
|
||||||
"{BR}": "\r\n",
|
"{BR}": "\r\n",
|
||||||
"{LPAR}": "(",
|
"{LPAR}": "(",
|
||||||
"{RPAR}": ")",
|
"{RPAR}": ")",
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
## Beschreibung
|
## Beschreibung
|
||||||
Mit diesem Modul ist es Möglich, die Pakete auf bestimmte Modes (FMS, POCSAG, ZVEI) zu Filtern. Je nach Konfiguration werden Pakete eines bestimmten Modes im aktuellen Router weitergeleitet oder verworfen.
|
Mit diesem Modul ist es möglich, die Pakete auf bestimmte Modes (FMS, POCSAG, ZVEI) zu Filtern. Je nach Konfiguration werden Pakete eines bestimmten Modes im aktuellen Router weitergeleitet oder verworfen.
|
||||||
|
|
||||||
## Resource
|
## Resource
|
||||||
`filter.modeFilter`
|
`filter.modeFilter`
|
||||||
|
|
|
||||||
70
docu/docs/modul/regex_filter.md
Normal file
70
docu/docs/modul/regex_filter.md
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
# <center>Regex Filter</center>
|
||||||
|
---
|
||||||
|
|
||||||
|
## Beschreibung
|
||||||
|
Mit diesem Modul ist es möglich, komplexe Filter basierend auf Regulären Ausdrücken (Regex) anzulegen.
|
||||||
|
Für einen Filter können beliebig viele Checks angelegt werden, welche Felder eines BOSWatch Pakets mittels Regex prüfen.
|
||||||
|
|
||||||
|
Folgendes gilt:
|
||||||
|
|
||||||
|
- Die Filter werden nacheinander abgearbeitet
|
||||||
|
- Innerhalb des Filters werden die Checks nacheinander abgearbeitet
|
||||||
|
- Sobald ein einzelner Check fehlschlägt ist der ganze Filter fehlgeschlagen
|
||||||
|
- Sobald ein Filter mit all seinen Checks besteht, wird mit der Ausführung des Routers fortgefahren
|
||||||
|
- Sollten alle Filter fehlschlagen wird die Ausführung des Routers beendet
|
||||||
|
|
||||||
|
## Resource
|
||||||
|
`filter.regexFilter`
|
||||||
|
|
||||||
|
## Konfiguration
|
||||||
|
|
||||||
|
|Feld|Beschreibung|Default|
|
||||||
|
|----|------------|-------|
|
||||||
|
|filter|Enthält eine Liste der einzelnen Filter||
|
||||||
|
|
||||||
|
#### `filter:`
|
||||||
|
|
||||||
|
|Feld|Beschreibung|Default|
|
||||||
|
|----|------------|-------|
|
||||||
|
|name|Beliebiger Name des Filters||
|
||||||
|
|checks|Liste der einzelnen Checks innerhalb des Filters||
|
||||||
|
|
||||||
|
#### `checks:`
|
||||||
|
|
||||||
|
|Feld|Beschreibung|Default|
|
||||||
|
|----|------------|-------|
|
||||||
|
|field|Name des Feldes innerhalb des BOSWatch Pakets welches untersucht werden soll||
|
||||||
|
|regex|Regulärer Ausdruck (Bei Sonderzeichen " " verwenden)||
|
||||||
|
|
||||||
|
**Beispiel:**
|
||||||
|
```yaml
|
||||||
|
- type: module
|
||||||
|
res: filter.regexFilter
|
||||||
|
config:
|
||||||
|
filter:
|
||||||
|
- name: "Zvei filter"
|
||||||
|
checks:
|
||||||
|
- field: zvei
|
||||||
|
regex: "65[0-9]{3}" # all zvei with starting 65
|
||||||
|
- name: "FMS Stat 3"
|
||||||
|
checks:
|
||||||
|
- field: mode
|
||||||
|
regex: "fms" # check if mode is fms
|
||||||
|
- field: status
|
||||||
|
regex: "3" # check if status is 3
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
## Abhängigkeiten
|
||||||
|
|
||||||
|
- keine
|
||||||
|
|
||||||
|
---
|
||||||
|
## Paket Modifikationen
|
||||||
|
|
||||||
|
- keine
|
||||||
|
|
||||||
|
---
|
||||||
|
## Zusätzliche Wildcards
|
||||||
|
|
||||||
|
- keine
|
||||||
|
|
@ -19,6 +19,7 @@ nav:
|
||||||
- Changelog: changelog.md
|
- Changelog: changelog.md
|
||||||
- Module:
|
- Module:
|
||||||
- Mode Filter: modul/mode_filter.md
|
- Mode Filter: modul/mode_filter.md
|
||||||
|
- Regex Filter: modul/regex_filter.md
|
||||||
- Plugins: tbd.md
|
- Plugins: tbd.md
|
||||||
- Entwickler:
|
- Entwickler:
|
||||||
- Eigenes Modul/Plugin schreiben: develop/ModulPlugin.md
|
- Eigenes Modul/Plugin schreiben: develop/ModulPlugin.md
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,7 @@ class BoswatchModule(Module):
|
||||||
def doWork(self, bwPacket):
|
def doWork(self, bwPacket):
|
||||||
"""!start an run of the module.
|
"""!start an run of the module.
|
||||||
|
|
||||||
@param bwPacket: A BOSWatch packet instance
|
@param bwPacket: A BOSWatch packet instance"""
|
||||||
@return bwPacket or False"""
|
|
||||||
|
|
||||||
for mode in self.config.get("allowed", default=[]):
|
for mode in self.config.get("allowed", default=[]):
|
||||||
if bwPacket.get("mode") == mode:
|
if bwPacket.get("mode") == mode:
|
||||||
|
|
|
||||||
65
module/filter/regexFilter.py
Normal file
65
module/filter/regexFilter.py
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""!
|
||||||
|
____ ____ ______ __ __ __ _____
|
||||||
|
/ __ )/ __ \/ ___/ | / /___ _/ /______/ /_ |__ /
|
||||||
|
/ __ / / / /\__ \| | /| / / __ `/ __/ ___/ __ \ /_ <
|
||||||
|
/ /_/ / /_/ /___/ /| |/ |/ / /_/ / /_/ /__/ / / / ___/ /
|
||||||
|
/_____/\____//____/ |__/|__/\__,_/\__/\___/_/ /_/ /____/
|
||||||
|
German BOS Information Script
|
||||||
|
by Bastian Schroll
|
||||||
|
|
||||||
|
@file: regexFilter.py
|
||||||
|
@date: 26.10.2019
|
||||||
|
@author: Bastian Schroll
|
||||||
|
@description: Regex filter module
|
||||||
|
"""
|
||||||
|
import logging
|
||||||
|
from module.module import Module
|
||||||
|
|
||||||
|
# ###################### #
|
||||||
|
# Custom plugin includes #
|
||||||
|
import re
|
||||||
|
# ###################### #
|
||||||
|
|
||||||
|
logging.debug("- %s loaded", __name__)
|
||||||
|
|
||||||
|
|
||||||
|
class BoswatchModule(Module):
|
||||||
|
"""!Description of the Module"""
|
||||||
|
def __init__(self, config):
|
||||||
|
"""!Do not change anything here!"""
|
||||||
|
super().__init__(__name__, config) # you can access the config class on 'self.config'
|
||||||
|
|
||||||
|
def onLoad(self):
|
||||||
|
"""!Called by import of the plugin"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def doWork(self, bwPacket):
|
||||||
|
"""!start an run of the module.
|
||||||
|
|
||||||
|
@param bwPacket: A BOSWatch packet instance"""
|
||||||
|
for filter in self.config.get("filter"):
|
||||||
|
checkFailed = False
|
||||||
|
logging.debug("try filter '%s' with %d check(s)", filter.get("name"), len(filter.get("checks")))
|
||||||
|
|
||||||
|
for check in filter.get("checks"):
|
||||||
|
fieldData = bwPacket.get(check.get("field"))
|
||||||
|
|
||||||
|
if not fieldData or not re.search(check.get("regex"), fieldData):
|
||||||
|
logging.debug("[-] field '%s' with regex '%s'", check.get("field"), check.get("regex"))
|
||||||
|
checkFailed = True
|
||||||
|
break # if one check failed we break this filter
|
||||||
|
else:
|
||||||
|
logging.debug("[+] field '%s' with regex '%s'", check.get("field"), check.get("regex"))
|
||||||
|
|
||||||
|
if not checkFailed:
|
||||||
|
logging.debug("[PASSED] filter '%s'", filter.get("name"))
|
||||||
|
return None # None -> Router will go on with this packet
|
||||||
|
logging.debug("[FAILED] filter '%s'", filter.get("name"))
|
||||||
|
|
||||||
|
return False # False -> Router will stop further processing
|
||||||
|
|
||||||
|
def onUnload(self):
|
||||||
|
"""!Called by destruction of the plugin"""
|
||||||
|
pass
|
||||||
|
|
@ -38,8 +38,7 @@ class BoswatchModule(Module):
|
||||||
def doWork(self, bwPacket):
|
def doWork(self, bwPacket):
|
||||||
"""!start an run of the module.
|
"""!start an run of the module.
|
||||||
|
|
||||||
@param bwPacket: A BOSWatch packet instance
|
@param bwPacket: A BOSWatch packet instance"""
|
||||||
@return bwPacket or False"""
|
|
||||||
if bwPacket.get("mode") == "fms":
|
if bwPacket.get("mode") == "fms":
|
||||||
pass
|
pass
|
||||||
elif bwPacket.get("mode") == "zvei":
|
elif bwPacket.get("mode") == "zvei":
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue