add create batch page

This commit is contained in:
iteratorlee 2018-07-30 12:28:22 +08:00
parent 82c59a9812
commit 420d5c033e
7 changed files with 282 additions and 3 deletions

View File

@ -1,5 +1,11 @@
import time, threading
import master.monitor
from utils.log import initlogging, logger
initlogging("docklet-jobmgr")
class JobMgr(object):
# user: username
# job: a json string
# user submit a new job, add this job to queue and database
@ -18,12 +24,12 @@ class JobMgr(object):
# call get_task to get the task information
def get_job(self, user, jobid):
pass
# job: a json string
# this is a thread to process a job
def job_processor(self, job):
# according the DAG of job, add task to taskmanager
# wait for all task completed and exit
# wait for all task completed and exit
pass
# this is a thread to schedule the jobs

View File

@ -156,6 +156,9 @@
<li id="nav_History">
<a href='/history/'><i class="fa fa-history"></i> <span class="nav-label">History</span></a>
</li>
<li id="nav_Batch">
<a href='/batch_jobs/'><i class="fa fa-tasks"></i> <span class="nav-label">Batch</span></a>
</li>
{% if mysession['usergroup'] == 'root' or mysession['usergroup'] == 'admin'%}

View File

@ -0,0 +1,142 @@
{% extends 'base_AdminLTE.html' %}
{% block title %}Docklet | Create Batch Job{% endblock %}
{% block css_src %}
<!--<style>
.divcontent { overflow-y:scroll; height:200px;}
</style>-->
<link href="//cdn.bootcss.com/datatables/1.10.11/css/dataTables.bootstrap.min.css" rel="stylesheet">
<link href="//cdn.bootcss.com/datatables/1.10.11/css/jquery.dataTables_themeroller.css" rel="stylesheet">
<link href="/static/dist/css/modalconfig.css" rel="stylesheet">
{% endblock %}
{% block panel_title %}Batch Job Info{% endblock %}
{% block panel_list %}
<ol class="breadcrumb">
<li>
<a href="/dashboard/"><i class="fa fa-dashboard"></i>Home</a>
</li>
</ol>
{% endblock %}
<div>
{% block content %}
<div class="row">
<div class="col-lg-12">
<div class="box box-info">
<div class="box-header with-border">
<h3 class="box-title">Batch Job Create
<button type="button" id="add_task" class="btn btn-box-tool" title="add a task"><i class="fa fa-plus"></i>
</button>
</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<div class="box-body">
<form id="form" class="form-horizontal" action="/batch_job/add/" method="POST">
<div class="form-group"><label class="col-sm-2 control-label">Job Name</label>
<div class="col-sm-10"><input type="text" class="form-control" name="job_name" id="job_name"></div>
</div>
<div class="hr-line-dashed"></div>
<br/>
<div class="form-group"><label class="col-sm-2 control-label">Priority</label>
<div class="col-sm-10"><select id="priority_selector" class="form-control">
{% for priority in range(10) %}
<option value="{{priority}}">{{priority}}</option>
{% endfor %}
</select></div>
</div>
<br/>
<div class="hr-line-dashed"></div>
<div class="panel-group" id="accordion">
<!-- Tasks -->
</div>
<br/>
<div class="hr-line-dashed"></div>
<div class="row">
<div class="form-group">
<div class="col-sm-4 col-sm-offset-2">
<button class="btn btn-primary" type="submit">Create</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block script_src %}
<!-- Custom and plugin javascript -->
<script src="/static/js/inspinia.js"></script>
<script src="http://cdn.bootcss.com/pace/1.0.2/pace.min.js"></script>
<!-- Steps -->
<script src="http://cdn.bootcss.com/jquery-steps/1.1.0/jquery.steps.min.js"></script>
<!-- Jquery Validate -->
<script src="http://cdn.bootcss.com/jquery-validate/1.15.0/jquery.validate.min.js"></script>
<script src="http://cdn.bootcss.com/datatables/1.10.11/js/jquery.dataTables.js"></script>
<script src="http://cdn.bootcss.com/datatables/1.10.11/js/dataTables.bootstrap.js"></script>
<script src="http://cdn.bootcss.com/datatables-tabletools/2.1.5/js/TableTools.min.js"></script>
<script type="text/javascript">
function removeTask(obj) {
$("#task_pannel_"+obj.id).remove();
}
var task_number = 0;
$("#add_task").click(function() {
task_number += 1;
var task_html = '';
task_html +=
'<div class="panel panel-default" id="task_pannel_' + task_number + '">'
+'<div class="panel-heading">'
+'<h4 class="panel-title">'
+'<a data-toggle="collapse" data-panel="#accordion" href="#collapse' + task_number + '">'
+'Task #' + task_number
+'</a><div class="box-tools pull-right"><button type="button" id="' + task_number + '" onclick="removeTask(this)" class="btn btn-box-tool"><i class="fa fa-times"></i></button></div>'
+'</h4></div>'
+'<div id="collapse' + task_number + '" class="panel-collapse collapse">'
+'<div class="panel-body">'
+'<div class="form-group">'
+'<label class="col-sm-2 control-label">CPU</label>'
+'<div class="col-sm-3"><input type="number" class="form-control" name="cpuSetting" id="cpuSetting_' + task_number + '" value = 1 />'
+'</div>'
+'<label class="col-sm-2 control-label">Memory</label>'
+'<div class="col-sm-3"><input type="number" class="form-control" name="memorySetting" id="memorySetting_' + task_number + '" value = 1024 />'
+'</div>MB</div>'
+'<div class="form-group">'
+'<label class="col-sm-2 control-label">GPU</label>'
+'<div class="col-sm-3"><input type="number" class="form-control" name="gpuSetting" id="gpuSetting_' + task_number + '" value= 0 />'
+'</div>'
+'<label class="col-sm-2 control-label">Disk</label>'
+'<div class="col-sm-3"><input type="number" class="form-control" name="diskSetting" id="diskSetting_' + task_number + '" value= 1024 />'
+'</div>MB</div>'
+'<div class="form-group">'
+'<label class="col-sm-2 control-label">Instance Count</label>'
+'<div class="col-sm-3"><input type="number" class="form-control" name="instCount" id="instCount_' + task_number + '" value= 1 />'
+'</div>'
+'<label class="col-sm-2 control-label">Max Retry Count</label>'
+'<div class="col-sm-3"><input type="number" class="form-control" name="retryCount" id="retryCount_' + task_number + '" value= 1 />'
+'</div></div>'
+'</div></div></div>'
$(task_html).appendTo("#accordion");
});
</script>
{% endblock %}

View File

@ -0,0 +1,63 @@
{% extends "base_AdminLTE.html"%}
{% block title %}Docklet | Batch Job{% endblock %}
{% block panel_title %}Batch Job{% endblock %}
{% block panel_list %}
<ol class="breadcrumb">
<li>
<a href="/dashboard/"><i class="fa fa-dashboard"></i>Home</a>
</li>
<li class="active">
<strong>Batch Job</strong>
</li>
</ol>
{% endblock %}
{% block content %}
<div class="row">
<div class="col-lg-12">
<div class="box box-info">
<div class="box-header with-border">
<h3 class="box-title">Batch Job List</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<div class="box-body">
<p>
<a href="/batch_job/create/"><button type="button" class="btn btn-primary btn-sm"><i class="fa fa-plus"></i> Create Batch Job</button></a>
</p>
</div>
<table class="table table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Status</th>
<th>Tasks</th>
<th>Operations</th>
<th>Running Time</th>
<tr>
<thead>
</table>
</div>
</div>
</div>
{% endblock %}
{% block script_src %}
<script type="text/javascript">
function sendAdd(){
document.getElementById("addForm").submit();
}
function sendDel(){
document.getElementById("delForm").submit();
}
</script>
{% endblock %}

View File

View File

@ -39,6 +39,7 @@ from webViews.cloud import *
from webViews.authenticate.auth import login_required, administration_required,activated_required
from webViews.authenticate.register import registerView
from webViews.authenticate.login import loginView, logoutView
from webViews.batch import *
import webViews.dockletrequest
from webViews import cookie_tool
import traceback
@ -119,6 +120,27 @@ def redirect_dochome():
def config():
return configView.as_view()
@app.route("/batch_jobs/", methods=['GET'])
@login_required
def batch_job():
return batchJobListView().as_view()
@app.route("/batch_job/create/", methods=['GET'])
@login_required
def create_batch_job():
return createBatchJobView().as_view()
@app.route("/batch_job/add/", methods=['POST'])
@login_required
def add_batch_job():
#TODO get form parameters of a job description
addBatchJobView.job_name = request.form["job_name"]
return addBatchJobView().as_view()
@app.route("/batch_job/state/", methods=['GET'])
@login_required
def state_batch_job():
return stateBatchJobView().as_view()
@app.route("/workspace/create/", methods=['GET'])
@activated_required

43
web/webViews/batch.py Normal file
View File

@ -0,0 +1,43 @@
from flask import session, redirect, request
from webViews.view import normalView
from webViews.checkname import checkname
class batchJobListView(normalView):
template_path = "batch/batch_list.html"
@classmethod
def get(self):
if True:
return self.render(self.template_path)
else:
return self.error()
class createBatchJobView(normalView):
template_path = "batch/batch_create.html"
@classmethod
def get(self):
if True:
return self.render(self.template_path)
else:
return self.error()
class stateBatchJobView(normalView):
template_path = "batch/batch_state.html"
@classmethod
def get(self):
if True:
return self.render(self.template_path)
else:
return self.error()
class addBatchJobView(normalView):
template_path = "batch/batch_list.html"
@classmethod
def post(self):
if True:
return self.render(self.template_path)
else:
return self.error()