Exemple #1
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
Exemple #2
0
def cron_status():
    datas = request.values.to_dict()

    api_access_token = configs('api_access_token')

    task_name = datas.get('task_name')

    access_token = datas.get('access_token')

    status = datas.get('status')

    if status:
        try:
            if int(status) not in [0, 1]:
                return api_err_return(msg='status只能0或者1')
        except:
            return api_err_return(msg='status只能0或者1')

    if api_access_token:

        if not access_token:
            return api_err_return(msg='access_token不能为空')

        if api_access_token != access_token:
            return api_err_return(msg='access_token错误')

    if not task_name:
        return api_err_return(msg='任务名称不能为空')

    ci = CronInfos.query.filter(CronInfos.task_name == task_name).first()
    if not ci:
        return api_err_return(msg='任务不存在')

    if ci.status == -1:
        return api_err_return(msg='任务已结束,不能再操作,只能重新更新')

    if not status:
        #0停止1运行中
        if ci.status == 0:
            #开启
            ci.status = 1
            scheduler.resume_job('cron_%s' % ci.id)
        else:
            ci.status = 0
            #关闭
            scheduler.pause_job('cron_%s' % ci.id)
    else:
        if int(status) == 0 and ci.status != 0:
            ci.status = 0
            # 关闭
            scheduler.pause_job('cron_%s' % ci.id)

        if int(status) == 1 and ci.status != 1:
            ci.status = 1
            scheduler.resume_job('cron_%s' % ci.id)

    db.session.add(ci)
    db.session.commit()

    return 'ok'
Exemple #3
0
def pause_task():
    data = request.json
    ids = data.get('id')
    _data = Task.query.filter_by(id=ids).first()
    _data.status = '暂停'
    scheduler.pause_job(str(ids))  # 添加任务
    db.session.commit()

    return jsonify({'msg': '暂停成功', 'status': 1})
Exemple #4
0
def pause_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()
    _data.status = '暂停'
    scheduler.pause_job(str(ids))  # 添加任务
    db.session.commit()

    return jsonify({'msg': '暂停成功', 'status': 1})
Exemple #5
0
def resume_next_job(job_id_prefix, current_job_id=None):
    """ Pause current job(if exists) and resume next job """
    from app import scheduler
    if current_job_id is not None:
        scheduler.pause_job(current_job_id)
    this_kind_of_job_ids = [
        job.id for job in scheduler.get_jobs()
        if job.id.startswith(job_id_prefix)
    ]
    next_job_id = reduce((lambda x, y: x if PREVIOUS_RUN_TIME.get(x, 0) < PREVIOUS_RUN_TIME.get(y, 0) else y),
                         this_kind_of_job_ids)
    scheduler.resume_job(next_job_id)
    PREVIOUS_RUN_TIME[next_job_id] = time.time()
Exemple #6
0
 def get(self,id):
     task = Task.query.filter_by(id=id).first()
     try:
         scheduler.pause_job(str(id))
         task.yunxing_status = u'暂停'
         db.session.commit()
         flash(u'定时任务暂停成功!')
         return redirect(url_for('home.timingtask'))
     except:
         task.yunxing_status = u'创建'
         db.session.commit()
         flash(u'定时任务暂停失败!已经为您初始化')
         return redirect(url_for('home.timingtask'))
Exemple #7
0
 def get(self, id):
     next = request.headers.get('Referer')
     task = Task.query.filter_by(id=id).first()
     try:
         scheduler.pause_job(str(id))
         task.yunxing_status = u'暂停'
         db.session.commit()
         flash(u'定时任务暂停成功!')
         return redirect(next or url_for('home.timingtask'))
     except Exception as e:
         task.yunxing_status = u'创建'
         db.session.commit()
         flash(u'定时任务暂停失败!已经为您初始化,原因:%s' % e)
         return redirect(next or url_for('home.timingtask'))
Exemple #8
0
def update_status():
    id = request.args.get('id')
    cif = CronInfos.query.get(id)
    if not cif:
        return web_api_return(code=1, msg='项目不存在', url='/cron_list')
    status = cif.status
    _status = 0
    if status == 0:
        _status = 1
        scheduler.resume_job('cron_%s' % cif.id)
    else:
        scheduler.pause_job('cron_%s' % cif.id)
    cif.status = _status
    db.session.add(cif)
    db.session.commit()
    return web_api_return(code=0, msg='操作成功')
Exemple #9
0
def stop_task():
    """
    暂停正在执行的任务
    """
    if not request.content_type == 'application/json':
        return render_response(-1,
                               msg="Content-type must be application/json.")

    userdata = request.json.get('userdata')

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

    if type(task_ids) == str:
        task_ids = [task_ids]

    for task_id in task_ids:
        task = Task.query.get(task_id)
        if not task:
            return render_response(code=-1,
                                   msg="task not found.",
                                   userdata=userdata)

        try:  # 停止 zabbix
            zabbix.stop(task_id)
        except:
            pass
        try:  # 停止 任务调度
            scheduler.pause_job(task_id)
        except:
            pass

        task.task_status = 2  # 任务状态0表示停止
        try:
            db.session.add(task)
            db.session.commit()
        except Exception as e:
            logger.error(e)
            return render_response(code=-1,
                                   msg="database error.",
                                   userdata=userdata)

    return render_response(code=0, userdata=userdata)
Exemple #10
0
 def pause_job(self):
     scheduler.pause_job(self.scheduler_id)
     with db.auto_commit():
         self.running_state = 0