Files
RasadDam_Backend/apps/herd/management/commands/sync_herd_rancher.py

71 lines
1.7 KiB
Python

from django.core.management.base import BaseCommand
from django.db import transaction
from apps.herd.models import (
HerdRancherTemporary,
)
from apps.herd.services.herd_rancher_sync import HerdRancherSyncService
class Command(BaseCommand):
help = "Bulk Sync Rancher & Herd from HerdRancherTemporary"
def add_arguments(self, parser):
parser.add_argument(
'--limit',
type=int,
help='limit number of records'
)
parser.add_argument(
'--dry-run',
action='store_true',
help='run without saving data'
)
parser.add_argument(
'--batch-size',
type=int,
default=1000,
help='batch size'
)
def handle(self, *args, **options):
limit = options['limit']
dry_run = options['dry_run']
batch_size = options['batch_size']
qs = HerdRancherTemporary.objects.all()
if limit:
qs = qs[:limit]
total = qs.count()
self.stdout.write(
self.style.NOTICE(f"Start bulk syncing {total} records")
)
if dry_run:
self.stdout.write(
self.style.WARNING("Running in DRY-RUN mode (no DB writes)")
)
return
try:
with transaction.atomic():
HerdRancherSyncService.bulk_sync(
queryset=qs,
batch_size=batch_size
)
qs.update(sync_status='S')
except Exception as e:
qs.update(sync_status='F')
raise e
self.stdout.write(
self.style.SUCCESS(
f"Done. synced={total}"
)
)