diff --git a/migrations/0004_allow_null_in_event_user.py b/migrations/0004_allow_null_in_event_user.py new file mode 100644 index 0000000000..fd7742b728 --- /dev/null +++ b/migrations/0004_allow_null_in_event_user.py @@ -0,0 +1,12 @@ +from playhouse.migrate import PostgresqlMigrator, migrate + +from redash.models import db + +if __name__ == '__main__': + db.connect_db() + migrator = PostgresqlMigrator(db.database) + + with db.database.transaction(): + migrate( + migrator.drop_not_null('events', 'user_id') + ) diff --git a/redash/controllers.py b/redash/controllers.py index 936fb69dec..0aacda1b5d 100644 --- a/redash/controllers.py +++ b/redash/controllers.py @@ -7,9 +7,8 @@ import csv import hashlib import json -import numbers import cStringIO -import datetime +import time import logging from flask import render_template, send_from_directory, make_response, request, jsonify, redirect, \ @@ -490,6 +489,24 @@ def get(self, query_id=None, query_result_id=None, filetype='json'): query_result = models.QueryResult.get_by_id(query_result_id) if query_result: + if isinstance(self.current_user, models.ApiUser): + event = { + 'user_id': None, + 'action': 'api_get', + 'timestamp': int(time.time()), + 'api_key': self.current_user.id, + 'file_type': filetype + } + + if query_id: + event['object_type'] = 'query' + event['object_id'] = query_id + else: + event['object_type'] = 'query_result' + event['object_id'] = query_result_id + + record_event.delay(event) + if filetype == 'json': data = json.dumps({'query_result': query_result.to_dict()}, cls=utils.JSONEncoder) return make_response(data, 200, cache_headers) diff --git a/redash/models.py b/redash/models.py index d864cd2614..5de11573af 100644 --- a/redash/models.py +++ b/redash/models.py @@ -592,7 +592,7 @@ def delete_instance(self, *args, **kwargs): class Event(BaseModel): - user = peewee.ForeignKeyField(User, related_name="events") + user = peewee.ForeignKeyField(User, related_name="events", null=True) action = peewee.CharField() object_type = peewee.CharField() object_id = peewee.CharField(null=True)