def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to find all logs by search parameters. URLs: /eventlog/find/ """ self.log.info('find all logs') try: # Common validations # User permission if not has_perm(user, AdminPermission.USER_ADMINISTRATION, AdminPermission.READ_OPERATION): self.log.error( 'User does not have permission to perform this operation.') return self.not_authorized() # Business Validations # Here starts the stuff functionalities = Functionality.objects acoes = ['Alterar', 'Cadastrar', 'Remover'] usuarios = EventLog.uniqueUsers() funcionalidades = functionalities.all() usuarios = UsersList(usuarios) funcionalidades = FunctionalitiesList(funcionalidades) choices_map = dict() choices_map['usuario'] = usuarios choices_map['acao'] = acoes choices_map['funcionalidade'] = funcionalidades return self.response(dumps_networkapi(choices_map)) except InvalidValueError, e: self.log.error( u'Parameter %s is invalid. Value: %s.', e.param, e.value) return self.response_error(269, e.param, e.value)
id_objeto=id_objeto, funcionalidade=classe.__name__).order_by('-hora_evento')[0] except: parametro_anterior = '' else: parametro_anterior = "parametro anterior" event['acao'] = 'Alterar' event['funcionalidade'] = classe.__name__ event['parametro_anterior'] = parametro_anterior event['parametro_atual'] = parametro_atual event['id_objeto'] = id_objeto #event = 'Alterar a tabela ' + instance._meta.db_table + '. Registro alterado: ' + values_map.__repr__() + '.' EventLog.log(user, event) # Método que processará o signal enviado após a invocação do método delete # dos models def networkapi_post_delete(sender, instance, **kwargs): # Define dados do log event = dict() try: user = instance.authenticated_user except Exception, e: raise MissingUserError(e)
def save_audit(instance, operation, kwargs={}): """ Saves the audit. However, the variable persist_audit controls if the audit should be really saved to the database or not. This variable is only affected in a change operation. If no change is detected than it is setted to False. Keyword arguments: instance -- instance operation -- operation type (add, change, delete) kwargs -- kwargs dict sent from m2m signal """ m2m_change = kwargs.get('m2m_change', False) event = dict() action = None try: persist_audit = True new_state = to_dict(instance) old_state = {} try: if operation == EventLog.CHANGE and instance.pk: if not m2m_change: old_state = to_dict( instance.__class__.objects.get(pk=instance.pk)) else: # m2m change LOG.debug('m2m change detected') new_state = kwargs.get('new_state', {}) old_state = kwargs.get('old_state', {}) except: pass if m2m_change: # m2m_change returns a list of changes changed_fields = m2m_audit.m2m_dict_diff(old_state, new_state) else: changed_fields = dict_diff(old_state, new_state) ######################## # CHANGE OPERATION ######################## if operation == EventLog.CHANGE: action = 'Alterar' # is there any change? if not changed_fields: persist_audit = False if m2m_change: descriptions = [] for changed_field in changed_fields: description = u'\n'.join([u'%s %s: %s %s %s %s' % ( _('field'), k, _('was changed from'), format_value(v[0]), _('to'), format_value(v[1]), ) for k, v in changed_field.items()]) descriptions.append(description) else: description = u'\n'.join([u'%s %s: %s %s %s %s' % ( _('field'), k, _('was changed from'), format_value(v[0]), _('to'), format_value(v[1]), ) for k, v in changed_fields.items()]) elif operation == EventLog.DELETE: action = 'Remover' description = _('Deleted %s') % unicode(instance) elif operation == EventLog.ADD: action = 'Cadastrar' description = _('Added %s') % unicode(instance) # LOG.debug("called audit with operation=%s instance=%s persist=%s" % (operation, instance, persist_audit)) if persist_audit: if m2m_change: for description in descriptions: # obj_description = ( # instance and unicode(instance) and '')[:100] audit_request = AuditRequest.current_request(True) changed_field = changed_fields.pop(0) old_value_list = {} new_value_list = {} for field, (old_value, new_value) in changed_field.items(): old_value_list.update( {field: handle_unicode(old_value)}) new_value_list.update( {field: handle_unicode(new_value)}) event['acao'] = 'Alterar' if action is None else action event['funcionalidade'] = instance.__class__.__name__ event['parametro_anterior'] = old_value_list event['parametro_atual'] = new_value_list event['id_objeto'] = instance.pk event['audit_request'] = audit_request # save the event log if audit_request: EventLog.log(audit_request.user, event) if LOG_QUEUE: EventLogQueue.log(audit_request.user, event) else: EventLog.log(None, event) if LOG_QUEUE: EventLogQueue.log(None, event) else: # obj_description = (instance and unicode(instance) and '')[:100] audit_request = AuditRequest.current_request(True) old_value_list = {} new_value_list = {} for field, (old_value, new_value) in changed_fields.items(): old_value_list.update({field: handle_unicode(old_value)}) new_value_list.update({field: handle_unicode(new_value)}) event['acao'] = 'Alterar' if action is None else action event['funcionalidade'] = instance.__class__.__name__ event['parametro_anterior'] = old_value_list event['parametro_atual'] = new_value_list event['id_objeto'] = instance.pk event['audit_request'] = audit_request if audit_request: EventLog.log(audit_request.user, event) if LOG_QUEUE: EventLogQueue.log(audit_request.user, event) else: EventLog.log(None, event) if LOG_QUEUE: EventLogQueue.log(None, event) except: LOG.error(u'Error registering auditing to %s: (%s) %s', repr(instance), type(instance), getattr(instance, '__dict__', None), exc_info=True)