Store request_id when available

This commit is contained in:
richard-dds 2018-09-24 13:35:49 -04:00
parent 5e479feadc
commit 4a5b9967ef
3 changed files with 15 additions and 6 deletions

View File

@ -28,6 +28,7 @@ def upgrade():
sa.Column('resource_id', postgresql.UUID(as_uuid=True), nullable=False), sa.Column('resource_id', postgresql.UUID(as_uuid=True), nullable=False),
sa.Column('action', sa.String(), nullable=False), sa.Column('action', sa.String(), nullable=False),
sa.Column('workspace_id', postgresql.UUID(as_uuid=True), nullable=True), sa.Column('workspace_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.Column('request_id', postgresql.UUID(as_uuid=True), nullable=True),
sa.ForeignKeyConstraint(['user_id'], ['users.id']), sa.ForeignKeyConstraint(['user_id'], ['users.id']),
sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id']), sa.ForeignKeyConstraint(['workspace_id'], ['workspaces.id']),
sa.PrimaryKeyConstraint('id') sa.PrimaryKeyConstraint('id')

View File

@ -17,6 +17,8 @@ class AuditEvent(Base, TimestampsMixin):
workspace_id = Column(UUID(as_uuid=True), ForeignKey("workspaces.id"), index=True) workspace_id = Column(UUID(as_uuid=True), ForeignKey("workspaces.id"), index=True)
workspace = relationship("Workspace", backref="audit_events") workspace = relationship("Workspace", backref="audit_events")
request_id = Column(UUID(as_uuid=True), ForeignKey("request.id"), index=True)
resource_type = Column(String(), nullable=False) resource_type = Column(String(), nullable=False)
resource_id = Column(UUID(as_uuid=True), index=True, nullable=False) resource_id = Column(UUID(as_uuid=True), index=True, nullable=False)
display_name = Column(String()) display_name = Column(String())
@ -31,13 +33,14 @@ class AuditEvent(Base, TimestampsMixin):
self.action, self.resource_type, self.resource_id self.action, self.resource_type, self.resource_id
) )
display_name_str = "({})".format(self.display_name) if self.display_name else "" display_name_str = "({})".format(self.display_name) if self.display_name else ""
workspace_str = (
"in workspace {}".format(self.workspace_id)
if self.workspace_id and self.resource_type != "workspace"
else ""
)
return " ".join([user_str, action_str, display_name_str, workspace_str]) scope_str = ""
if self.request_id and self.resource_type != "request":
scope_str = "for request {}".format(self.request_id)
elif self.workspace_id and self.resource_type != "workspace":
scope_str = "in workspace {}".format(self.request_id)
return " ".join([user_str, action_str, display_name_str, scope_str])
def save(self, connection): def save(self, connection):
attrs = inspect(self).dict attrs = inspect(self).dict

View File

@ -26,12 +26,14 @@ class AuditableMixin(object):
def create_audit_event(connection, resource, action): def create_audit_event(connection, resource, action):
user_id = getattr_path(g, "current_user.id") user_id = getattr_path(g, "current_user.id")
workspace_id = resource.auditable_workspace_id() workspace_id = resource.auditable_workspace_id()
request_id = resource.auditable_request_id()
resource_type = resource.auditable_resource_type() resource_type = resource.auditable_resource_type()
display_name = resource.auditable_displayname() display_name = resource.auditable_displayname()
audit_event = AuditEvent( audit_event = AuditEvent(
user_id=user_id, user_id=user_id,
workspace_id=workspace_id, workspace_id=workspace_id,
request_id=request_id,
resource_type=resource_type, resource_type=resource_type,
resource_id=resource.id, resource_id=resource.id,
display_name=display_name, display_name=display_name,
@ -66,5 +68,8 @@ class AuditableMixin(object):
def auditable_workspace_id(self): def auditable_workspace_id(self):
return getattr_path(self, "workspace_id") return getattr_path(self, "workspace_id")
def auditable_request_id(self):
return getattr_path(self, "request_id")
def auditable_displayname(self): def auditable_displayname(self):
return getattr_path(self, "displayname") return getattr_path(self, "displayname")