# -*- coding: utf-8 -*- from libs.log import logging from models.schedule import Schedule from views.base import BaseHandler logger = logging.getLogger(__name__) class ScheduleHandler(BaseHandler): def delete(self): try: _id = self.request.body _id = int(_id) except: self.abort(400, "request is invalid") if not _id: self.abort(400, "schedule id invalid") schedule = Schedule.get(Schedule.id == _id) if not schedule: self.abort(400, "schedule not found") schedule.invalid() self.json({})
# -*- coding:utf-8 -*- from apscheduler.schedulers.blocking import BlockingScheduler from config import SCHEDULE_INTERVAL from libs.log import logging from models.schedule import Schedule from tools.worker import handle_schedule logger = logging.getLogger('scheduler') sched = BlockingScheduler() @sched.scheduled_job('interval', seconds=SCHEDULE_INTERVAL) def schedule(): schedules = Schedule.gets_ready_schedules() for sche in schedules: logger.info('Get schedule ready to send : %s' % sche.id) handle_schedule.delay(sche.id) sche.queued() sched.start()
# -*- coding:utf-8 -*- import traceback from datetime import datetime from libs.log import logging from libs.mq import mq from libs.mail import send_mail from config import SEND_ADDRESS from models.schedule import Schedule, ScheduleStatus from models.history import History from models.attachment import Attachment logger = logging.getLogger("worker") def _handle_schedule(schedule_id): schedule = Schedule.get(Schedule.id == schedule_id) if not schedule: logger.warn("Schedule is invalid. ID = %s" % schedule_id) return to_mails = schedule.recipients.split(",") attachments = Attachment.gets_by_schedule(schedule_id) atta_dicts = [a.to_mandrill_dict() for a in attachments] rs = send_mail( subject=schedule.subject, from_mail=SEND_ADDRESS, to_mails=to_mails, html=schedule.content, attachments=atta_dicts, ) if not rs:
# -*- coding:utf-8 -*- from datetime import datetime, timedelta from apscheduler.schedulers.blocking import BlockingScheduler from config import REMOVE_ATTACHMENT_INTERVAL from libs.log import logging from models.attachment import Attachment logger = logging.getLogger('remove_attachment') sched = BlockingScheduler() @sched.scheduled_job('interval', seconds=REMOVE_ATTACHMENT_INTERVAL) def remove_attachment(): q = Attachment.delete().where(Attachment.schedule_id == 0 , Attachment.create_time < (datetime.utcnow() - timedelta(days=1))) cnt = q.execute() logger.info('%s useless attachments removed' % cnt) sched.start()