Skip to content

Commit

Permalink
fix polling with no poller
Browse files Browse the repository at this point in the history
  • Loading branch information
amyasnikov committed Mar 9, 2024
1 parent 998483c commit 524208d
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions validity/data_backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from itertools import chain, groupby
from pathlib import Path
from tempfile import TemporaryDirectory
from typing import Generator

import yaml
from django import forms
Expand All @@ -11,7 +12,7 @@

from validity import config
from validity.models import VDevice
from .pollers.result import PollingInfo
from .pollers.result import DescriptiveError, PollingInfo


if config.netbox_version >= 3.7:
Expand Down Expand Up @@ -49,15 +50,23 @@ def write_metainfo(self, dir_name: str, polling_info: PollingInfo) -> None:
path = dir_name / self.metainfo_file
path.write_text(yaml.safe_dump(polling_info.model_dump(exclude_defaults=True), sort_keys=False))

def start_polling(self, devices) -> tuple[list[Generator], set[DescriptiveError]]:
result_generators = []
no_poller_errors = set()
for poller, device_group in groupby(devices, key=lambda device: device.poller):
if poller is None:
no_poller_errors.update(
DescriptiveError(device=device, error="No poller bound") for device in device_group
)
else:
result_generators.append(poller.get_backend().poll(device_group))
return result_generators, no_poller_errors

@contextmanager
def fetch(self, device_filter: Q | None = None):
with TemporaryDirectory() as dir_name:
devices = self.bound_devices_qs(device_filter or Q())
result_generators = [
poller.get_backend().poll(device_group)
for poller, device_group in groupby(devices, key=lambda device: device.poller)
]
errors = set()
result_generators, errors = self.start_polling(devices)
for cmd_result in chain.from_iterable(result_generators):
if cmd_result.errored:
errors.add(cmd_result.descriptive_error)
Expand Down

0 comments on commit 524208d

Please sign in to comment.