예제 #1
0
def remove_job():
    jobstore = 'default'
    json_parms = request.get_json(force=True)
    job_id = json_parms.get('job_id', '')
    if job_id != '':
        scheduler.remove_job(job_id, jobstore)
        return jsonify('success')
예제 #2
0
 def get(self):
     job_id = self.get_query_argument('job_id', None)
     action = self.get_query_argument('action', None)
     if job_id:
         # add
         if 'add' == action:
             if job_id not in JOB_IDS:
                 JOB_IDS.append(job_id)
                 scheduler.add_job(task1,
                                   'interval',
                                   seconds=3,
                                   id=job_id,
                                   args=(job_id, ))
                 self.write('[TASK ADDED] - {}'.format(job_id))
             else:
                 self.write('[TASK EXISTS] - {}'.format(job_id))
         # remove
         elif 'remove' == action:
             if job_id in JOB_IDS:
                 scheduler.remove_job(job_id)
                 JOB_IDS.remove(job_id)
                 self.write('[TASK REMOVED] - {}'.format(job_id))
             else:
                 self.write('[TASK NOT FOUND] - {}'.format(job_id))
     else:
         self.write('[INVALID PARAMS] INVALID job_id or action')
예제 #3
0
def remove_service_job():
    jobstore = 'service_jobs'
    json_parms = request.get_json(force=True)
    id = json_parms.get('id', '')
    scheduler.remove_job(id, jobstore)
    response = scheduler.get_all_service_jobs(jobstore)
    return jsonify(response)
예제 #4
0
def change_task_status(status, id):
    """
    改变任务状态
    (('add', '启动'),
    ('pause', '暂停'),
    ('run', '运行'),
    ('stop', '停止'))
    """
    # 验证任务是否存在
    task = Task.objects(id=id).first()
    if not task:
        flash('任务不存在')
    else:
        # 验证状态
        if status not in ('add', 'pause', 'run', 'stop'):
            flash('无效任务状态[' + status + ']')
            return redirect(url_for('core.tasks'))
        if status == 'add':
            add_job(task)
        else:
            job = scheduler.get_job(id)
            if not job:
                flash('任务未启动')
                return status
            if status == 'run':
                scheduler.resume_job(id)
            elif status == 'pause':
                scheduler.pause_job(id)
            elif status == 'stop':
                scheduler.remove_job(id)
        flash('操作成功')
    return status
예제 #5
0
파일: views.py 프로젝트: hmmgit/ck-art
def delete_job(ref_num):
    try:
        scheduler.remove_job(ref_num)
        print '[%s] Job deleted: %s' % (str(datetime.now()), ref_num)
    except:
        flash('Cannot delete, job not found.')
    return redirect(url_for('index'))
예제 #6
0
파일: views.py 프로젝트: hmmgit/ck-art
def delete_job(ref_num):
    try:
        scheduler.remove_job(ref_num)
        print '[%s] Job deleted: %s' % (str(datetime.now()), ref_num)
    except:
        flash('Cannot delete, job not found.')
    return redirect(url_for('index'))
예제 #7
0
def remove_task():
    data = request.json
    ids = data.get('id')
    _data = Task.query.filter_by(id=ids).first()
    scheduler.remove_job(str(ids))  # 添加任务
    _data.status = '创建'
    db.session.commit()
    return jsonify({'msg': '移除成功', 'status': 1})
예제 #8
0
def scheduler_job(job, scheduler=None, cron_change=None):
    if not scheduler:
        from app import scheduler
    scheduler_job_id = 'job_' + str(job.id)
    print('scheduler_job:', job.id, job.is_start, job.mail_id,
          scheduler.get_jobs())
    mail = None
    if scheduler.get_job(
            scheduler_job_id) and not cron_change and job.is_start == 1:
        print('此任务已在执行')
        return

    if job.cron and job.triggers:
        if job.mail_id:
            mail = Mail.query.get(job.mail_id)
        else:
            print('此任务没有配置邮件接收人')
        if job.is_start == 1:
            cron = job.cron.split(' ')
            print(cron)
            if len(cron) != 6:
                print('cron表达式不正确', job.name)
                return
            if cron_change:
                print('定时任务规则改变')

                try:
                    scheduler.remove_job(scheduler_job_id)
                except Exception as e:
                    print(e, '无此任务', job.name)
            scheduler.add_job(id=scheduler_job_id,
                              func=auto_send_mail,
                              trigger=job.triggers,
                              year=cron[5],
                              month=cron[4],
                              day=cron[3],
                              hour=cron[2],
                              minute=cron[1],
                              second=cron[0],
                              args=(job, mail))
            print('get_jobs:', scheduler.get_jobs(),
                  scheduler.get_job(scheduler_job_id))

            print(scheduler.get_job('scheduler_job_id'))

        elif job.is_start == 0:
            print('get_jobs is:', scheduler.get_jobs())
            try:
                scheduler.remove_job(scheduler_job_id)
            except Exception as e:
                print(e, '无此任务', job.name)
                return
            print('get_jobs is_after:', scheduler.get_jobs())
        print('现在有的任务:', scheduler.get_jobs())

    else:
        print('未输入cron表达式或trigger')
        return
예제 #9
0
def remove_task():
    """ 移除任务 """
    data = request.json
    current_app.logger.info('url:{} ,method:{},请求参数:{}'.format(request.url, request.method, data))
    ids = data.get('id')
    _data = Task.query.filter_by(id=ids).first()
    scheduler.remove_job(str(ids))  # 添加任务
    _data.status = '创建'
    db.session.commit()
    return jsonify({'msg': '移除成功', 'status': 1})
예제 #10
0
def handle_off(message):
    user = User.query.filter_by(username=message.chat.username).first()
    if user:
        user.notification_time = None
        try:
            scheduler.remove_job(message.chat.id)
        except Exception:
            print('off error')
        db.session.commit()

    bot.send_message(message.chat.id, "Напоминание снято")
    print(message.text, message.chat.username)
예제 #11
0
def stop():
    name = request.values['name'] if 'name' in request.values else ''
    extendJobDefine = JobDefine.objects((Q(name=name))).first()

    if extendJobDefine is None:
        return XaResult.error(msg=u'请提供正确且存在的任务名称')

    try:
        scheduler.remove_job(id=name)
        app.logger.info(u'%s 任务停止成功!', name)
    except KeyError, e:
        app.logger.error(u'%s 任务停止遇到错误,错误信息:%s', name, e.message)
예제 #12
0
def remove_task():
    """ 移除任务 """
    data = request.json
    ids = data.get('id')
    _data = Task.query.filter_by(id=ids).first()
    _data.status = '创建'
    db.session.commit()
    try:
        scheduler.remove_job(str(ids))  # 移除任务
    except Exception as e:
        print(e)
    return jsonify({'msg': '移除成功', 'status': 1})
예제 #13
0
def remove_job(id, type='html'):
    if type == 'html':
        task_id = id
    elif type == 'rss':
        task_id = 'rss{}'.format(id)

    try:
        scheduler.remove_job('task_{}'.format(task_id))
        logger.info('删除task_{}'.format(task_id))
    except JobLookupError as e:
        logger.info(e)
        logger.info('task_{}不存在'.format(task_id))
예제 #14
0
def cron_batch_del():
    ids = request.form.getlist('id')
    CronInfos.query.filter(
        CronInfos.id.in_(ids)).delete(synchronize_session=False)
    JobLog.query.filter(
        JobLog.cron_info_id.in_(ids)).delete(synchronize_session=False)
    db.session.commit()

    try:
        for cron_id in ids:
            scheduler.remove_job('cron_%s' % cron_id)
    except:
        pass

    return web_api_return(code=0, msg='操作成功', url='/cron_list')
예제 #15
0
def delete_task():
    """根据id删除任务"""
    if not request.content_type == 'application/json':
        return render_response(-1,
                               msg="Content-type must be application/json.")

    task_info = request.json
    task_ids = task_info.get("task_id")
    if not task_ids:
        return render_response(-1, msg="task_id is required.")

    userdata = task_info.get("userdata")
    logger.info((task_ids, userdata))

    if isinstance(task_ids, str):
        task_ids = [task_ids]

    # 对task_id进行查询
    try:
        for task_id in task_ids:
            taskinfo = Task.query.filter((Task.id == task_id)
                                         & (Task.is_delete == False)).first()
            if taskinfo is None:
                logger.error("task not exist.")
                return render_response(-1,
                                       userdata=userdata,
                                       msg='task not exist.')
            taskinfo.is_delete = True
            db.session.add(taskinfo)

            # 删除调度器中的任务
            try:
                scheduler.remove_job(task_id)
            except:
                pass

        db.session.commit()

    except Exception as e:
        # 接口调用失败
        logger.error("task delete error:{}".format(e))
        db.session.rollback()
        msg = "database delete error."
        return render_response(-1, msg=msg, userdata=userdata)
    # logger.info("删除任务成功")
    return render_response(0, userdata=userdata, msg="delete success.")
예제 #16
0
def cron_del():
    id = request.args.get('id')
    cif = CronInfos.query.get(id)
    if not cif:
        return web_api_return(code=1, msg='项目不存在', url='/cron_list')
    cron_id = cif.id

    db.session.delete(cif)

    try:
        scheduler.remove_job('cron_%s' % cron_id)
    except:
        pass

    db.session.execute("delete from job_log where cron_info_id='%s'" % cron_id)

    db.session.commit()
    return web_api_return(code=0, msg='操作成功', url='/cron_list')
예제 #17
0
def reload_runnable_spider_job_execution():
    '''
    add periodic job to scheduler
    :return:
    '''
    running_job_ids = set([job.id for job in scheduler.get_jobs()])
    # app.logger.debug('[running_job_ids] %s' % ','.join(running_job_ids))
    available_job_ids = set()
    # add new job to schedule
    for job_instance in JobInstance.query.filter_by(enabled=0,
                                                    run_type="periodic").all():
        job_id = "spider_job_%s:%s" % (
            job_instance.id,
            int(time.mktime(job_instance.date_modified.timetuple())))
        available_job_ids.add(job_id)
        if job_id not in running_job_ids:
            try:
                scheduler.add_job(run_spider_job,
                                  args=(job_instance.id, ),
                                  trigger='cron',
                                  id=job_id,
                                  minute=job_instance.cron_minutes,
                                  hour=job_instance.cron_hour,
                                  day=job_instance.cron_day_of_month,
                                  day_of_week=job_instance.cron_day_of_week,
                                  month=job_instance.cron_month,
                                  second=0,
                                  max_instances=999,
                                  misfire_grace_time=60 * 60,
                                  coalesce=True)
            except Exception as e:
                app.logger.error(
                    '[load_spider_job] failed {} {},may be cron expression format error '
                    .format(job_id, str(e)))
            app.logger.info(
                '[load_spider_job][project:%s][spider_name:%s][job_instance_id:%s][job_id:%s]'
                % (job_instance.project_id, job_instance.spider_name,
                   job_instance.id, job_id))
    # remove invalid jobs
    for invalid_job_id in filter(
            lambda job_id: job_id.startswith("spider_job_"),
            running_job_ids.difference(available_job_ids)):
        scheduler.remove_job(invalid_job_id)
        app.logger.info('[drop_spider_job][job_id:%s]' % invalid_job_id)
예제 #18
0
파일: views.py 프로젝트: msdcl/doubtnut
def suggested_question_pdf(user_id):
    data = request.data

    data = data.decode('utf8').replace("'", '"')
    run_time = datetime.now() + timedelta(0, 300)
    if data is None or data == '':
        return jsonify({
            'code': 400,
            "message": "data is unavailable",
            "status": 'failed'
        })
    try:
        json_obj = json.loads(data)
    except Exception as e:
        print(e)
        return jsonify({
            'code': 400,
            "message": "Invalid data only json data accepted",
            "status": 'failed'
        })
    job_exist = scheduler.get_job(user_id)
    if job_exist is None:
        scheduler.add_job(job,
                          'date',
                          run_date=run_time,
                          id=str(user_id),
                          kwargs={
                              'user_id': user_id,
                              'json_obj': data
                          })
    else:
        scheduler.remove_job(str(user_id))
        scheduler.add_job(job,
                          'date',
                          run_date=run_time,
                          id=str(user_id),
                          kwargs={
                              'user_id': user_id,
                              'json_obj': data
                          })
    return jsonify({'code': 200, "result": [], "status": 'success'})
예제 #19
0
def __remove_from_scheduler(mid: str):
    try:
        scheduler.remove_job(job_id=mid)
    except JobLookupError:
        return
예제 #20
0
def update_task():
    """
    更新任务
    :return:
    """
    if not request.content_type == 'application/json':
        return render_response(-1,
                               msg="Content-type must be application/json.")
    form = AddTaskForm.from_json(request.json)
    task_id = request.json.get("task_id")
    userdata = request.json.get('userdata')
    # 表单验证
    if not form.validate():
        return render_response(-1, data=form.errors, userdata=userdata)

    # 任务id验证
    if not request.json.get('task_id'):
        msg = "task id is required"
        return render_response(-1, msg=msg, userdata=userdata)

    task = Task.query.get(task_id)
    # 任务未找到
    if not task:
        render_response(-1, msg='task not exist.')

    task.task_name = form.task_name.data
    task.task_type = form.task_type.data
    task.hours = form.hours.data
    task.minutes = form.minutes.data
    # task.seconds = form.seconds.data
    task.day_of_week = form.day_of_week.data
    task.day_of_month = form.day_of_month.data
    task.task_priority = form.task_priority.data
    task.task_start_date = form.task_start_date.data
    task.task_end_date = form.task_end_date.data
    task.task_desc = form.task_desc.data
    task.alarm_mode = form.alarm_mode.data
    # task.modifier_id = form.user_id.data
    # task.modifier_name = form.user_name.data
    task.task_status = 0

    channels_info = form.channels.data

    if not channels_info:
        return render_response(-1, msg="no channel selected.")

    channels_old = Channel.query.filter_by(task_id=task.id).all()
    for channel in channels_old:
        channel.is_delete = True
        db.session.add(channel)

    for channel_info in channels_info:
        channel = Channel()
        channel.task_id = task_id
        channel.channel_id = channel_info.get("channel_id")
        channel.channel_number = channel_info.get("channel_number")
        channel.organization_id = channel_info.get("organization_id")
        channel.device_id = channel_info.get("device_id")
        channel.is_platform = channel_info.get("is_platform")
        channel.platform_id = channel_info.get("platform_id")
        channel.platform_host = channel_info.get("platform_host")
        channel.platform_port = channel_info.get("platform_port")
        channel.platform_user = channel_info.get("platform_user")
        channel.platform_password = channel_info.get("platform_password")
        db.session.add(channel)

    # 创建 任务与检测项目关系表
    items = form.items.data
    task_item_relationships = []
    for k, v in items.items():
        if v is not None:
            item = Item.query.filter_by(item_name=k).first()
            if not item:
                msg = "item name not exist: {}".format(k)
                return render_response(code=-1, userdata=userdata, msg=msg)
            relationship = TaskItemRelationship(task_id=task.id,
                                                item_id=item.id,
                                                threshold=v)
            task_item_relationships.append(relationship)
    task.items = task_item_relationships

    # 添加任务到 任务调度器
    if int(task.task_type) == 1:  # 如果为 一次执行
        try:
            time_str = "{} {}:{}".format(form.task_start_date.data, task.hours,
                                         task.minutes)
            run_date = datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M")

            # if run_date.timestamp() < datetime.datetime.now().timestamp():
            #      设置 misfire_grace_time
            # if -1 < datetime.datetime.now().timestamp() - run_date.timestamp() < 120:
            #     run_date = datetime.datetime.now() + datetime.timedelta(seconds=1)
            # else:
            #     msg = "task run time is missed."  # 执行时间已经错过
            #     return render_response(code=-1, msg=msg, userdata=userdata)

        except Exception as e:
            logger.error("update task time error:{}".format(e))
            msg = "time format error: {}".format(e)
            return render_response(code=-1, msg=msg, userdata=userdata)
        # 添加新的任务,旧的任务被覆盖。
        job = scheduler.add_job(id=task_id,
                                func=task_job,
                                args=(task_id, ),
                                replace_existing=True,
                                trigger='date',
                                run_date=run_date)
    else:
        # APScheduler day_of_week 从0开始,添加时需要减一。
        day_of_weeks = task.day_of_week or None
        if day_of_weeks and type(day_of_weeks) == str:
            day_of_weeks = list(
                map(lambda x: int(x) - 1, task.day_of_week.split(",")))
            day_of_weeks = ",".join(map(str, day_of_weeks))

        # 添加新的任务,旧的任务被覆盖。
        job = scheduler.add_job(id=task_id,
                                func=task_job,
                                args=(task_id, ),
                                replace_existing=True,
                                trigger='cron',
                                day=task.day_of_month,
                                day_of_week=day_of_weeks or None,
                                hour=task.hours,
                                minute=task.minutes)
    # if job.next_run_time < datetime.datetime.now():
    #     pass

    try:
        db.session.add(task)
        db.session.commit()

    except IntegrityError as e:
        db.session.rollback()
        try:
            scheduler.remove_job(id=task.id)
        except:
            pass
        logger.error("update task error", e)
        return render_response(code=-1,
                               msg='Integrity error.',
                               userdata=userdata)

    except Exception as e:
        db.session.rollback()
        try:
            scheduler.remove_job(id=task.id)
        except:
            pass
        logger.error("update task error", e)
        return render_response(code=-1,
                               msg='database error',
                               userdata=userdata)

    msg = "next run time: {}".format(job.next_run_time)
    return render_response(code=0, userdata=userdata, msg=msg)
예제 #21
0
def start_send_email_task():
    running_job = scheduler.get_job('send_email_task')
    if running_job:
        scheduler.remove_job('send_email_task')
    scheduler.add_job('send_email_task', send_email_task)