django-orchestra/orchestra/contrib/metrics/custom_metrics.py

42 lines
1.6 KiB
Python

from prometheus_client import start_http_server, Gauge
import random
from orchestra.contrib.accounts.models import Account
from orchestra.contrib.websites.models import Website
# Crear métricas de tipo Gauge con etiquetas
usuarios_metrica = Gauge('usuarios', 'Número total de usuarios', ['estado'])
websites_metrica = Gauge('websites_server', 'Número total de websites en server', ['target_server', 'estado'])
def actualizar_metrica_usuarios():
# Generar una lista de usuarios aleatorios para el ejemplo
usuarios = Account.objects.all()
# 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))
def actualizar_metrica_websites():
websites = Website.objects.all()
website_dict = {}
for website in websites:
if website.target_server.name not in website_dict.keys():
website_dict[website.target_server.name] = {'activo':0, 'inactivo':0}
if website.is_active:
website_dict[website.target_server.name]['activo'] += 1
else:
website_dict[website.target_server.name]['inactivo'] += 1
for server, value in website_dict.items():
websites_metrica.labels(target_server=server, estado='activo').set(value['activo'])
websites_metrica.labels(target_server=server, estado='no_activo').set(value['inactivo'])