from django.core.management.base import BaseCommand import peeringdb_server.models as pdbm MODELS = [ pdbm.Organization, pdbm.Network, pdbm.InternetExchange, pdbm.InternetExchangeFacility, pdbm.Facility, pdbm.NetworkContact, pdbm.NetworkFacility, pdbm.IXLan, pdbm.IXLanPrefix, pdbm.NetworkIXLan ] STATUS_TYPES = ["ok", "pending", "deleted"] class Command(BaseCommand): help = "Check data status/health" def log(self, id, msg): print "%s: %s" % (id, msg) def print_line(self): print "".join(["-" for i in range(0, 80)]) def handle(self, *args, **options): # STATUS: handleref status breakdown self.print_line() self.log("status", "handleref status breakdown") self.print_line() for model in MODELS: counts = {} for c in STATUS_TYPES: counts[c] = model.objects.filter(status=c).count() counts["invalid"] = model.objects.exclude( status__in=STATUS_TYPES).count() self.log(model.handleref.tag, " ".join( ["%s(%d)" % (k, v) for k, v in counts.items()])) # VERSION: print the id of the instances with the highest # version for each model - this allows to spot possible import issues self.print_line() self.log("version", "5 highest version numbers for each handleref type") self.print_line() for model in MODELS: inst = model.objects.order_by("-version")[:5] self.log(model.handleref.tag, ",".join( ["%d v=%d" % (o.id, o.version) for o in inst])) # Find orphaned elements ixlan = pdbm.IXLan.objects.filter( status="ok", ix__status="deleted").select_related("ix").count() if ixlan > 0: print "%d orphaned ixlans (ix status='deleted')" % ixlan ixfac = pdbm.InternetExchangeFacility.objects.filter( status="ok", ix__status="deleted").select_related("ix").count() if ixfac > 0: print "%d orphaned ixfacs (ix status='deleted')" % ixfac ixfac = pdbm.InternetExchangeFacility.objects.filter( status="ok", facility__status="deleted").select_related("facility").count() if ixfac > 0: print "%d orphaned ixfacs (fac status='deleted')" % ixfac netfac = pdbm.NetworkFacility.objects.filter( status="ok", network__status="deleted").select_related("network").count() if netfac > 0: print "%d orphaned netfacs (net status='deleted')" % netfac netfac = pdbm.NetworkFacility.objects.filter( status="ok", facility__status="deleted").select_related("facility").count() if netfac > 0: print "%d orphaned netfacs (fac status='deleted')" % netfac poc = pdbm.NetworkContact.objects.filter( status="ok", network__status="deleted").select_related("network").count() if poc > 0: print "%d orphaned poc (net status='deleted')" % poc netixlan = pdbm.NetworkIXLan.objects.filter( status="ok", network__status="deleted").select_related("network").count() if netixlan > 0: print "%d orphaned netixlans (net status='deleted')" % netixlan netixlan = pdbm.NetworkIXLan.objects.filter( status="ok", ixlan__status="deleted").select_related("ixlan").count() if netixlan > 0: print "%d orphaned netixlans (ixlan status='deleted')" % netixlan ixpfx = pdbm.IXLanPrefix.objects.filter( status="ok", ixlan__status="deleted").select_related("ixlan").count() if ixpfx: print "%d orphaned ixpfxs (ixlan status='deleted')" % ixpfx for model in [pdbm.Network, pdbm.InternetExchange, pdbm.Facility]: count = model.objects.filter( status="ok", org__status="deleted").select_related("org").count() if count > 0: print "%d orphaned %ss (org status='deleted')" % ( count, model.handleref.tag)