From 3d8fddfd9ecd3a5f844b03b709e918ff9840ae0a Mon Sep 17 00:00:00 2001 From: jorgepastorr Date: Wed, 24 Jan 2024 18:58:54 +0100 Subject: [PATCH] metrics databases --- orchestra/contrib/metrics/custom_metrics.py | 47 ++++++++++++++++----- orchestra/contrib/metrics/views.py | 3 +- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/orchestra/contrib/metrics/custom_metrics.py b/orchestra/contrib/metrics/custom_metrics.py index 63e18a82..5c8fddd8 100644 --- a/orchestra/contrib/metrics/custom_metrics.py +++ b/orchestra/contrib/metrics/custom_metrics.py @@ -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']) - \ No newline at end of file + +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) + \ No newline at end of file diff --git a/orchestra/contrib/metrics/views.py b/orchestra/contrib/metrics/views.py index 2ea45583..faf6b168 100644 --- a/orchestra/contrib/metrics/views.py +++ b/orchestra/contrib/metrics/views.py @@ -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)