X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=arper.py;h=bdd97ac2c93b8109fcfb187f5bc7b455fad7a009;hb=76bc42a750b1c4d0ce81179337e47dc08db7b386;hp=a4e8d3e1196a1f683a24a9d43f4ec48fc8890253;hpb=55a3172e37855f388b9ba0dfc91641a6c9ad1376;p=python_utils.git diff --git a/arper.py b/arper.py index a4e8d3e..bdd97ac 100644 --- a/arper.py +++ b/arper.py @@ -2,22 +2,23 @@ """A caching layer around the kernel's network mapping between IPs and MACs""" + import datetime import logging import os -from typing import Any, Optional import warnings +from typing import Any, Optional from overrides import overrides import argparse_utils -from collect.bidict import BiDict import config import exec_utils import file_utils import persistent -import string_utils import site_config +import string_utils +from collect.bidict import BiDict logger = logging.getLogger(__name__) @@ -36,21 +37,19 @@ cfg.add_argument( type=argparse_utils.valid_duration, default=datetime.timedelta(seconds=60 * 15), metavar='DURATION', - help='Max acceptable age of the kernel arp table cache' + help='Max acceptable age of the kernel arp table cache', ) cfg.add_argument( '--arper_min_entries_to_be_valid', type=int, default=site_config.get_config().arper_minimum_device_count, - help='Min number of arp entries to bother persisting.' + help='Min number of arp entries to bother persisting.', ) -@persistent.persistent_autoloaded_singleton() +@persistent.persistent_autoloaded_singleton() # type: ignore class Arper(persistent.Persistent): - def __init__( - self, cached_state: Optional[BiDict] = None - ) -> None: + def __init__(self, cached_state: Optional[BiDict] = None) -> None: self.state = BiDict() if cached_state is not None: logger.debug('Loading Arper map from cached state.') @@ -60,14 +59,14 @@ class Arper(persistent.Persistent): self.update_from_arp_scan() self.update_from_arp() if len(self.state) < config.config['arper_min_entries_to_be_valid']: - raise Exception('Arper didn\'t find enough entries; only got {len(self.state)}.') + raise Exception(f'Arper didn\'t find enough entries; only got {len(self.state)}.') def update_from_arp_scan(self): network_spec = site_config.get_config().network try: output = exec_utils.cmd( f'/usr/local/bin/arp-scan --retry=6 --timeout 350 --backoff=1.4 --random --numeric --plain --ignoredups {network_spec}', - timeout_seconds=10.0 + timeout_seconds=10.0, ) except Exception as e: logger.exception(e) @@ -82,10 +81,7 @@ class Arper(persistent.Persistent): def update_from_arp(self): try: - output = exec_utils.cmd( - '/usr/sbin/arp -a', - timeout_seconds=10.0 - ) + output = exec_utils.cmd('/usr/sbin/arp -a', timeout_seconds=10.0) except Exception as e: logger.exception(e) return @@ -109,8 +105,8 @@ class Arper(persistent.Persistent): def load(cls) -> Any: cache_file = config.config['arper_cache_location'] if persistent.was_file_written_within_n_seconds( - cache_file, - config.config['arper_cache_max_staleness'].total_seconds(), + cache_file, + config.config['arper_cache_max_staleness'].total_seconds(), ): logger.debug(f'Loading state from {cache_file}') cached_state = BiDict() @@ -137,9 +133,7 @@ class Arper(persistent.Persistent): @overrides def save(self) -> bool: if len(self.state) > config.config['arper_min_entries_to_be_valid']: - logger.debug( - f'Persisting state to {config.config["arper_cache_location"]}' - ) + logger.debug(f'Persisting state to {config.config["arper_cache_location"]}') with file_utils.FileWriter(config.config['arper_cache_location']) as wf: for (mac, ip) in self.state.items(): mac = mac.lower()