forked from shaba/openuds
Added log for all initial loggable objects
Added removing logs at object destroy (models)
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#
|
||||
# Copyright (c) 2013 Virtual Cable S.L.
|
||||
# All rights reserved.
|
||||
@@ -31,6 +30,15 @@
|
||||
@author: Adolfo Gómez, dkmaster at dkmon dot com
|
||||
'''
|
||||
|
||||
from uds.models import UserService
|
||||
from uds.models import DeployedServicePublication
|
||||
from uds.models import DeployedService
|
||||
from uds.models import Service
|
||||
from uds.models import Provider
|
||||
from uds.models import User
|
||||
from uds.models import Group
|
||||
from uds.models import Authenticator
|
||||
|
||||
from uds.models import Log
|
||||
from uds.core.util import log
|
||||
from uds.core.util.Config import GlobalConfig
|
||||
@@ -40,6 +48,18 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
OT_USERSERVICE, OT_PUBLICATION, OT_DEPLOYED_SERVICE, OT_SERVICE, OT_PROVIDER, OT_USER, OT_GROUP, OT_AUTHENTICATOR = xrange(8)
|
||||
|
||||
# Dict for translations
|
||||
transDict = {
|
||||
UserService : OT_USERSERVICE,
|
||||
DeployedServicePublication : OT_PUBLICATION,
|
||||
DeployedService : OT_DEPLOYED_SERVICE,
|
||||
Service : OT_SERVICE,
|
||||
Provider : OT_PROVIDER,
|
||||
User : OT_USER,
|
||||
Group : OT_GROUP,
|
||||
Authenticator : OT_AUTHENTICATOR
|
||||
}
|
||||
|
||||
class LogManager(object):
|
||||
'''
|
||||
Manager for logging (at database) events
|
||||
@@ -54,31 +74,36 @@ class LogManager(object):
|
||||
if LogManager._manager == None:
|
||||
LogManager._manager = LogManager()
|
||||
return LogManager._manager
|
||||
|
||||
|
||||
# User Service log section
|
||||
def __logUserService(self, userService, level, message, source):
|
||||
|
||||
def __log(self, owner_type, owner_id, level, message, source):
|
||||
'''
|
||||
Logs a message associated to an user service
|
||||
Logs a message associated to owner
|
||||
'''
|
||||
from uds.models import getSqlDatetime
|
||||
|
||||
|
||||
qs = Log.objects.filter(owner_id = userService.id, owner_type = OT_USERSERVICE)
|
||||
qs = Log.objects.filter(owner_id = owner_id, owner_type = owner_type)
|
||||
# First, ensure we do not have more than requested logs, and we can put one more log item
|
||||
if qs.count() >= GlobalConfig.MAX_LOGS_PER_ELEMENT.getInt():
|
||||
for i in qs.order_by('-created',)[GlobalConfig.MAX_LOGS_PER_ELEMENT.getInt()-1:]: i.delete()
|
||||
|
||||
# now, we add new log
|
||||
Log.objects.create(owner_type = OT_USERSERVICE, owner_id = userService.id, created = getSqlDatetime(), source = source, level = level, data = message)
|
||||
|
||||
def __getUserServiceLogs(self, userService, limit):
|
||||
Log.objects.create(owner_type = owner_type, owner_id = owner_id, created = getSqlDatetime(), source = source, level = level, data = message)
|
||||
|
||||
|
||||
def __getLogs(self, owner_type, owner_id, limit):
|
||||
'''
|
||||
Get all logs associated with an user service, ordered by date
|
||||
'''
|
||||
qs = Log.objects.filter(owner_id = userService.id, owner_type = OT_USERSERVICE)
|
||||
return [{'date': x.created, 'level': x.level, 'source': x.source, 'message': x.data} for x in qs.order_by('created')][:limit]
|
||||
|
||||
qs = Log.objects.filter(owner_id = owner_id, owner_type = owner_type)
|
||||
return [{'date': x.created, 'level': x.level, 'source': x.source, 'message': x.data} for x in reversed(qs.order_by('-created')[:limit])]
|
||||
|
||||
def __clearLogs(self, owner_type, owner_id):
|
||||
'''
|
||||
Clears all logs related to user service
|
||||
'''
|
||||
Log.objects.filter(owner_id = owner_id, owner_type = owner_type).delete()
|
||||
|
||||
|
||||
|
||||
def doLog(self, wichObject, level, message, source = log.UNKNOWN):
|
||||
'''
|
||||
@@ -86,21 +111,39 @@ class LogManager(object):
|
||||
|
||||
If the object provided do not accepts associated loggin, it simply ignores the request
|
||||
'''
|
||||
from uds.models import UserService
|
||||
|
||||
if type(level) is not int:
|
||||
level = log.logLevelFromStr(level)
|
||||
|
||||
if type(wichObject) is UserService:
|
||||
self.__logUserService(wichObject, level, message, source)
|
||||
owner_type = transDict.get(type(wichObject), None)
|
||||
if owner_type is not None:
|
||||
self.__log(owner_type, wichObject.id, level, message, source)
|
||||
else:
|
||||
logger.debug('Requested doLog for a type of object not covered: {0}'.format(wichObject))
|
||||
|
||||
|
||||
def getLogs(self, wichObject, limit = GlobalConfig.MAX_LOGS_PER_ELEMENT.getInt()):
|
||||
from uds.models import UserService
|
||||
'''
|
||||
Get the logs associated with "wichObject", limiting to "limit" (default is GlobalConfig.MAX_LOGS_PER_ELEMENT)
|
||||
'''
|
||||
|
||||
if type(wichObject) is UserService:
|
||||
return self.__getUserServiceLogs(wichObject, limit)
|
||||
owner_type = transDict.get(type(wichObject), None)
|
||||
|
||||
if owner_type is not None:
|
||||
return self.__getLogs(owner_type, wichObject.id, limit)
|
||||
else:
|
||||
logger.debug('Requested getLogs for a type of object not covered: {0}'.format(wichObject))
|
||||
return []
|
||||
|
||||
def clearLogs(self, wichObject):
|
||||
'''
|
||||
Clears all logs related to wichObject
|
||||
|
||||
Used mainly at object database removal (parent object)
|
||||
'''
|
||||
|
||||
owner_type = transDict.get(type(wichObject), None)
|
||||
if owner_type is not None:
|
||||
self.__clearLogs(owner_type, wichObject.id)
|
||||
else:
|
||||
logger.debug('Requested clearLogs for a type of object not covered: {0}'.format(wichObject))
|
||||
|
||||
Reference in New Issue
Block a user