elstat/elstat/worker.py

33 lines
907 B
Python

import asyncio
import logging
from .consts import ADAPTERS
class ServiceWorker:
def __init__(self, manager, name, service):
self.name = name
self.manager = manager
self.service = service
self.adapter = ADAPTERS[service['adapter']]
self.log = logging.getLogger(f'elstat.service.{name}')
self._start()
async def work(self):
res = await self.adapter.query(self, self.service['adapter_args'])
return res
async def _work_loop(self):
try:
while True:
self.log.info(f'polling {self.name}')
await self.work()
await asyncio.sleep(self.service['poll'])
except Exception:
self.log.exception('fail on poll')
def _start(self):
self.log.info(f'starting work loop for {self.name}')
self.manager.loop.create_task(self._work_loop())