mirror of
https://github.com/lucaspalomodevelop/indico-plugins.git
synced 2026-03-13 15:34:37 +00:00
VC/Vidyo: add celery task for Vidyo cleanup
- remove old periodic task - remove old cli call for the periodic task - new celery task, runs every Monday at 3AM - signal to register the task
This commit is contained in:
parent
32ca74d6c4
commit
adfdc42b6a
@ -16,6 +16,12 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from indico.core import signals
|
||||
from indico.util.i18n import make_bound_gettext
|
||||
|
||||
_ = make_bound_gettext('vc_vidyo')
|
||||
|
||||
|
||||
@signals.import_tasks.connect
|
||||
def _import_tasks(sender, **kwargs):
|
||||
import indico_vc_vidyo.task
|
||||
|
||||
@ -22,11 +22,7 @@ from dateutil import rrule
|
||||
from flask_script import Manager
|
||||
from terminaltables import AsciiTable
|
||||
|
||||
from indico.core.db import db, DBMgr
|
||||
from indico.core.db.sqlalchemy.util.session import update_session_options
|
||||
from indico.modules.scheduler import Client
|
||||
from indico.modules.vc.models.vc_rooms import VCRoom, VCRoomStatus
|
||||
from indico_vc_vidyo.task import VidyoCleanupTask
|
||||
|
||||
cli_manager = Manager(usage="Manages the Vidyo plugin")
|
||||
|
||||
@ -49,15 +45,3 @@ def rooms(status=None):
|
||||
for col in (0, 3, 4):
|
||||
table.justify_columns[col] = 'right'
|
||||
print table.table
|
||||
|
||||
|
||||
@cli_manager.option('interval', type=int)
|
||||
def create_task(interval):
|
||||
"""Creates a Vidyo cleanup task running every N days"""
|
||||
update_session_options(db)
|
||||
if interval < 1:
|
||||
print 'Invalid interval, must be a number >=1'
|
||||
sys.exit(1)
|
||||
with DBMgr.getInstance().global_connection(commit=True):
|
||||
Client().enqueue(VidyoCleanupTask(rrule.DAILY, interval=interval))
|
||||
print 'Task created'
|
||||
|
||||
@ -18,14 +18,15 @@ from __future__ import unicode_literals
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
from celery.schedules import crontab
|
||||
from sqlalchemy.sql.expression import cast
|
||||
|
||||
from indico.core.celery import celery
|
||||
from indico.core.db import db
|
||||
from indico.core.plugins import get_plugin_template_module
|
||||
from indico.modules.vc.models.vc_rooms import VCRoomEventAssociation, VCRoom, VCRoomStatus
|
||||
from indico.modules.vc.notifications import _send
|
||||
from indico.modules.fulltextindexes.models.events import IndexedEvent
|
||||
from indico.modules.scheduler.tasks.periodic import PeriodicUniqueTask
|
||||
from indico.util.date_time import now_utc
|
||||
from indico.util.struct.iterables import committing_iterator
|
||||
from indico_vc_vidyo.api import APIException, RoomNotFoundAPIException
|
||||
@ -55,36 +56,26 @@ def notify_owner(plugin, vc_room):
|
||||
_send('delete', user, plugin, None, vc_room, tpl.get_subject(), tpl.get_body())
|
||||
|
||||
|
||||
class VidyoCleanupTask(PeriodicUniqueTask):
|
||||
"""Gets rid of 'old' Vidyo rooms (not used in recent events)"""
|
||||
DISABLE_ZODB_HOOK = True
|
||||
@celery.periodic_task(run_every=crontab(minute='0', hour='3', day_of_week='monday'))
|
||||
def vidyo_cleanup():
|
||||
from indico_vc_vidyo.plugin import VidyoPlugin
|
||||
plugin = VidyoPlugin.instance
|
||||
with plugin.plugin_context():
|
||||
max_room_event_age = plugin.settings.get('num_days_old')
|
||||
|
||||
@property
|
||||
def logger(self):
|
||||
return self.getLogger()
|
||||
VidyoPlugin.logger.info('Deleting Vidyo rooms that are not used or linked to events all older than {} days'
|
||||
.format(max_room_event_age))
|
||||
candidate_rooms = find_old_vidyo_rooms(max_room_event_age)
|
||||
VidyoPlugin.logger.info('{} rooms found'.format(len(candidate_rooms)))
|
||||
|
||||
def run(self):
|
||||
from indico_vc_vidyo.plugin import VidyoPlugin
|
||||
|
||||
plugin = VidyoPlugin.instance # RuntimeError if not active
|
||||
with plugin.plugin_context():
|
||||
max_room_event_age = plugin.settings.get('num_days_old')
|
||||
|
||||
self.logger.info('Deleting Vidyo rooms that are not used or linked to events all older than {} days'.format(
|
||||
max_room_event_age))
|
||||
|
||||
candidate_rooms = find_old_vidyo_rooms(max_room_event_age)
|
||||
|
||||
self.logger.info('{} rooms found'.format(len(candidate_rooms)))
|
||||
|
||||
for vc_room in committing_iterator(candidate_rooms, n=20):
|
||||
try:
|
||||
plugin.delete_room(vc_room, None)
|
||||
self.logger.info('Room {} deleted from Vidyo server'.format(vc_room))
|
||||
notify_owner(plugin, vc_room)
|
||||
vc_room.status = VCRoomStatus.deleted
|
||||
except RoomNotFoundAPIException:
|
||||
self.logger.warning('Room {} had been already deleted from the Vidyo server'.format(vc_room))
|
||||
vc_room.status = VCRoomStatus.deleted
|
||||
except APIException:
|
||||
self.logger.exception('Impossible to delete Vidyo room {}'.format(vc_room))
|
||||
for vc_room in committing_iterator(candidate_rooms, n=20):
|
||||
try:
|
||||
plugin.delete_room(vc_room, None)
|
||||
VidyoPlugin.logger.info('Room {} deleted from Vidyo server'.format(vc_room))
|
||||
notify_owner(plugin, vc_room)
|
||||
vc_room.status = VCRoomStatus.deleted
|
||||
except RoomNotFoundAPIException:
|
||||
VidyoPlugin.logger.warning('Room {} had been already deleted from the Vidyo server'.format(vc_room))
|
||||
vc_room.status = VCRoomStatus.deleted
|
||||
except APIException:
|
||||
VidyoPlugin.logger.exception('Impossible to delete Vidyo room {}'.format(vc_room))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user