1
0
mirror of https://github.com/peeringdb/peeringdb.git synced 2024-05-11 05:55:09 +00:00
Files
peeringdb-peeringdb/peeringdb_server/management/commands/pdb_status.py
Matt Griswold 04f1928b3c Updates 2.23 (#843)
* pipenv lock and pyupgrade

* pyupgrade, black format, add docs

* update for py3.7
2020-09-29 20:13:38 -05:00

149 lines
4.6 KiB
Python

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(f"{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 list(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,
)
)