diff --git a/whois/app.py b/whois/app.py index b3e6fb9..2f07fb4 100644 --- a/whois/app.py +++ b/whois/app.py @@ -210,7 +210,10 @@ def now_at_space(self): recent = self.device_repository.get_recent( timedelta(**self.app_settings.RECENT_TIME) ) - users = self.helpers.filter_hidden(self.helpers.owners_from_devices(recent)) + owners = self.helpers.owners_from_devices(recent) + users = self.helpers.filter_hidden( + [self.user_repository.get_by_id(owner) for owner in owners] + ) data = { "users": sorted(map(str, self.helpers.filter_anon_names(users))), diff --git a/whois/data/db/mapper/device_mapper.py b/whois/data/db/mapper/device_mapper.py index 49e399b..cb016f6 100644 --- a/whois/data/db/mapper/device_mapper.py +++ b/whois/data/db/mapper/device_mapper.py @@ -5,7 +5,7 @@ def device_to_devicetable_mapper(device: Device) -> DeviceTable: return DeviceTable( mac_address=device.mac_address, - hostname=device.username, + hostname=device.hostname, last_seen=device.last_seen, owner=device.owner, flags=device.flags, @@ -15,7 +15,7 @@ def device_to_devicetable_mapper(device: Device) -> DeviceTable: def devicetable_to_device_mapper(device: DeviceTable) -> Device: return Device( mac_address=device.mac_address, - hostname=device.username, + hostname=device.hostname, last_seen=device.last_seen, owner=device.owner, flags=device.flags, diff --git a/whois/data/repository/device_repository.py b/whois/data/repository/device_repository.py index 8b993aa..07bef9c 100644 --- a/whois/data/repository/device_repository.py +++ b/whois/data/repository/device_repository.py @@ -30,7 +30,7 @@ def update(self, device: Device) -> None: .one() ) device_orm.hostname = device.hostname - device_orm.last_seen = device.last_seen + device_orm.last_seen = device.last_seen.python_value device_orm.owner = device.owner device_orm.flags = device.flags session.commit() @@ -42,7 +42,7 @@ def get_by_mac_address(self, mac_address: str) -> Device: .where(DeviceTable.mac_address == mac_address) .one() ) - return map(devicetable_to_device_mapper, device_orm) + return next(map(devicetable_to_device_mapper, [device_orm])) def get_all(self) -> List[Device]: with Session(self.database.engine) as session: diff --git a/whois/entity/device.py b/whois/entity/device.py index 69b32d1..ca560d0 100644 --- a/whois/entity/device.py +++ b/whois/entity/device.py @@ -20,3 +20,7 @@ class Device: last_seen: IsoDateTimeField owner: int flags: BitField + + @property + def is_hidden(self) -> bool: + return self.flags.has_flag(DeviceFlags.is_hidden.value) \ No newline at end of file diff --git a/whois/worker.py b/whois/worker.py index d8d1a9e..98b16e9 100644 --- a/whois/worker.py +++ b/whois/worker.py @@ -3,8 +3,9 @@ from whois.data.db.database import Database from whois.data.repository.device_repository import DeviceRepository, Device +from whois.data.type.bitfield import BitField from whois.mikrotik import fetch_leases -from whois.settings import production +from whois.settings.production import mikrotik_settings logger = logging.getLogger("mikrotik-worker") database = Database() @@ -12,11 +13,11 @@ def update_devices() -> int: leases = fetch_leases( - production.MIKROTIK_URL, production.MIKROTIK_USER, production.MIKROTIK_PASS + mikrotik_settings.MIKROTIK_URL, mikrotik_settings.MIKROTIK_USER, mikrotik_settings.MIKROTIK_PASS ) for lease in leases: - device = Device(lease.mac_address, lease.host_name, lease.last_seen) + device = Device(lease.mac_address, lease.host_name, lease.last_seen, lease.client_id, BitField()) #TODO figure out how to pass flags if device_repository.get_by_mac_address(lease.mac_address): device_repository.update(device) else: @@ -27,7 +28,7 @@ def update_devices() -> int: def run_worker(): if not all( - [production.MIKROTIK_URL, production.MIKROTIK_USER, production.MIKROTIK_PASS] + [mikrotik_settings.MIKROTIK_URL, mikrotik_settings.MIKROTIK_USER, mikrotik_settings.MIKROTIK_PASS] ): raise ValueError("Mikrotik settings not set") @@ -39,7 +40,7 @@ def run_worker(): except Exception: logger.exception("Could not update device information") - time.sleep(production.worker_frequency_s) + time.sleep(mikrotik_settings.WORKER_FREQUENCY_S) if __name__ == "__main__":