metrics databases
This commit is contained in:
parent
031a290390
commit
3d8fddfd9e
|
@ -3,24 +3,35 @@ import random
|
|||
|
||||
from orchestra.contrib.accounts.models import Account
|
||||
from orchestra.contrib.websites.models import Website
|
||||
from orchestra.contrib.databases.models import Database
|
||||
from orchestra.contrib.resources.models import ResourceData
|
||||
|
||||
|
||||
# Crear métricas de tipo Gauge con etiquetas
|
||||
usuarios_metrica = Gauge('usuarios', 'Número total de usuarios', ['estado'])
|
||||
usuarios_metrica = Gauge('usuarios', 'Número total de usuarios', ['tipo', 'estado'])
|
||||
websites_metrica = Gauge('websites_server', 'Número total de websites en server', ['target_server', 'estado'])
|
||||
databases_metrica = Gauge('databases', 'Número total de websites en server', ['target_server'])
|
||||
databases_top_size_metrica = Gauge('databases_top_size', 'Número total de websites en server', ['database'])
|
||||
|
||||
|
||||
def actualizar_metrica_usuarios():
|
||||
# Generar una lista de usuarios aleatorios para el ejemplo
|
||||
usuarios = Account.objects.all()
|
||||
|
||||
user_dict = {}
|
||||
for user in usuarios:
|
||||
if user.type not in user_dict.keys():
|
||||
user_dict[user.type] = {'activo':0, 'inactivo':0}
|
||||
|
||||
if user.is_active:
|
||||
user_dict[user.type]['activo'] += 1
|
||||
else:
|
||||
user_dict[user.type]['inactivo'] += 1
|
||||
|
||||
# Contar usuarios activos, no activos y actualizar la métrica
|
||||
usuarios_activos = sum(1 for usuario in usuarios if usuario.is_active)
|
||||
usuarios_no_activos = len(usuarios) - usuarios_activos
|
||||
|
||||
usuarios_metrica.labels(estado='activo').set(usuarios_activos)
|
||||
usuarios_metrica.labels(estado='no_activo').set(usuarios_no_activos)
|
||||
usuarios_metrica.labels(estado='total').set(len(usuarios))
|
||||
|
||||
# envia metrica por cada tipo de usuario num de activos y inactivos
|
||||
for type, value in user_dict.items():
|
||||
usuarios_metrica.labels(tipo=type, estado='activo').set(value['activo'])
|
||||
usuarios_metrica.labels(tipo=type, estado='no_activo').set(value['inactivo'])
|
||||
|
||||
def actualizar_metrica_websites():
|
||||
websites = Website.objects.all()
|
||||
|
@ -39,4 +50,20 @@ def actualizar_metrica_websites():
|
|||
websites_metrica.labels(target_server=server, estado='activo').set(value['activo'])
|
||||
websites_metrica.labels(target_server=server, estado='no_activo').set(value['inactivo'])
|
||||
|
||||
|
||||
|
||||
def actualizar_metrica_databases():
|
||||
databases = Database.objects.all()
|
||||
|
||||
data = {}
|
||||
for database in databases:
|
||||
if database.target_server.name not in data.keys():
|
||||
data[database.target_server.name] = {'total':0}
|
||||
data[database.target_server.name]['total'] += 1
|
||||
|
||||
for server, value in data.items():
|
||||
databases_metrica.labels(target_server=server).set(value['total'])
|
||||
|
||||
top_resources = ResourceData.objects.filter(resource_id=5, used__isnull=False).order_by('-used')[:10]
|
||||
for resourcedata in top_resources:
|
||||
databases_top_size_metrica.labels(database=resourcedata.content_object_repr).set(resourcedata.used)
|
||||
|
|
@ -3,13 +3,14 @@ from django.http import HttpResponse
|
|||
from django.views.decorators.http import require_GET
|
||||
from prometheus_client.exposition import generate_latest
|
||||
from prometheus_client import REGISTRY, CONTENT_TYPE_LATEST
|
||||
from .custom_metrics import actualizar_metrica_usuarios, actualizar_metrica_websites
|
||||
from .custom_metrics import actualizar_metrica_usuarios, actualizar_metrica_websites, actualizar_metrica_databases
|
||||
|
||||
@require_GET
|
||||
def metrics_view(request):
|
||||
# Actualizar métricas antes de generar el contenido
|
||||
actualizar_metrica_usuarios()
|
||||
actualizar_metrica_websites()
|
||||
actualizar_metrica_databases()
|
||||
|
||||
# Devolver las métricas exportadas como respuesta HTTP
|
||||
output = generate_latest(REGISTRY)
|
||||
|
|
Loading…
Reference in a new issue