From 6cdc518ae3e3db528a90249d71fb4d0de341e2e4 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 25 Sep 2018 17:17:40 +0200 Subject: [PATCH] Added logs section. --- frontend/src/api.js | 6 ++ frontend/src/components/logs/LogList.vue | 75 +++++++++++++++++++ frontend/src/components/navigation/Navbar.vue | 3 +- frontend/src/router/index.js | 6 ++ modoboa/core/serializers.py | 15 ++++ modoboa/core/urls_api.py | 11 +++ modoboa/core/viewsets.py | 17 +++++ modoboa/urls_api.py | 1 + 8 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 frontend/src/components/logs/LogList.vue create mode 100644 modoboa/core/urls_api.py create mode 100644 modoboa/core/viewsets.py diff --git a/frontend/src/api.js b/frontend/src/api.js index bdc51d053..5f1015203 100644 --- a/frontend/src/api.js +++ b/frontend/src/api.js @@ -39,3 +39,9 @@ export const getParametersStructure = (app) => { export const saveParametersForApplication = (app, values) => { return parametersResource.update({app: app}, values) } + +var logResource = Vue.resource('/api/v1/logs{/pk}/') + +export const getLogs = () => { + return logResource.get() +} diff --git a/frontend/src/components/logs/LogList.vue b/frontend/src/components/logs/LogList.vue new file mode 100644 index 000000000..52330c3c3 --- /dev/null +++ b/frontend/src/components/logs/LogList.vue @@ -0,0 +1,75 @@ + + + diff --git a/frontend/src/components/navigation/Navbar.vue b/frontend/src/components/navigation/Navbar.vue index 646bccd9e..0c317ffa9 100644 --- a/frontend/src/components/navigation/Navbar.vue +++ b/frontend/src/components/navigation/Navbar.vue @@ -88,7 +88,8 @@ export default { }, { icon: 'search', - text: 'Logs' + text: 'Logs', + to: { name: 'LogList' } }, { icon: 'settings', diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js index 8aee91762..a29a73d63 100644 --- a/frontend/src/router/index.js +++ b/frontend/src/router/index.js @@ -3,6 +3,7 @@ import Router from 'vue-router' import DomainList from '@/components/domains/DomainList' import DomainForm from '@/components/domains/DomainForm' import ParametersForm from '@/components/parameters/ParametersForm' +import LogList from '@/components/logs/LogList' Vue.use(Router) @@ -27,6 +28,11 @@ export default new Router({ path: '/parameters/:app', name: 'ParametersEdit', component: ParametersForm + }, + { + path: '/logs/', + name: 'LogList', + component: LogList } ] }) diff --git a/modoboa/core/serializers.py b/modoboa/core/serializers.py index e2af068c7..5aac556c1 100644 --- a/modoboa/core/serializers.py +++ b/modoboa/core/serializers.py @@ -1,5 +1,6 @@ """Core serializers.""" +from django.utils import formats from django.utils.translation import ugettext_lazy, ugettext as _ from django.contrib.auth import password_validation @@ -9,6 +10,7 @@ from rest_framework import serializers from modoboa.lib import fields as lib_fields from . import constants +from . import models class CoreGlobalParametersSerializer(serializers.Serializer): @@ -125,3 +127,16 @@ class CoreGlobalParametersSerializer(serializers.Serializer): if len(errors): raise serializers.ValidationError(errors) return data + + +class LogSerializer(serializers.ModelSerializer): + """Log serializer.""" + + date_created = serializers.SerializerMethodField() + + class Meta: + model = models.Log + fields = ("date_created", "message", "level", "logger") + + def get_date_created(self, log): + return formats.date_format(log.date_created, "SHORT_DATETIME_FORMAT") diff --git a/modoboa/core/urls_api.py b/modoboa/core/urls_api.py new file mode 100644 index 000000000..0c2ab0d76 --- /dev/null +++ b/modoboa/core/urls_api.py @@ -0,0 +1,11 @@ +"""Core API urls.""" + +from rest_framework import routers + +from . import viewsets + + +router = routers.SimpleRouter() +router.register(r"logs", viewsets.LogViewSet) + +urlpatterns = router.urls diff --git a/modoboa/core/viewsets.py b/modoboa/core/viewsets.py new file mode 100644 index 000000000..66eea776c --- /dev/null +++ b/modoboa/core/viewsets.py @@ -0,0 +1,17 @@ +"""Core viewsets.""" + +from rest_framework import permissions, viewsets + +from . import models +from . import serializers + + +class LogViewSet(viewsets.ReadOnlyModelViewSet): + """Log viewset.""" + + permission_classes = ( + permissions.IsAuthenticated, + permissions.DjangoModelPermissions, + ) + queryset = models.Log.objects.all() + serializer_class = serializers.LogSerializer diff --git a/modoboa/urls_api.py b/modoboa/urls_api.py index ca24ad5da..e5b4fc088 100644 --- a/modoboa/urls_api.py +++ b/modoboa/urls_api.py @@ -9,6 +9,7 @@ from django.conf.urls import include, url from modoboa.core.extensions import exts_pool urlpatterns = [ + url("", include("modoboa.core.urls_api")), url("", include("modoboa.admin.urls_api")), url("", include("modoboa.parameters.urls_api")), url("", include("modoboa.limits.urls_api")),