metrics: Make metrics actually usable
With this commit, we should get stats for the item count per event per returned-state.
This commit is contained in:
parent
06c0d6cf44
commit
2886d887f5
8 changed files with 33 additions and 56 deletions
|
@ -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()
|
|
|
@ -1,11 +1,35 @@
|
||||||
from prometheus_client import Gauge
|
from django.apps import apps
|
||||||
from django_prometheus import exports
|
from prometheus_client.core import CounterMetricFamily, REGISTRY
|
||||||
from inventory.models import *
|
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():
|
def collect(self):
|
||||||
# Get the count of MyModel objects
|
counter = CounterMetricFamily("item_count", "Current number of items", labels=['event', 'state'])
|
||||||
count = Item.objects.count()
|
|
||||||
# Set the gauge to the current count
|
yield counter
|
||||||
g_items_total.set(count)
|
|
||||||
|
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())
|
|
@ -70,7 +70,6 @@ INSTALLED_APPS = [
|
||||||
'inventory',
|
'inventory',
|
||||||
'mail',
|
'mail',
|
||||||
'notify_sessions',
|
'notify_sessions',
|
||||||
'core'
|
|
||||||
]
|
]
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
|
|
|
@ -311,16 +311,6 @@
|
||||||
notify:
|
notify:
|
||||||
- restart c3lf-sys3
|
- 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
|
- name: reload systemd
|
||||||
systemd:
|
systemd:
|
||||||
daemon_reload: yes
|
daemon_reload: yes
|
||||||
|
@ -331,12 +321,6 @@
|
||||||
state: started
|
state: started
|
||||||
enabled: yes
|
enabled: yes
|
||||||
|
|
||||||
- name: start c3lf-sys3 timer
|
|
||||||
service:
|
|
||||||
name: c3lf-sys3-cron.timer
|
|
||||||
state: started
|
|
||||||
enabled: yes
|
|
||||||
|
|
||||||
- name: add postfix to www-data group
|
- name: add postfix to www-data group
|
||||||
user:
|
user:
|
||||||
name: postfix
|
name: postfix
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
Loading…
Add table
Reference in a new issue