Skip to content

Commit

Permalink
Improving database logging by adding duration, referrer and post data (
Browse files Browse the repository at this point in the history
…#1830)

* Improving logging with duration and referrer

* Handling case where referrer is None

* Providing log_this with its own session

* Attempting to fix tests

* Fixing tests
  • Loading branch information
mistercrunch authored Dec 20, 2016
1 parent 36fad80 commit 0712894
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 2 deletions.
24 changes: 24 additions & 0 deletions superset/migrations/versions/525c854f0005_log_this_plus.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
"""log_this_plus
Revision ID: 525c854f0005
Revises: e46f2d27a08e
Create Date: 2016-12-13 16:19:02.239322
"""

# revision identifiers, used by Alembic.
revision = '525c854f0005'
down_revision = 'e46f2d27a08e'

from alembic import op
import sqlalchemy as sa


def upgrade():
op.add_column('logs', sa.Column('duration_ms', sa.Integer(), nullable=True))
op.add_column('logs', sa.Column('referrer', sa.String(length=1024), nullable=True))


def downgrade():
op.drop_column('logs', 'referrer')
op.drop_column('logs', 'duration_ms')
22 changes: 22 additions & 0 deletions superset/migrations/versions/6414e83d82b7_.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
"""empty message
Revision ID: 6414e83d82b7
Revises: ('525c854f0005', 'f1f2d4af5b90')
Create Date: 2016-12-19 09:57:05.814013
"""

# revision identifiers, used by Alembic.
revision = '6414e83d82b7'
down_revision = ('525c854f0005', 'f1f2d4af5b90')

from alembic import op
import sqlalchemy as sa


def upgrade():
pass


def downgrade():
pass
13 changes: 11 additions & 2 deletions superset/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2316,16 +2316,21 @@ class Log(Model):
user = relationship('User', backref='logs', foreign_keys=[user_id])
dttm = Column(DateTime, default=datetime.utcnow)
dt = Column(Date, default=date.today())
duration_ms = Column(Integer)
referrer = Column(String(1024))

@classmethod
def log_this(cls, f):
"""Decorator to log user actions"""
@functools.wraps(f)
def wrapper(*args, **kwargs):
start_dttm = datetime.now()
user_id = None
if g.user:
user_id = g.user.get_id()
d = request.args.to_dict()
post_data = request.form or {}
d.update(post_data)
d.update(kwargs)
slice_id = d.get('slice_id', 0)
try:
Expand All @@ -2337,15 +2342,19 @@ def wrapper(*args, **kwargs):
params = json.dumps(d)
except:
pass
value = f(*args, **kwargs)
log = cls(
action=f.__name__,
json=params,
dashboard_id=d.get('dashboard_id') or None,
slice_id=slice_id,
duration_ms=(
datetime.now() - start_dttm).total_seconds() * 1000,
referrer=request.referrer[:1000] if request.referrer else None,
user_id=user_id)
db.session.add(log)
db.session.commit()
return f(*args, **kwargs)
db.session.flush()
return value
return wrapper


Expand Down
1 change: 1 addition & 0 deletions superset/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1369,6 +1369,7 @@ def slice(self, slice_id):
viz_obj = self.get_viz(slice_id)
return redirect(viz_obj.get_url(**request.args))

@log_this
@has_access_api
@expose("/explore_json/<datasource_type>/<datasource_id>/")
def explore_json(self, datasource_type, datasource_id):
Expand Down

0 comments on commit 0712894

Please sign in to comment.