diff --git a/debian/bin/logtracker b/debian/bin/logtracker
index 81af106..af8b38b 100755
--- a/debian/bin/logtracker
+++ b/debian/bin/logtracker
@@ -1,7 +1,7 @@
#!/bin/sh
args=$*
-test $# -eq 0 && args=print
+test $# -eq 0 && args=dump
if [ "$(whoami)" != "logtracker" ]; then
sudo -H -u logtracker logtracker-manage $args
diff --git a/logtracker/journal/management/commands/print.py b/logtracker/journal/management/commands/dump.py
similarity index 93%
rename from logtracker/journal/management/commands/print.py
rename to logtracker/journal/management/commands/dump.py
index 2134ea8..ddcdb9d 100644
--- a/logtracker/journal/management/commands/print.py
+++ b/logtracker/journal/management/commands/dump.py
@@ -19,7 +19,7 @@ class Command(BaseCommand):
def handle(self, *args, **options):
_, columns = os.popen("stty size", "r").read().split()
- for entry in Entry.objects.print(lines=options['lines']):
+ for entry in Entry.objects.dump(lines=options['lines']):
line = "%s %s %s" % (
entry.timestamp.strftime("%c"),
entry.host,
diff --git a/logtracker/journal/models.py b/logtracker/journal/models.py
index 94a203a..4ddd49b 100644
--- a/logtracker/journal/models.py
+++ b/logtracker/journal/models.py
@@ -1,10 +1,21 @@
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 print(self, lines=100):
- return reversed(self.model.objects.order_by('-timestamp')[:int(lines)])
+ 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):
diff --git a/logtracker/journal/templates/home.html b/logtracker/journal/templates/home.html
index f9df953..c87c815 100644
--- a/logtracker/journal/templates/home.html
+++ b/logtracker/journal/templates/home.html
@@ -3,19 +3,24 @@
{% block content %}
Logtracker
-Recent log entries
+Journal entries
+
+
Emails
-Search by recipient
-
-
-
-Recent senders list
+
{% endblock %}
diff --git a/logtracker/journal/templates/journal/entry_list.html b/logtracker/journal/templates/journal/entry_list.html
index 661f8d6..c3b0466 100644
--- a/logtracker/journal/templates/journal/entry_list.html
+++ b/logtracker/journal/templates/journal/entry_list.html
@@ -3,7 +3,7 @@
{% block content %}
Logtracker
-Entries
+Journal entries
diff --git a/logtracker/journal/views.py b/logtracker/journal/views.py
index 607c973..b0966a6 100644
--- a/logtracker/journal/views.py
+++ b/logtracker/journal/views.py
@@ -17,8 +17,9 @@ from logtracker.journal.journalstream import get_journal_entries
class APIEntriesList(LoginRequiredMixin, ListView):
def get_queryset(self):
- qs = Entry.objects.all()
- return qs[:100]
+ lines = self.request.GET.get('lines', 100)
+ host = self.request.GET.get('host', '')
+ return Entry.objects.dump(host=host, lines=lines)
def get(self, request, *args, **kwargs):
queryset = self.get_queryset()
@@ -27,16 +28,20 @@ class APIEntriesList(LoginRequiredMixin, ListView):
class EntriesList(LoginRequiredMixin, ListView):
+ template_name = 'journal/entry_list.html'
+
def get_queryset(self):
- qs = Entry.objects.all()
- return qs[:100]
+ lines = self.request.GET.get('lines', 100)
+ host = self.request.GET.get('host')
+ message = self.request.GET.get('message')
+ return Entry.objects.dump(host=host, lines=lines, message=message)
class HomeView(LoginRequiredMixin, TemplateView):
template_name = 'home.html'
def post(self, request, *args, **kwargs):
- url = '%s?%s' % (reverse('emails'), '%s=%s' % (request.POST['field'], request.POST['address']))
+ url = '%s?%s' % (reverse('mail-api'), '%s=%s' % (request.POST['field'], request.POST['address']))
return HttpResponseRedirect(url)
diff --git a/logtracker/mail/models.py b/logtracker/mail/models.py
index 5dd1ce2..5b1ef53 100644
--- a/logtracker/mail/models.py
+++ b/logtracker/mail/models.py
@@ -49,8 +49,15 @@ class Recipient(Address):
class MailManager(models.Manager):
- def print(self):
- return self.model.objects.all()
+ def dump(self, host=None, lines=None, sender=None):
+ qs = Mail.objects.all()
+ if host:
+ qs = qs.filter(host=host)
+ if sender:
+ qs = qs.filter(sender__email=sender)
+ if lines:
+ qs = qs.order_by('-timestamp')[:int(lines)][::-1]
+ return qs
class Mail(models.Model):
diff --git a/logtracker/mail/templates/entries/home.html b/logtracker/mail/templates/entries/home.html
deleted file mode 100644
index 286e612..0000000
--- a/logtracker/mail/templates/entries/home.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{% extends "base.html" %}
-
-{% block content %}
-Mailtracker
-
-Search by recipient
-
-
-
-Recent senders list
-
-{% endblock %}
diff --git a/logtracker/mail/templates/entries/sender_list.html b/logtracker/mail/templates/entries/sender_list.html
deleted file mode 100644
index b207cc9..0000000
--- a/logtracker/mail/templates/entries/sender_list.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{% extends "base.html" %}
-
-{% block content %}
-Mailtracker
-
-Recent senders
-
-{% endblock %}
diff --git a/logtracker/journal/templates/entries/sender_list.html b/logtracker/mail/templates/mail/sender_list.html
similarity index 75%
rename from logtracker/journal/templates/entries/sender_list.html
rename to logtracker/mail/templates/mail/sender_list.html
index b207cc9..a9cca8b 100644
--- a/logtracker/journal/templates/entries/sender_list.html
+++ b/logtracker/mail/templates/mail/sender_list.html
@@ -17,9 +17,9 @@
{% for sender in object_list %}
{{ sender }} |
- {{ sender.email_count }} |
- {{ sender.error_count }} |
- {{ sender.pending_count }} |
+ {{ sender.email_count }} |
+ {{ sender.error_count }} |
+ {{ sender.pending_count }} |
{% empty %}
No data yet.
diff --git a/logtracker/mail/views.py b/logtracker/mail/views.py
index 7907b97..a41e23c 100644
--- a/logtracker/mail/views.py
+++ b/logtracker/mail/views.py
@@ -4,45 +4,25 @@ from django.views.generic.list import ListView
from django.http import JsonResponse, HttpResponseRedirect
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse
-from django.shortcuts import get_object_or_404
from logtracker.mail.models import Mail, Sender, Recipient
-import json
-
-
-def check(val):
- return val == 'true'
class EmailsList(LoginRequiredMixin, ListView):
def get_queryset(self):
- if self.request.GET.get('from'):
- sender = get_object_or_404(Sender, email=unquote(self.request.GET.get('from')))
- qs = sender.mail_set.all()
- elif self.request.GET.get('to'):
- recipient = get_object_or_404(Recipient, email=unquote(self.request.GET.get('to')))
- qs = recipient.mail_set.all()
- else:
- qs = Mail.objects.all()
- if self.request.GET.get('has_error'):
- qs = qs.filter(has_error=check(self.request.GET.get('has_error')))
- if self.request.GET.get('has_completed'):
- qs = qs.filter(has_completed=check(self.request.GET.get('has_completed')))
- return qs[:100]
+ params = self.request.GET
+ return Mail.objects.dump(host=params.get('host'), sender=params.get('sender'), lines=params.get('lines'))
def get(self, request, *args, **kwargs):
- queryset = self.get_queryset()
- #data = {m.identifier: [str(e) for e in json.dumps(m.entries_list)] for m in queryset}
- data = {m.identifier: [e.data.get('MESSAGE') for e in m.entries_list] for m in queryset}
- #data = {m.identifier: 'a' for m in queryset}
+ data = {m.identifier: [e.data.get('MESSAGE') for e in m.entries_list] for m in self.get_queryset()}
return JsonResponse({'data': data})
class MailHome(LoginRequiredMixin, TemplateView):
- template_name = 'entries/home.html'
+ template_name = 'mail/home.html'
form_class = Recipient
def post(self, request, *args, **kwargs):
- url = '%s?%s' % (reverse('emails'), '%s=%s' % (request.POST['field'], request.POST['address']))
+ url = '%s?%s' % (reverse('mail-api'), '%s=%s' % (request.POST['field'], request.POST['address']))
return HttpResponseRedirect(url)
diff --git a/logtracker/urls.py b/logtracker/urls.py
index a082064..141dd06 100644
--- a/logtracker/urls.py
+++ b/logtracker/urls.py
@@ -8,10 +8,9 @@ from logtracker.mail.views import EmailsList, SendersList, MailHome
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', HomeView.as_view()),
- url(r'^journal/$', EntriesList.as_view()),
- url(r'^api/journal/$', APIEntriesList.as_view(), name='journal'),
- url(r'^api/mail/$', EmailsList.as_view(), name='emails'),
- url(r'^mail/$', MailHome.as_view(), name='mail'),
+ url(r'^journal/$', EntriesList.as_view(), name='journal'),
+ url(r'^api/journal/$', APIEntriesList.as_view(), name='journal-api'),
+ url(r'^api/mail/$', EmailsList.as_view(), name='mail-api'),
url(r'^mail/senders/$', SendersList.as_view(), name='senders'),
url(r'^upload$', UploadView, name='upload'),
]