33 lines
1.0 KiB
Python
33 lines
1.0 KiB
Python
from django.db import models
|
|
from django.contrib.postgres.fields import JSONField
|
|
from django.contrib.postgres.fields.jsonb import KeyTextTransform
|
|
|
|
|
|
class EntryManager(models.Manager):
|
|
def dump(self, host=None, message=None, lines=100):
|
|
if message:
|
|
qs = Entry.objects.annotate(message=KeyTextTransform('MESSAGE', 'data'))
|
|
else:
|
|
qs = Entry.objects.all()
|
|
if host:
|
|
qs = qs.filter(host=host)
|
|
if message:
|
|
qs = qs.filter(message__contains=message)
|
|
if lines:
|
|
qs = qs.order_by('-timestamp')[:int(lines)][::-1]
|
|
return qs
|
|
|
|
|
|
class Entry(models.Model):
|
|
timestamp = models.DateTimeField(auto_now_add=True, db_index=True)
|
|
host = models.CharField(max_length=128, db_index=True)
|
|
data = JSONField()
|
|
objects = EntryManager()
|
|
|
|
def __str__(self):
|
|
return '%s %s %s' % (self.timestamp, self.host, self.data)
|
|
|
|
@property
|
|
def unit(self):
|
|
return self.data.get('_SYSTEMD_UNIT', '').replace('.service', '')
|