Skip to content

Commit

Permalink
fix keyerror on missing rq queue (#135)
Browse files Browse the repository at this point in the history
  • Loading branch information
amyasnikov authored Oct 17, 2024
1 parent 5640468 commit 7bd2823
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 7 deletions.
2 changes: 1 addition & 1 deletion development/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@

PLUGINS.append("validity")

PLUGINS_CONFIG = {"validity": {"store_last_results": 5, "git_folder": "/opt/git_repos/", "autocopy_scripts": True}}
PLUGINS_CONFIG = {"validity": {}}


# for debug toolbar
Expand Down
2 changes: 1 addition & 1 deletion requirements/base.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
deepdiff>=6.2.0,<7
dimi < 2
dimi >=1.2.0,< 2
django-bootstrap5 >=24.2,<25
dulwich # Core NetBox "optional" requirement
jq>=1.4.0,<2
Expand Down
7 changes: 7 additions & 0 deletions validity/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,16 @@ class NetBoxValidityConfig(PluginConfig):
# custom field
netbox_version = NetboxVersion(VERSION)

def _setup_queue(self):
queue_name = di["validity_settings"].runtests_queue
django_settings = di["django_settings"]
if queue_name not in django_settings.RQ_QUEUES:
django_settings.RQ_QUEUES[queue_name] = django_settings.RQ_PARAMS

def ready(self):
from validity import dependencies, signals

self._setup_queue()
return super().ready()


Expand Down
44 changes: 39 additions & 5 deletions validity/dependencies.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from typing import Annotated

import django_rq
from dimi.scopes import Singleton
from django.conf import LazySettings, settings
from utilities.rqworker import get_workers_for_queue
from django_rq.queues import DjangoRQ, get_redis_connection
from redis import Redis
from rq import Queue, Worker
from rq.job import Job

from validity import di
from validity.choices import ConnectionTypeChoices
Expand Down Expand Up @@ -36,8 +38,39 @@ def poller_map():


@di.dependency
def runtests_worker_count(vsettings: Annotated[ValiditySettings, validity_settings]) -> int:
return get_workers_for_queue(vsettings.runtests_queue)
def runtests_queue_config(
settings: Annotated[LazySettings, django_settings], vsettings: Annotated[ValiditySettings, validity_settings]
) -> dict:
return settings.RQ_QUEUES.get(vsettings.runtests_queue, settings.RQ_PARAMS)


@di.dependency
def runtests_redis_connection(queue_config: Annotated[dict, runtests_queue_config]) -> Redis:
return get_redis_connection(queue_config)


@di.dependency
def runtests_queue(
vsettings: Annotated[ValiditySettings, validity_settings],
config: Annotated[dict, runtests_queue_config],
connection: Annotated[Redis, runtests_redis_connection],
) -> Queue:
is_async = config.get("ASYNC", True)
default_timeout = config.get("DEFAULT_TIMEOUT")
return DjangoRQ(
vsettings.runtests_queue,
default_timeout=default_timeout,
connection=connection,
is_async=is_async,
job_class=Job,
)


@di.dependency
def runtests_worker_count(
connection: Annotated[Redis, runtests_redis_connection], queue: Annotated[Queue, runtests_queue]
) -> int:
return Worker.count(connection=connection, queue=queue)


@di.dependency(scope=Singleton)
Expand All @@ -46,13 +79,14 @@ def runtests_launcher(
split_worker: Annotated[SplitWorker, ...],
apply_worker: Annotated[ApplyWorker, ...],
combine_worker: Annotated[CombineWorker, ...],
queue: Annotated[Queue, runtests_queue],
):
from validity.models import ComplianceReport

return Launcher(
job_name="RunTests",
job_object_factory=null_request()(ComplianceReport.objects.create),
rq_queue=django_rq.get_queue(vsettings.runtests_queue),
rq_queue=queue,
tasks=[
Task(split_worker, job_timeout=vsettings.script_timeouts.runtests_split),
Task(
Expand Down

0 comments on commit 7bd2823

Please sign in to comment.