1
0
mirror of https://github.com/peeringdb/peeringdb.git synced 2024-05-11 05:55:09 +00:00
Files
peeringdb-peeringdb/peeringdb_server/stats.py
Matt Griswold e2619a001f Support 202201 (#1111)
* 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>
2022-02-08 13:14:27 -06:00

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,
}