Change account-less logs to use a user and not null
This allows us to skip the migration
This commit is contained in:
parent
5cb6ba4d12
commit
4f63a50a17
6 changed files with 39 additions and 21 deletions
|
@ -6,9 +6,10 @@ from datetime import datetime, timedelta, date
|
|||
from cachetools import lru_cache
|
||||
|
||||
from data.database import LogEntry, LogEntryKind, User, db
|
||||
from data.model import config
|
||||
|
||||
# TODO: Find a way to get logs without slowing down pagination significantly.
|
||||
def _logs_query(selections, start_time, end_time, performer=None, repository=None, namespace=None):
|
||||
def _logs_query(selections, start_time, end_time, performer=None, repository=None, namespace=None,
|
||||
ignore=None):
|
||||
joined = (LogEntry
|
||||
.select(*selections)
|
||||
.switch(LogEntry)
|
||||
|
@ -23,6 +24,11 @@ def _logs_query(selections, start_time, end_time, performer=None, repository=Non
|
|||
if namespace:
|
||||
joined = joined.join(User).where(User.username == namespace)
|
||||
|
||||
if ignore:
|
||||
kind_map = get_log_entry_kinds()
|
||||
ignore_ids = [kind_map[kind_name] for kind_name in ignore]
|
||||
joined = joined.where(~(LogEntry.kind << ignore_ids))
|
||||
|
||||
return joined
|
||||
|
||||
|
||||
|
@ -31,22 +37,25 @@ def get_log_entry_kinds():
|
|||
kind_map = {}
|
||||
for kind in LogEntryKind.select():
|
||||
kind_map[kind.id] = kind.name
|
||||
kind_map[kind.name] = kind.id
|
||||
|
||||
return kind_map
|
||||
|
||||
|
||||
def get_aggregated_logs(start_time, end_time, performer=None, repository=None, namespace=None):
|
||||
def get_aggregated_logs(start_time, end_time, performer=None, repository=None, namespace=None,
|
||||
ignore=None):
|
||||
date = db.extract_date('day', LogEntry.datetime)
|
||||
selections = [LogEntry.kind, date.alias('day'), fn.Count(LogEntry.id).alias('count')]
|
||||
query = _logs_query(selections, start_time, end_time, performer, repository, namespace)
|
||||
query = _logs_query(selections, start_time, end_time, performer, repository, namespace, ignore)
|
||||
return query.group_by(date, LogEntry.kind)
|
||||
|
||||
|
||||
def get_logs_query(start_time, end_time, performer=None, repository=None, namespace=None):
|
||||
def get_logs_query(start_time, end_time, performer=None, repository=None, namespace=None,
|
||||
ignore=None):
|
||||
Performer = User.alias()
|
||||
selections = [LogEntry, Performer]
|
||||
|
||||
query = _logs_query(selections, start_time, end_time, performer, repository, namespace)
|
||||
query = _logs_query(selections, start_time, end_time, performer, repository, namespace, ignore)
|
||||
query = (query.switch(LogEntry)
|
||||
.join(Performer, JOIN_LEFT_OUTER,
|
||||
on=(LogEntry.performer == Performer.id).alias('performer')))
|
||||
|
@ -76,6 +85,10 @@ def log_action(kind_name, user_or_organization_name, performer=None, repository=
|
|||
account = None
|
||||
if user_or_organization_name is not None:
|
||||
account = User.get(User.username == user_or_organization_name).id
|
||||
else:
|
||||
account = config.app_config.get('SERVICE_LOG_ACCOUNT_ID')
|
||||
if account is None:
|
||||
account = User.select(fn.Min(User.id)).tuples().get()[0]
|
||||
|
||||
kind = LogEntryKind.get(LogEntryKind.name == kind_name)
|
||||
metadata_json = json.dumps(metadata, default=_json_serialize)
|
||||
|
|
Reference in a new issue