From 51b1b3e13e61d1fb9486ab2bee55ebcb2dd9387e Mon Sep 17 00:00:00 2001 From: Jan Speller Date: Sun, 23 Feb 2020 01:07:10 +0100 Subject: [PATCH 1/5] add http plugin --- plugin/http.py | 100 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 plugin/http.py diff --git a/plugin/http.py b/plugin/http.py new file mode 100644 index 0000000..cacc0e0 --- /dev/null +++ b/plugin/http.py @@ -0,0 +1,100 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +"""! + ____ ____ ______ __ __ __ _____ + / __ )/ __ \/ ___/ | / /___ _/ /______/ /_ |__ / + / __ / / / /\__ \| | /| / / __ `/ __/ ___/ __ \ /_ < + / /_/ / /_/ /___/ /| |/ |/ / /_/ / /_/ /__/ / / / ___/ / +/_____/\____//____/ |__/|__/\__,_/\__/\___/_/ /_/ /____/ + German BOS Information Script + by Bastian Schroll + +@file: http.py +@date: 23.02.2020 +@author: Jan Speller +@description: Http Plugin +""" +import logging +from plugin.pluginBase import PluginBase + +# ###################### # +# Custom plugin includes # +import asyncio +from aiohttp import ClientSession +# ###################### # + +logging.debug("- %s loaded", __name__) + + +class BoswatchPlugin(PluginBase): + """!Description of the Plugin""" + def __init__(self, config): + """!Do not change anything here!""" + super().__init__(__name__, config) # you can access the config class on 'self.config' + + async def fetch(self, url, session): + """Fetches requests + + @param url: url + + @param session: Clientsession instance""" + async with session.get(url) as response: + logging.info("{} returned [{}]".format(response.url, response.status)) + return await response.read() + + async def asyncRequests(self, urls): + """Handles asynchronus requests + + @param urls: array of urls to send requests to""" + tasks = [] + + async with ClientSession() as session: + for url in urls: + task = asyncio.ensure_future(self.fetch(url, session)) + tasks.append(task) + + responses = asyncio.gather(*tasks) + await responses + + def makeRequests(self, urls): + """Parses wildcard urls and handles asynchronus requests + + @param urls: array of urls""" + urls = [self.parseWildcards(url) for url in urls] + + loop = asyncio.get_event_loop() + + future = asyncio.ensure_future(self.asyncRequests(urls)) + loop.run_until_complete(future) + + def fms(self, bwPacket): + """!Called on FMS alarm + + @param bwPacket: bwPacket instance + Remove if not implemented""" + urls = self.config.get("fms") + self.makeRequests(urls) + + def pocsag(self, bwPacket): + """!Called on POCSAG alarm + + @param bwPacket: bwPacket instance + Remove if not implemented""" + urls = self.config.get("pocsag") + self.makeRequests(urls) + + def zvei(self, bwPacket): + """!Called on ZVEI alarm + + @param bwPacket: bwPacket instance + Remove if not implemented""" + urls = self.config.get("zvei") + self.makeRequests(urls) + + def msg(self, bwPacket): + """!Called on MSG packet + + @param bwPacket: bwPacket instance + Remove if not implemented""" + urls = self.config.get("msg") + self.makeRequests(urls) From bf52816c17908048ec14e4a0941d3bb1d5ded343 Mon Sep 17 00:00:00 2001 From: Jan Speller Date: Sun, 23 Feb 2020 01:16:02 +0100 Subject: [PATCH 2/5] Add docu --- docu/docs/plugin/http.md | 53 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 docu/docs/plugin/http.md diff --git a/docu/docs/plugin/http.md b/docu/docs/plugin/http.md new file mode 100644 index 0000000..e4c1411 --- /dev/null +++ b/docu/docs/plugin/http.md @@ -0,0 +1,53 @@ +#
Http
+--- + +## Beschreibung +Mit diesem Plugin ist es moeglich, Http-Anfragen für Alarmierungen zu senden. +Wildcards in den Urls werden automatisch ersetzt. + +## Unterstütze Alarmtypen +- Fms +- Pocsag +- Zvei +- Msg + +## Resource +`http` + +## Konfiguration + +|Feld|Beschreibung|Default| +|----|------------|-------| +|fms|Liste mit Urls für Fms-Alarmierung|| +|pocsag|Liste mit Urls für Pocsag-Alarmierung|| +|zvei|Liste mit Urls für Zvei-Alarmierung|| +|msg|Liste mit Urls für Msg-Alarmierung|| + +**Beispiel:** +```yaml + - type: plugin + name: HTTP Plugin + res: http + config: + pocsag: + - "http://google.com?q={MSG}" + - "http://duckduckgo.com?q={MSG}" + fms: + - "http://duckduckgo.com?q={LOC}" +``` + +--- +## Abhängigkeiten + +- asyncio +- aiohttp + +--- +## Paket Modifikationen + +- keine + +--- +## Zusätzliche Wildcards + +- keine \ No newline at end of file From 1c052458671db82d67eef94355ad6add3420f283 Mon Sep 17 00:00:00 2001 From: Jan Speller Date: Sun, 23 Feb 2020 01:17:26 +0100 Subject: [PATCH 3/5] add http to mkdocs --- docu/mkdocs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docu/mkdocs.yml b/docu/mkdocs.yml index 0948dd6..611cbfe 100644 --- a/docu/mkdocs.yml +++ b/docu/mkdocs.yml @@ -21,7 +21,8 @@ nav: - Mode Filter: modul/mode_filter.md - Regex Filter: modul/regex_filter.md - Descriptor: modul/descriptor.md - - Plugins: tbd.md + - Plugins: + - Http: plugin/http.md - Entwickler: - Eigenes Modul/Plugin schreiben: develop/ModulPlugin.md - BOSWatch Alarmpaket Format: develop/packet.md From ded21160097786a0ecb39fec975e9bd9ce93386c Mon Sep 17 00:00:00 2001 From: Jan Speller Date: Mon, 24 Feb 2020 22:47:40 +0100 Subject: [PATCH 4/5] move methods to bottom --- plugin/http.py | 70 +++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/plugin/http.py b/plugin/http.py index cacc0e0..5d206bc 100644 --- a/plugin/http.py +++ b/plugin/http.py @@ -32,41 +32,6 @@ class BoswatchPlugin(PluginBase): """!Do not change anything here!""" super().__init__(__name__, config) # you can access the config class on 'self.config' - async def fetch(self, url, session): - """Fetches requests - - @param url: url - - @param session: Clientsession instance""" - async with session.get(url) as response: - logging.info("{} returned [{}]".format(response.url, response.status)) - return await response.read() - - async def asyncRequests(self, urls): - """Handles asynchronus requests - - @param urls: array of urls to send requests to""" - tasks = [] - - async with ClientSession() as session: - for url in urls: - task = asyncio.ensure_future(self.fetch(url, session)) - tasks.append(task) - - responses = asyncio.gather(*tasks) - await responses - - def makeRequests(self, urls): - """Parses wildcard urls and handles asynchronus requests - - @param urls: array of urls""" - urls = [self.parseWildcards(url) for url in urls] - - loop = asyncio.get_event_loop() - - future = asyncio.ensure_future(self.asyncRequests(urls)) - loop.run_until_complete(future) - def fms(self, bwPacket): """!Called on FMS alarm @@ -98,3 +63,38 @@ class BoswatchPlugin(PluginBase): Remove if not implemented""" urls = self.config.get("msg") self.makeRequests(urls) + + def makeRequests(self, urls): + """Parses wildcard urls and handles asynchronus requests + + @param urls: array of urls""" + urls = [self.parseWildcards(url) for url in urls] + + loop = asyncio.get_event_loop() + + future = asyncio.ensure_future(self.asyncRequests(urls)) + loop.run_until_complete(future) + + async def asyncRequests(self, urls): + """Handles asynchronus requests + + @param urls: array of urls to send requests to""" + tasks = [] + + async with ClientSession() as session: + for url in urls: + task = asyncio.ensure_future(self.fetch(url, session)) + tasks.append(task) + + responses = asyncio.gather(*tasks) + await responses + + async def fetch(self, url, session): + """Fetches requests + + @param url: url + + @param session: Clientsession instance""" + async with session.get(url) as response: + logging.info("{} returned [{}]".format(response.url, response.status)) + return await response.read() From 0ba3f5ca3be09cef00930e97327557e533fcf8b3 Mon Sep 17 00:00:00 2001 From: Jan Speller Date: Mon, 24 Feb 2020 22:55:16 +0100 Subject: [PATCH 5/5] Update http documentation --- docu/docs/plugin/http.md | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/docu/docs/plugin/http.md b/docu/docs/plugin/http.md index e4c1411..f9051bf 100644 --- a/docu/docs/plugin/http.md +++ b/docu/docs/plugin/http.md @@ -5,6 +5,10 @@ Mit diesem Plugin ist es moeglich, Http-Anfragen für Alarmierungen zu senden. Wildcards in den Urls werden automatisch ersetzt. +## Externe Abhängigkeiten +- asyncio +- aiohttp + ## Unterstütze Alarmtypen - Fms - Pocsag @@ -39,15 +43,4 @@ Wildcards in den Urls werden automatisch ersetzt. --- ## Abhängigkeiten -- asyncio -- aiohttp - ---- -## Paket Modifikationen - - keine - ---- -## Zusätzliche Wildcards - -- keine \ No newline at end of file