mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-29 20:06:25 -06:00
This commit is contained in:
parent
6e30c11017
commit
c2d3363930
@ -1,29 +1,28 @@
|
|||||||
from django.http import Http404, HttpResponse
|
from django.http import Http404, HttpResponse
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django_rq.queues import get_redis_connection
|
||||||
|
from django_rq.settings import QUEUES_LIST
|
||||||
|
from django_rq.utils import get_statistics
|
||||||
from drf_spectacular.types import OpenApiTypes
|
from drf_spectacular.types import OpenApiTypes
|
||||||
from drf_spectacular.utils import extend_schema
|
from drf_spectacular.utils import extend_schema
|
||||||
|
from rest_framework import viewsets
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.exceptions import PermissionDenied
|
from rest_framework.exceptions import PermissionDenied
|
||||||
|
from rest_framework.permissions import IsAdminUser
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.routers import APIRootView
|
from rest_framework.routers import APIRootView
|
||||||
from rest_framework.viewsets import ReadOnlyModelViewSet
|
from rest_framework.viewsets import ReadOnlyModelViewSet
|
||||||
|
from rq.job import Job as RQ_Job
|
||||||
|
from rq.worker import Worker
|
||||||
|
|
||||||
from core import filtersets
|
from core import filtersets
|
||||||
from core.choices import DataSourceStatusChoices
|
|
||||||
from core.jobs import SyncDataSourceJob
|
from core.jobs import SyncDataSourceJob
|
||||||
from core.models import *
|
from core.models import *
|
||||||
from core.utils import delete_rq_job, enqueue_rq_job, get_rq_jobs, requeue_rq_job, stop_rq_job
|
from core.utils import delete_rq_job, enqueue_rq_job, get_rq_jobs, requeue_rq_job, stop_rq_job
|
||||||
from django_rq.queues import get_redis_connection
|
|
||||||
from django_rq.utils import get_statistics
|
|
||||||
from django_rq.settings import QUEUES_LIST
|
|
||||||
from netbox.api.metadata import ContentTypeMetadata
|
from netbox.api.metadata import ContentTypeMetadata
|
||||||
from netbox.api.pagination import LimitOffsetListPagination
|
from netbox.api.pagination import LimitOffsetListPagination
|
||||||
from netbox.api.viewsets import NetBoxModelViewSet, NetBoxReadOnlyModelViewSet
|
from netbox.api.viewsets import NetBoxModelViewSet, NetBoxReadOnlyModelViewSet
|
||||||
from rest_framework import viewsets
|
|
||||||
from rest_framework.permissions import IsAdminUser
|
|
||||||
from rq.job import Job as RQ_Job
|
|
||||||
from rq.worker import Worker
|
|
||||||
from . import serializers
|
from . import serializers
|
||||||
|
|
||||||
|
|
||||||
@ -50,10 +49,8 @@ class DataSourceViewSet(NetBoxModelViewSet):
|
|||||||
if not request.user.has_perm('core.sync_datasource', obj=datasource):
|
if not request.user.has_perm('core.sync_datasource', obj=datasource):
|
||||||
raise PermissionDenied(_("This user does not have permission to synchronize this data source."))
|
raise PermissionDenied(_("This user does not have permission to synchronize this data source."))
|
||||||
|
|
||||||
# Enqueue the sync job & update the DataSource's status
|
# Enqueue the sync job
|
||||||
SyncDataSourceJob.enqueue(instance=datasource, user=request.user)
|
SyncDataSourceJob.enqueue(instance=datasource, user=request.user)
|
||||||
datasource.status = DataSourceStatusChoices.QUEUED
|
|
||||||
DataSource.objects.filter(pk=datasource.pk).update(status=datasource.status)
|
|
||||||
|
|
||||||
serializer = serializers.DataSourceSerializer(datasource, context={'request': request})
|
serializer = serializers.DataSourceSerializer(datasource, context={'request': request})
|
||||||
|
|
||||||
|
@ -21,6 +21,17 @@ class SyncDataSourceJob(JobRunner):
|
|||||||
class Meta:
|
class Meta:
|
||||||
name = 'Synchronization'
|
name = 'Synchronization'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def enqueue(cls, *args, **kwargs):
|
||||||
|
job = super().enqueue(*args, **kwargs)
|
||||||
|
|
||||||
|
# Update the DataSource's synchronization status to queued
|
||||||
|
if datasource := job.object:
|
||||||
|
datasource.status = DataSourceStatusChoices.QUEUED
|
||||||
|
DataSource.objects.filter(pk=datasource.pk).update(status=datasource.status)
|
||||||
|
|
||||||
|
return job
|
||||||
|
|
||||||
def run(self, *args, **kwargs):
|
def run(self, *args, **kwargs):
|
||||||
datasource = DataSource.objects.get(pk=self.job.object_id)
|
datasource = DataSource.objects.get(pk=self.job.object_id)
|
||||||
|
|
||||||
|
@ -33,7 +33,6 @@ from utilities.json import ConfigJSONEncoder
|
|||||||
from utilities.query import count_related
|
from utilities.query import count_related
|
||||||
from utilities.views import ContentTypePermissionRequiredMixin, GetRelatedModelsMixin, register_model_view
|
from utilities.views import ContentTypePermissionRequiredMixin, GetRelatedModelsMixin, register_model_view
|
||||||
from . import filtersets, forms, tables
|
from . import filtersets, forms, tables
|
||||||
from .choices import DataSourceStatusChoices
|
|
||||||
from .jobs import SyncDataSourceJob
|
from .jobs import SyncDataSourceJob
|
||||||
from .models import *
|
from .models import *
|
||||||
from .plugins import get_catalog_plugins, get_local_plugins
|
from .plugins import get_catalog_plugins, get_local_plugins
|
||||||
@ -78,12 +77,8 @@ class DataSourceSyncView(BaseObjectView):
|
|||||||
|
|
||||||
def post(self, request, pk):
|
def post(self, request, pk):
|
||||||
datasource = get_object_or_404(self.queryset, pk=pk)
|
datasource = get_object_or_404(self.queryset, pk=pk)
|
||||||
|
# Enqueue the sync job
|
||||||
# Enqueue the sync job & update the DataSource's status
|
|
||||||
job = SyncDataSourceJob.enqueue(instance=datasource, user=request.user)
|
job = SyncDataSourceJob.enqueue(instance=datasource, user=request.user)
|
||||||
datasource.status = DataSourceStatusChoices.QUEUED
|
|
||||||
DataSource.objects.filter(pk=datasource.pk).update(status=datasource.status)
|
|
||||||
|
|
||||||
messages.success(
|
messages.success(
|
||||||
request,
|
request,
|
||||||
_("Queued job #{id} to sync {datasource}").format(id=job.pk, datasource=datasource)
|
_("Queued job #{id} to sync {datasource}").format(id=job.pk, datasource=datasource)
|
||||||
|
Loading…
Reference in New Issue
Block a user