Added logs section.

This commit is contained in:
Antoine Nguyen
2018-10-05 14:06:59 +02:00
parent 6d17cb4f30
commit 6cdc518ae3
8 changed files with 133 additions and 1 deletions
+6
View File
@@ -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()
}
+75
View File
@@ -0,0 +1,75 @@
<template>
<v-layout>
<v-flex>
<v-toolbar flat color="white">
<v-toolbar-title>Logs</v-toolbar-title>
<v-divider class="mx-2" inset vertical></v-divider>
<v-spacer></v-spacer>
<v-text-field
v-model="search"
append-icon="search"
label="Search"
single-line
hide-details
></v-text-field>
</v-toolbar>
<v-data-table :headers="headers"
:items="logs"
:search="search"
class="elevation-1"
v-bind:pagination.sync="pagination"
>
<template slot="items" slot-scope="props">
<td>{{ props.item.date_created }}</td>
<td>
<v-chip v-if="props.item.level === 'INFO'"
color="primary" text-color="white" small>
{{ props.item.level }}
</v-chip>
<v-chip v-if="props.item.level === 'WARNING'"
color="orange" text-color="white" small>
{{ props.item.level }}
</v-chip>
<v-chip v-if="props.item.level === 'CRITICAL'"
color="red" text-color="white" small>
{{ props.item.level }}
</v-chip>
</td>
<td>{{ props.item.logger }}</td>
<td>{{ props.item.message }}</td>
</template>
</v-data-table>
</v-flex>
</v-layout>
</template>
<script>
import * as api from '@/api'
export default {
data () {
return {
logs: [],
headers: [
{ text: 'Date', value: 'date_created' },
{ text: 'Level', value: 'level' },
{ text: 'Logger', value: 'logger' },
{ text: 'Message', value: 'message' }
],
loading: true,
pagination: {
sortBy: 'date_created',
descending: true,
rowsPerPage: 10
},
search: ''
}
},
created () {
api.getLogs().then(response => {
this.logs = response.data
this.loading = false
})
}
}
</script>
@@ -88,7 +88,8 @@ export default {
},
{
icon: 'search',
text: 'Logs'
text: 'Logs',
to: { name: 'LogList' }
},
{
icon: 'settings',
+6
View File
@@ -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
}
]
})
+15
View File
@@ -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")
+11
View File
@@ -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
+17
View File
@@ -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
+1
View File
@@ -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")),