metrics: Make metrics actually usable
All checks were successful
/ test (push) Successful in 2m40s
/ deploy (push) Successful in 4m25s

With this commit, we should get stats for the item count per event per
returned-state.
This commit is contained in:
lagertonne 2024-12-23 11:42:27 +01:00
parent 06c0d6cf44
commit 2886d887f5
8 changed files with 33 additions and 56 deletions

View file

@ -1,8 +0,0 @@
from django.core.management.base import BaseCommand, CommandError
from core.metrics import update_item_count
class Command(BaseCommand):
help = "Refresh the metrics"
def handle(self, *args, **options):
update_item_count()

View file

@ -1,11 +1,35 @@
from prometheus_client import Gauge
from django_prometheus import exports
from inventory.models import *
from django.apps import apps
from prometheus_client.core import CounterMetricFamily, REGISTRY
from django.db.models import Case, Value, When, BooleanField, Count
from inventory.models import Item
g_items_total = Gauge('c3lf_items_total', 'Current Total items')
class ItemCountCollector(object):
def update_item_count():
# Get the count of MyModel objects
count = Item.objects.count()
# Set the gauge to the current count
g_items_total.set(count)
def collect(self):
counter = CounterMetricFamily("item_count", "Current number of items", labels=['event', 'state'])
yield counter
if not apps.models_ready or not apps.apps_ready:
return
queryset = (
Item.all_objects
.annotate(
returned=Case(
When(returned_at__isnull=False, then=Value(False)),
default=Value(True),
output_field=BooleanField()
)
)
.values('event__slug', 'returned', 'event_id')
.annotate(amount=Count('id'))
.order_by('event__slug', 'returned') # Optional: order by slug and returned
)
for e in queryset:
counter.add_metric([e["event__slug"].lower(), str(e["returned"])], e["amount"])
yield counter
REGISTRY.register(ItemCountCollector())

View file

@ -70,7 +70,6 @@ INSTALLED_APPS = [
'inventory',
'mail',
'notify_sessions',
'core'
]
REST_FRAMEWORK = {

View file

@ -311,16 +311,6 @@
notify:
- restart c3lf-sys3
- name: add c3lf-sys3-cron service
template:
src: templates/c3lf-sys3-cron.service.j2
dest: /etc/systemd/system/c3lf-sys3-cron.service
- name: add c3lf-sys3-cron timer
template:
src: templates/c3lf-sys3-cron.timer.j2
dest: /etc/systemd/system/c3lf-sys3-cron.timer
- name: reload systemd
systemd:
daemon_reload: yes
@ -331,12 +321,6 @@
state: started
enabled: yes
- name: start c3lf-sys3 timer
service:
name: c3lf-sys3-cron.timer
state: started
enabled: yes
- name: add postfix to www-data group
user:
name: postfix

View file

@ -1,13 +0,0 @@
[Unit]
Description=c3lf sys3 background service
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/c3lf-sys3
ExecStart=/var/www/c3lf-sys3/venv/bin/python3 /var/www/c3lf-sys3/repo/core/manage.py update_metrics
Environment=DJANGO_SETTINGS_MODULE=core.settings
[Install]
WantedBy=multi-user.target

View file

@ -1,9 +0,0 @@
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnCalendar=minutely
Unit=c3lf-sys3-cron.service
[Install]
WantedBy=timers.target