Merge branch 'develop' into feature/plugin-telegram

This commit is contained in:
Bastian Schroll 2020-02-24 23:05:48 +01:00 committed by GitHub
commit 936f1b6023
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 149 additions and 2 deletions

46
docu/docs/plugin/http.md Normal file
View file

@ -0,0 +1,46 @@
# <center>Http</center>
---
## Beschreibung
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
- 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
- keine

View file

@ -18,11 +18,12 @@ nav:
- Routing Mechanismus: information/router.md
- Changelog: changelog.md
- Module:
- Mode Filter: modul/mode_filter.md
- Regex Filter: modul/regex_filter.md
- Descriptor: modul/descriptor.md
- Geocoding: modul/geocoding.md
- Mode Filter: modul/mode_filter.md
- Regex Filter: modul/regex_filter.md
- Plugins:
- Http: plugin/http.md
- Telegram: plugin/telegram.md
- Entwickler:
- Eigenes Modul/Plugin schreiben: develop/ModulPlugin.md

100
plugin/http.py Normal file
View file

@ -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'
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)
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()