Move history audit pruning to HistroyAudit class

This commit is contained in:
mvdbeek
2021-05-11 18:34:30 +02:00
parent 3d59717142
commit 4265dc4b62
2 changed files with 17 additions and 17 deletions
+1 -17
View File
@@ -1,9 +1,4 @@
from lagom import magic_bind_to_container
from sqlalchemy import (
and_,
func,
tuple_
)
from sqlalchemy.orm.scoping import (
scoped_session,
)
@@ -85,17 +80,6 @@ def export_history(
@galaxy_task
def prune_history_audit_table(sa_session: scoped_session):
"""Prune ever growing history_audit table."""
history_audit_table = model.HistoryAudit.table
latest_subq = sa_session.query(
history_audit_table.c.history_id,
func.max(history_audit_table.c.update_time).label('max_update_time')).group_by(history_audit_table.c.history_id).subquery()
not_latest_query = sa_session.query(
history_audit_table.c.history_id, history_audit_table.c.update_time
).select_from(latest_subq).join(
history_audit_table, and_(
history_audit_table.c.update_time < latest_subq.columns.max_update_time,
history_audit_table.c.history_id == latest_subq.columns.history_id))
d = history_audit_table.delete()
timer = ExecutionTimer()
sa_session.execute(d.where(tuple_(history_audit_table.c.history_id, history_audit_table.c.update_time).in_(not_latest_query)))
model.HistoryAudit.prune(sa_session)
log.debug(f"Successfully pruned history_audit table {timer}")
+16
View File
@@ -35,6 +35,7 @@ from sqlalchemy import (
select,
text,
true,
tuple_,
type_coerce,
types)
from sqlalchemy.exc import OperationalError
@@ -1850,6 +1851,21 @@ class HistoryAudit(RepresentById):
self.history = history
self.update_time = update_time
@classmethod
def prune(cls, sa_session):
history_audit_table = cls.table
latest_subq = sa_session.query(
history_audit_table.c.history_id,
func.max(history_audit_table.c.update_time).label('max_update_time')).group_by(history_audit_table.c.history_id).subquery()
not_latest_query = sa_session.query(
history_audit_table.c.history_id, history_audit_table.c.update_time
).select_from(latest_subq).join(
history_audit_table, and_(
history_audit_table.c.update_time < latest_subq.columns.max_update_time,
history_audit_table.c.history_id == latest_subq.columns.history_id))
d = history_audit_table.delete()
sa_session.execute(d.where(tuple_(history_audit_table.c.history_id, history_audit_table.c.update_time).in_(not_latest_query)))
class History(HasTags, Dictifiable, UsesAnnotations, HasName, RepresentById):