Source code for postgres_metrics.views
from django.core.exceptions import PermissionDenied
from django.db import connections
from django.http import Http404
from django.shortcuts import render
from .metrics import registry as metrics_registry
[docs]class MetricResult:
def __init__(self, connection, name):
self._connection = connection
self._get_metrics(name)
@property
def alias(self):
return self._connection.alias
@property
def dsn(self):
return self._connection.connection.dsn
def _get_metrics(self, metric):
with self._connection.cursor() as cursor:
cursor.execute(metric.sql)
self.headers = [c.name.replace('-', ' ') for c in cursor.description]
self.records = cursor.fetchall()
[docs]def metrics_view(request, name):
if not request.user or not request.user.is_superuser:
raise PermissionDenied
if name not in metrics_registry:
raise Http404
metric = metrics_registry[name]
context = {
'metric': metric,
'results': [],
}
for connection in connections.all():
if connection.vendor != 'postgresql':
continue
db = MetricResult(connection, metric)
context['results'].append(db)
return render(request, 'postgres_metrics/table.html', context=context)