48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import logging
|
||
|
import json
|
||
|
import asyncio
|
||
|
from pathlib import Path
|
||
|
import aiohttp
|
||
|
|
||
|
from bgpranking.abstractmanager import AbstractManager
|
||
|
from bgpranking.shadowserverfetcher import ShadowServerFetcher
|
||
|
from bgpranking.libs.helpers import get_config_path, get_homedir
|
||
|
|
||
|
logging.basicConfig(format='%(asctime)s %(name)s %(levelname)s:%(message)s',
|
||
|
level=logging.INFO, datefmt='%I:%M:%S')
|
||
|
|
||
|
|
||
|
class ShadowServerManager(AbstractManager):
|
||
|
|
||
|
def __init__(self, config_dir: Path=None, storage_directory: Path=None, loglevel: int=logging.DEBUG):
|
||
|
super().__init__(loglevel)
|
||
|
self.config = True
|
||
|
if not config_dir:
|
||
|
config_dir = get_config_path()
|
||
|
if not (config_dir / 'shadowserver.json').exists():
|
||
|
self.config = False
|
||
|
self.logger.warning(f'No config file available, the shadow server module will not be launched.')
|
||
|
return
|
||
|
with open(config_dir / 'shadowserver.json') as f:
|
||
|
ss_config = json.load(f)
|
||
|
if not storage_directory:
|
||
|
storage_directory = get_homedir() / 'rawdata'
|
||
|
modules_config = config_dir / 'modules'
|
||
|
self.fetcher = ShadowServerFetcher(ss_config['user'], ss_config['password'], modules_config, storage_directory, loglevel)
|
||
|
|
||
|
def _to_run_forever(self):
|
||
|
loop = asyncio.get_event_loop()
|
||
|
try:
|
||
|
loop.run_until_complete(self.fetcher.download_daily_entries())
|
||
|
except aiohttp.client_exceptions.ClientConnectorError as e:
|
||
|
self.logger.critical(f'Exception while fetching Shadow Server lists: {e}')
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
modules_manager = ShadowServerManager()
|
||
|
if modules_manager.config:
|
||
|
modules_manager.run(sleep_in_sec=3600)
|