mirror of
https://github.com/peeringdb/peeringdb.git
synced 2024-05-11 05:55:09 +00:00
* remove survey notifications * substantially rate limit unauthenticated /api/ queries to encourage authenticated queries #853 * move api throttle class configuration to settings (#853) * #722 with a more generic validation approach * Add organisations and registered users to "Global System Statistics" in footer #620 * poetry relock * linting * regen docs * fix test data Co-authored-by: Stefan Pratter <stefan@20c.com> Co-authored-by: David Poarch <dpoarch@20c.com>
74 lines
2.1 KiB
Python
74 lines
2.1 KiB
Python
"""
|
|
Load and maintain global stats (displayed in peeringdb footer).
|
|
"""
|
|
|
|
from peeringdb_server.models import (
|
|
Facility,
|
|
InternetExchange,
|
|
Network,
|
|
NetworkFacility,
|
|
NetworkIXLan,
|
|
Organization,
|
|
User,
|
|
)
|
|
|
|
|
|
def stats():
|
|
return {
|
|
Network.handleref.tag: Network.handleref.filter(status="ok").count(),
|
|
InternetExchange.handleref.tag: InternetExchange.handleref.filter(
|
|
status="ok"
|
|
).count(),
|
|
Facility.handleref.tag: Facility.handleref.filter(status="ok").count(),
|
|
NetworkIXLan.handleref.tag: NetworkIXLan.handleref.filter(status="ok").count(),
|
|
NetworkFacility.handleref.tag: NetworkFacility.handleref.filter(
|
|
status="ok"
|
|
).count(),
|
|
"automated_nets": Network.handleref.filter(allow_ixp_update=True).count(),
|
|
"registered_users": User.objects.count(),
|
|
"organizations": Organization.objects.filter(status="ok").count(),
|
|
}
|
|
|
|
|
|
def get_fac_stats(netfac, ixfac):
|
|
return {
|
|
"networks": netfac.filter(status="ok").count(),
|
|
"ix": ixfac.filter(status="ok").count(),
|
|
}
|
|
|
|
|
|
def get_ix_stats(netixlan, ixlan):
|
|
|
|
peer_count = netixlan.values("network").distinct().filter(status="ok").count()
|
|
connections_count = netixlan.filter(ixlan=ixlan, status="ok").count()
|
|
open_peer_count = (
|
|
netixlan.values("network")
|
|
.distinct()
|
|
.filter(network__policy_general="Open", status="ok")
|
|
.count()
|
|
)
|
|
ipv6_percentage = 0
|
|
total_speed = 0
|
|
|
|
try:
|
|
ipv6_percentage = int(
|
|
(
|
|
netixlan.filter(status="ok", ixlan=ixlan, ipaddr6__isnull=False).count()
|
|
/ netixlan.filter(ixlan=ixlan, status="ok").count()
|
|
)
|
|
* 100
|
|
)
|
|
except ZeroDivisionError:
|
|
pass
|
|
|
|
for n in netixlan.filter(status="ok", ixlan=ixlan):
|
|
total_speed += n.speed
|
|
|
|
return {
|
|
"peer_count": peer_count,
|
|
"connection_count": connections_count,
|
|
"open_peer_count": open_peer_count,
|
|
"ipv6_percentage": ipv6_percentage,
|
|
"total_speed": total_speed,
|
|
}
|