Projekt

Obecné

Profil

Stáhnout (1.46 KB) Statistiky
| Větev: | Tag: | Revize:
1 7a278c5c silhavyj
import json
2
import requests
3
import logging
4 76b68bb9 silhavyj
from time import sleep
5
from diskcache import Deque
6 7a278c5c silhavyj
from requests import HTTPError, ConnectionError
7
8 957aac06 silhavyj
from config_manager import server_url, server_port, server_endpoint, cache_dir, \
9
    cache_retry_period_seconds, cache_max_retries, cache_max_entries
10 7a278c5c silhavyj
11 d1528a79 silhavyj
12 76b68bb9 silhavyj
_cache = Deque(directory=cache_dir)
13 7a278c5c silhavyj
_uri = server_url + ":" + server_port + server_endpoint
14
15
16
def send_data(payload: dict):
17
    try:
18
        logging.info(f"sending payload = {payload} to {_uri}")
19
        response = requests.post(url=_uri, data=json.dumps(payload))
20
        logging.info(f"response text: {response.text}")
21
    except ConnectionError:
22
        logging.warning(f"sending payload = {payload} to {_uri} failed")
23 957aac06 silhavyj
        _cache_failed_payload(payload)
24 7a278c5c silhavyj
    except HTTPError as error:
25
        logging.error(f"HTTP Error ({_uri}) payload = {payload}, {error}")
26 957aac06 silhavyj
        _cache_failed_payload(payload)
27
28
29
def _cache_failed_payload(payload: dict):
30
    if len(_cache) >= cache_max_entries:
31
        oldest_payload = _cache.pop()
32
        logging.warning(f"cache is full - discarding payload = {oldest_payload}")
33
34
    logging.info(f"adding payload = {payload} into cache")
35
    _cache.append(payload)
36 76b68bb9 silhavyj
37
38
def api_client_run():
39
    while True:
40 957aac06 silhavyj
        retries = min(cache_max_retries, len(_cache))
41
        logging.info(f"emptying the cache ({retries} records)")
42
        for _ in range(0, retries):
43
            payload = _cache.pop()
44
            send_data(payload)
45 76b68bb9 silhavyj
        sleep(cache_retry_period_seconds)