Пример #1
0
def initialGas_deal():
    # 首先与主程序通信更新 InitialGas 模型中数据
    updateModel(parseGasData, user_email=current_user.email)
    # 查询数据库获取当前的主控板数据
    # 按照时间戳降序方式将控制板数据排序,也就是说第一位数据时间最新
    initialGas = InitialGas.query.order_by(InitialGas.timestamp.desc()).first()
    return initialGas
Пример #2
0
def views():
    if not current_user.is_authenticated:
        return redirect(url_for('auth.login'))
    else:
        flash(u'欢迎使用!')
        updateModel(parseGasData, user_email=current_user.email)
        initialGass = InitialGas.query.order_by(InitialGas.timestamp).all()
        return render_template('views.html', initialGass=initialGass)
Пример #3
0
def deploy_task():
    if not current_user.is_authenticated:
        return redirect(url_for('auth.login'))
    else:
        # 获取数据文件的存储位置时,需要使用当前应用实例 app 来创建
        # 应用上下文,所以需要获取 current_app 代理对象背后潜在的被代理的当前应用实例 app,
        # 可以用 _get_current_object() 方法获取 app。
        app = current_app._get_current_object()

        # flash(u'欢迎!')
        addTaskForm = AddtaskForm()
        submitTaskForm = SubmitTaskForm()
        add_task_to_taskPool, add_task_to_Task = query_construct_taskTemp()
        if submitTaskForm.validate_on_submit():
            print(u'收到了提交的任务表单!')
            # print(submitTaskForm.flag.render_kw.get('value'))
            # print(request.form)
            if request.form.get('flag') == '1':
                print(u'表单验证通过!')

                for add_task in add_task_to_Task:
                    # 任务的执行状态默认为等待
                    task = Task(type=add_task.get('type'),
                                attr=add_task.get('attr'),
                                data_file_name=add_task.get('data_file_name'),
                                user_task=add_task.get('user_task'),
                                timestamp=add_task.get('timestamp'))
                    # 查询 TaskTemp 中对应的任务
                    ttmp = TaskTemp.query.filter_by(
                        id=add_task.get('id')).first()
                    try:
                        db.session.add(task)
                        if ttmp is not None:
                            db.session.delete(ttmp)
                        db.session.commit()
                    except Exception as err:
                        print('move TaskTemp datas to Task occurs error: %s' %
                              err)
                        db.session.rollback()
                        flash(u'任务提交失败!')

                # 调用处理函数改变 socket_client 中 cmd_search 中的 parseDeployTaskData 对应的数据
                parseTaskQueue(add_task_to_taskPool)
                # 通过 socket 与主控板通信,进行任务注册及注册状态处理
                updateModel(parseDeployTaskData, user_email=current_user.email)

                flash(u'任务提交成功!')
                # return redirect(url_for('main.deploy_task'))
                return redirect(url_for('main.issue_task'))
        return render_template('deploy_task.html',
                               addTaskForm=addTaskForm,
                               submitTaskForm=submitTaskForm,
                               add_task_to_taskPool=add_task_to_taskPool)
Пример #4
0
def calBoard_deal():
    updateModel(parseCalBoardData, user_email=current_user.email)
    calBoards = CalBoard.query.order_by(CalBoard.name).all()
    calbDatas = []
    for calb in calBoards:
        calbData = {
            'name': calb.name,
            'dsp1_idle': calb.dsp1_isIdle(),
            'dsp2_idle': calb.dsp2_isIdle(),
            'fpga_extra': calb.fpga_extra
        }
        calbDatas.append(calbData)
    # return jsonify(calbDatas)
    return calbDatas
Пример #5
0
def storeBoard_deal():
    # 首先与主控板通信更新 StoreBoard 模型中的数据
    updateModel(parseStoreBoardData, user_email=current_user.email)
    # 查询数据库获取当前的存储版数据
    storeBoards = StoreBoard.query.order_by(StoreBoard.name).all()
    # 解析存储版数据并生成对应的 json 格式
    strbDatas = []
    center_X = 14
    for strb in storeBoards:
        strbData = {
            'name':
            '',
            'type':
            'pie',
            'radius':
            '24%',
            'center': [str(center_X) + '%', '57%'],
            'data': [
                {
                    'value': round(strb.used / 1024.0, 1),
                    'name': '已用'
                },
                {
                    'value': round(strb.left / 1024.0, 1),
                    'name': '未用'
                },
            ],
            'label': {
                'normal': {
                    'position': 'inner',
                    'formatter': '{c}T',
                    'textStyle': {
                        'color': '#ffffff',
                        'fontSize': 14
                    }
                }
            },
            'itemStyle': {
                'emphasis': {
                    'shadowBlur': 10,
                    'shadowOffsetX': 0,
                    'shadowColor': 'rgba(0, 0, 0, 0.5)'
                }
            },
        }
        strbDatas.append(strbData)
        center_X += 24
    # return jsonify(strbDatas)
    return strbDatas
Пример #6
0
def controlBoard_deal_2():
    # 首先与主控板通信更新 ControlBoard 模型中数据
    updateModel(parseControlBoardData, user_email=current_user.email)
    # 查询数据库获取当前的主控板数据
    # 按照时间戳降序方式将控制板数据排序,也就是说第一位数据时间最新
    controlBoard = ControlBoard.query.order_by(
        ControlBoard.timestamp.desc()).first()
    # 解析主控板数据并生成对应的 json 格式
    ctrlbDatas = {
        'cpu_user': controlBoard.cpu_user_percent,
        'cpu_system': controlBoard.cpu_sys_percent,
        'cpu_idle': controlBoard.cpu_idle_percent,
        # 按 '09:32:35' 格式格式化时间戳
        'category': controlBoard.timestamp.strftime('%H:%M:%S')
    }
    # return jsonify(ctrlbDatas)
    return ctrlbDatas
Пример #7
0
def index():
    if not current_user.is_authenticated:
        return redirect(url_for('auth.login'))
    else:
        flash(u'欢迎使用!')
        updateModel(parseCalBoardData, user_email=current_user.email)
        updateModel(parseStoreBoardData, user_email=current_user.email)
        updateModel(parseControlBoardData, user_email=current_user.email)
        calBoards = CalBoard.query.order_by(CalBoard.name).all()
        storeBoards = StoreBoard.query.order_by(StoreBoard.name).all()
        controlBoards = ControlBoard.query.order_by(
            ControlBoard.timestamp).all()
        return render_template(
            'index.html',
            calBoards=calBoards,
            storeBoards=storeBoards,
            controlBoardsSplit=parseControlBoards(controlBoards))
Пример #8
0
def issueTask_deal():
    # 获取数据文件的存储位置时,需要使用当前应用实例 app 来创建
    # 应用上下文,所以需要获取 current_app 代理对象背后潜在的被代理的当前应用实例 app,
    # 可以用 _get_current_object() 方法获取 app。
    app = current_app._get_current_object()

    taskIds = request.values.get('taskIds')
    taskIds = taskIds.strip('[]')
    taskIds = taskIds.split(',')
    print(taskIds)
    issue_task_queue = []
    for taskId in taskIds:
        taskId = int(taskId)
        # 从 Task 模型中找到由 taskId 指定的任务
        task = Task.query.filter_by(task_id=taskId).first()
        if task is not None:
            # 如果当前任务的状态是可以执行 EXECUTABLE,表示确实需要执行,
            # 这里加上这个判断是由于先按下单个执行按钮再按下全部执行按钮之后,
            # 之前当个执行按钮已经下发执行的那个任务会再次被下发执行,而此时
            # 该任务的状态已经是正在执行而不是可执行了,所以通过判断这个任务状态,
            # 可以将这个已经提交的任务不再提交
            if task.task_status == Task_Status.EXECUTABLE:
                print('task_id: %s' % task.task_id)
                # 将其状态标记为正在执行
                task.task_status = Task_Status.RUNNING

                # 将每一个需要下发的任务解析并添加到下发任务队列
                # 获取任务数据文件的存储位置
                taskDataPath = ''
                if (task.data_file_name != ''):
                    taskDataPath = os.path.join(
                        app.config['UPLOADED_TASKDATAS_DEST'],
                        task.data_file_name)
                    print('taskDataPath: %s' % taskDataPath)
                    taskSize = os.path.getsize(
                        taskDataPath) >> 10  # 大小以 kb 为单位
                else:
                    taskSize = 0
                issue_task = {
                    'taskId': chr(task.task_id),
                    'taskSize': taskSize,
                    'taskDataPath': taskDataPath,
                }
                issue_task_queue.append(issue_task)

                try:
                    db.session.add(task)
                    db.session.commit()
                except Exception as err:
                    print('Modify task: %s status occurs error: %s' %
                          (taskId, err))
                    db.session.rollback()
                    return jsonify({'status': -1})
    print('issueTask_deal: %s' % issue_task_queue)
    # 调用处理函数改变 socket_client 中 cmd_search 中 parseIssueTaskData 对应的数据
    parseIssueTaskQueue(issue_task_queue)
    # 通过 socket 与主控板通信,进行任务下发及结果接收
    updateModel(parseIssueTaskData, user_email=current_user.email)

    alive_tasks_queue, executable_len, running_len = query_construct_aliveTasks(
        current_user)
    alive_tasks_info = {
        'alive_tasks_queue': alive_tasks_queue,
        'executable_len': executable_len,
        'running_len': running_len,
        'status': 0
    }

    return jsonify(alive_tasks_info)