Use JSONLogger to log audit event information
This commit is contained in:
parent
f1c6717a1e
commit
747a59825a
@ -25,6 +25,19 @@ class AuditEvent(Base, TimestampsMixin):
|
|||||||
display_name = Column(String())
|
display_name = Column(String())
|
||||||
action = Column(String(), nullable=False)
|
action = Column(String(), nullable=False)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def log(self):
|
||||||
|
return {
|
||||||
|
"user_id": str(self.id),
|
||||||
|
"portfolio_id": str(self.portfolio_id),
|
||||||
|
"changed_state": self.changed_state,
|
||||||
|
"event_details": self.event_details,
|
||||||
|
"resource_type": self.resource_type,
|
||||||
|
"resource_id": str(self.resource_id),
|
||||||
|
"display_name": self.display_name,
|
||||||
|
"action": self.action,
|
||||||
|
}
|
||||||
|
|
||||||
def save(self, connection):
|
def save(self, connection):
|
||||||
attrs = inspect(self).dict
|
attrs = inspect(self).dict
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from sqlalchemy import event, inspect
|
from sqlalchemy import event, inspect
|
||||||
from flask import g
|
from flask import g, current_app as app
|
||||||
|
|
||||||
from atst.models.audit_event import AuditEvent
|
from atst.models.audit_event import AuditEvent
|
||||||
from atst.utils import camel_to_snake, getattr_path
|
from atst.utils import camel_to_snake, getattr_path
|
||||||
@ -32,6 +32,7 @@ class AuditableMixin(object):
|
|||||||
)
|
)
|
||||||
|
|
||||||
audit_event.save(connection)
|
audit_event.save(connection)
|
||||||
|
return audit_event
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def __declare_last__(cls):
|
def __declare_last__(cls):
|
||||||
@ -42,17 +43,29 @@ class AuditableMixin(object):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def audit_insert(mapper, connection, target):
|
def audit_insert(mapper, connection, target):
|
||||||
"""Listen for the `after_insert` event and create an AuditLog entry"""
|
"""Listen for the `after_insert` event and create an AuditLog entry"""
|
||||||
target.create_audit_event(connection, target, ACTION_CREATE)
|
event = target.create_audit_event(connection, target, ACTION_CREATE)
|
||||||
|
app.logger.info(
|
||||||
|
"Audit Event insert",
|
||||||
|
extra={"audit_event": event.log, "tags": ["audit_event", "insert"]},
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def audit_delete(mapper, connection, target):
|
def audit_delete(mapper, connection, target):
|
||||||
"""Listen for the `after_delete` event and create an AuditLog entry"""
|
"""Listen for the `after_delete` event and create an AuditLog entry"""
|
||||||
target.create_audit_event(connection, target, ACTION_DELETE)
|
event = target.create_audit_event(connection, target, ACTION_DELETE)
|
||||||
|
app.logger.info(
|
||||||
|
"Audit Event delete",
|
||||||
|
extra={"audit_event": event.log, "tags": ["audit_event", "delete"]},
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def audit_update(mapper, connection, target):
|
def audit_update(mapper, connection, target):
|
||||||
if AuditableMixin.get_changes(target):
|
if AuditableMixin.get_changes(target):
|
||||||
target.create_audit_event(connection, target, ACTION_UPDATE)
|
event = target.create_audit_event(connection, target, ACTION_UPDATE)
|
||||||
|
app.logger.info(
|
||||||
|
"Audit Event update",
|
||||||
|
extra={"audit_event": event.log, "tags": ["audit_event", "update"]},
|
||||||
|
)
|
||||||
|
|
||||||
def get_changes(self):
|
def get_changes(self):
|
||||||
"""
|
"""
|
||||||
|
@ -31,6 +31,7 @@ class JsonFormatter(logging.Formatter):
|
|||||||
("severity", lambda r: r.levelname),
|
("severity", lambda r: r.levelname),
|
||||||
("tags", lambda r: r.__dict__.get("tags")),
|
("tags", lambda r: r.__dict__.get("tags")),
|
||||||
("message", lambda r: r.msg),
|
("message", lambda r: r.msg),
|
||||||
|
("audit_event", lambda r: r.__dict__.get("audit_event")),
|
||||||
]
|
]
|
||||||
|
|
||||||
def format(self, record):
|
def format(self, record):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user