import - whole system of syncing ranchers/herds/livestocks
This commit is contained in:
70
apps/herd/management/commands/sync_herd_rancher.py
Normal file
70
apps/herd/management/commands/sync_herd_rancher.py
Normal file
@@ -0,0 +1,70 @@
|
||||
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}"
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user