From 539d9a6347dc8c93f7fc9795fbbb2a7184c8723a Mon Sep 17 00:00:00 2001 From: mike cullerton Date: Fri, 16 Sep 2022 10:58:51 -0400 Subject: [PATCH] Add current_user to logs --- .../versions/{ab77f4ccb4d6_.py => 097f52a3ec5d_.py} | 8 +++++--- src/spiffworkflow_backend/models/spiff_logging.py | 2 ++ src/spiffworkflow_backend/services/logging_service.py | 5 +++++ 3 files changed, 12 insertions(+), 3 deletions(-) rename migrations/versions/{ab77f4ccb4d6_.py => 097f52a3ec5d_.py} (98%) diff --git a/migrations/versions/ab77f4ccb4d6_.py b/migrations/versions/097f52a3ec5d_.py similarity index 98% rename from migrations/versions/ab77f4ccb4d6_.py rename to migrations/versions/097f52a3ec5d_.py index 55b78462..bcb34549 100644 --- a/migrations/versions/ab77f4ccb4d6_.py +++ b/migrations/versions/097f52a3ec5d_.py @@ -1,8 +1,8 @@ """empty message -Revision ID: ab77f4ccb4d6 +Revision ID: 097f52a3ec5d Revises: -Create Date: 2022-09-15 10:40:27.958824 +Create Date: 2022-09-16 10:44:23.258357 """ from alembic import op @@ -10,7 +10,7 @@ import sqlalchemy as sa # revision identifiers, used by Alembic. -revision = 'ab77f4ccb4d6' +revision = '097f52a3ec5d' down_revision = None branch_labels = None depends_on = None @@ -213,6 +213,8 @@ def upgrade(): sa.Column('spiff_task_guid', sa.String(length=50), nullable=False), sa.Column('timestamp', sa.DECIMAL(precision=17, scale=6), nullable=False), sa.Column('message', sa.String(length=50), nullable=True), + sa.Column('current_user_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['current_user_id'], ['user.id'], ), sa.ForeignKeyConstraint(['process_instance_id'], ['process_instance.id'], ), sa.PrimaryKeyConstraint('id') ) diff --git a/src/spiffworkflow_backend/models/spiff_logging.py b/src/spiffworkflow_backend/models/spiff_logging.py index eab5ee2c..3ff250b5 100644 --- a/src/spiffworkflow_backend/models/spiff_logging.py +++ b/src/spiffworkflow_backend/models/spiff_logging.py @@ -7,6 +7,7 @@ from flask_bpmn.models.db import SpiffworkflowBaseDBModel from sqlalchemy import ForeignKey from spiffworkflow_backend.models.process_instance import ProcessInstanceModel +from spiffworkflow_backend.models.user import UserModel @dataclass @@ -21,3 +22,4 @@ class SpiffLoggingModel(SpiffworkflowBaseDBModel): spiff_task_guid: str = db.Column(db.String(50), nullable=False) timestamp: float = db.Column(db.DECIMAL(17, 6), nullable=False) message: Optional[str] = db.Column(db.String(50), nullable=True) + current_user_id: int = db.Column(ForeignKey(UserModel.id), nullable=True) diff --git a/src/spiffworkflow_backend/services/logging_service.py b/src/spiffworkflow_backend/services/logging_service.py index 50d04145..5cae35ac 100644 --- a/src/spiffworkflow_backend/services/logging_service.py +++ b/src/spiffworkflow_backend/services/logging_service.py @@ -4,6 +4,7 @@ import logging from typing import Any from typing import Optional +from flask import g from flask.app import Flask from flask_bpmn.models.db import db @@ -99,6 +100,8 @@ class SpiffFilter(logging.Filter): if hasattr(tld, "process_instance_id"): process_instance_id = tld.process_instance_id setattr(record, "process_instance_id", process_instance_id) # noqa: B010 + if hasattr(g, "user") and g.user: + setattr(record, "current_user_id", g.user.id) # noqa: B010 return True @@ -175,6 +178,7 @@ class DBHandler(logging.Handler): bpmn_task_identifier = str(record.task_spec) # type: ignore timestamp = record.created message = record.msg if hasattr(record, "msg") else None + current_user_id = record.current_user_id if hasattr(record, "current_user_id") else None # type: ignore spiff_log = SpiffLoggingModel( process_instance_id=record.process_instance_id, # type: ignore bpmn_process_identifier=bpmn_process_identifier, @@ -182,6 +186,7 @@ class DBHandler(logging.Handler): bpmn_task_identifier=bpmn_task_identifier, message=message, timestamp=timestamp, + current_user_id=current_user_id, ) db.session.add(spiff_log) db.session.commit()