BW3-Core/plugin/http.py

101 lines
2.9 KiB
Python
Raw Normal View History

2020-02-23 01:07:10 +01:00
#!/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")
2022-01-23 12:27:08 +01:00
self._makeRequests(urls)
2020-02-23 01:07:10 +01:00
def pocsag(self, bwPacket):
"""!Called on POCSAG alarm
@param bwPacket: bwPacket instance
Remove if not implemented"""
urls = self.config.get("pocsag")
2022-01-23 12:27:08 +01:00
self._makeRequests(urls)
2020-02-23 01:07:10 +01:00
def zvei(self, bwPacket):
"""!Called on ZVEI alarm
@param bwPacket: bwPacket instance
Remove if not implemented"""
urls = self.config.get("zvei")
2022-01-23 12:27:08 +01:00
self._makeRequests(urls)
2020-02-23 01:07:10 +01:00
def msg(self, bwPacket):
"""!Called on MSG packet
@param bwPacket: bwPacket instance
Remove if not implemented"""
urls = self.config.get("msg")
2022-01-23 12:27:08 +01:00
self._makeRequests(urls)
2020-02-24 22:47:40 +01:00
2022-02-17 20:01:26 +01:00
def _makeRequests(self, urls):
2020-02-24 22:47:40 +01:00
"""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)
2022-01-23 12:27:08 +01:00
async def _asyncRequests(self, urls):
2020-02-24 22:47:40 +01:00
"""Handles asynchronus requests
@param urls: array of urls to send requests to"""
tasks = []
async with ClientSession() as session:
for url in urls:
2022-01-23 12:27:08 +01:00
task = asyncio.ensure_future(self._fetch(url, session))
2020-02-24 22:47:40 +01:00
tasks.append(task)
responses = asyncio.gather(*tasks)
await responses
2022-01-23 12:27:08 +01:00
async def _fetch(self, url, session):
2020-02-24 22:47:40 +01:00
"""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()