Commit 3531a1ec authored by Kento HASEGAWA's avatar Kento HASEGAWA

Merge branch 'comm' into 'master'

Merge comm

See merge request adc2018/adc2018-system!13
parents f2bdebe1 63c7cf71
#!/usr/bin/env python3
import subprocess
PYTHON2 = "/usr/bin/python"
ADCCLI = "/home/pi/adc2018/conmgr/client/adccli"
def _exec_adccli(cmd):
exec_cmd = "{} {} {}".format(PYTHON2, ADCCLI, cmd).strip()
print("ADCCLI: {}".format(exec_cmd))
p = subprocess.run(exec_cmd, stdout=subprocess.PIPE, shell=True)
res = p.stdout.decode().strip()
print(res)
return res
def login(url, username, password):
cmd = "--URL='{}' --username='{}' --password='{}' login".format(url, username, password)
return _exec_adccli(cmd)
def logout():
cmd = "logout"
return _exec_adccli(cmd)
def whoami():
cmd = "whoami"
return _exec_adccli(cmd)
def put_message(message):
cmd = "put-user-alive '{}'"
return _exec_adccli(cmd)
def post_user_q(qnum, filepath):
cmd = "post-user-q {} {}".format(qnum, filepath)
return _exec_adccli(cmd)
def get_q_all(outpath):
cmd = "get-q"
question_list = _exec_adccli(cmd).split("\n")
print("--- ADCCLI questions ---")
print(question_list)
for v in question_list:
if v.startswith("Q"):
qnumber = int(v.replace("Q", ""))
out_file_path = "{}/NL_Q{:02d}.txt".format(outpath, qnumber)
cmd = "--output {} get-q {}".format(out_file_path, qnumber)
r = _exec_adccli(cmd)
return question_list
def put_a(qnum, filepath):
cmd = "put-a {} {}".format(qnum, filepath)
return _exec_adccli(cmd)
def put_a_info(qnum, cpu, mem, misc):
cmd = "put-a-info {} {} {} '{}'".format(qnum, cpu, mem, misc)
return _exec_adccli(cmd)
...@@ -22,6 +22,8 @@ from queue import Queue ...@@ -22,6 +22,8 @@ from queue import Queue
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../../solver') sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../../solver')
import BoardStr import BoardStr
import adcclilib
app = Flask(__name__) app = Flask(__name__)
app_args = {} app_args = {}
questions = None questions = None
...@@ -440,6 +442,76 @@ def get_clients(): ...@@ -440,6 +442,76 @@ def get_clients():
return json.dumps(res) return json.dumps(res)
@app.route("/adccli-login")
def adccli_login():
global app_args
with open(app_args['adccli'], 'r') as fp:
d = json.load(fp)
r = adcclilib.login(d['url'], d['username'], d['password'])
res = {'message': r}
return json.dumps(res)
@app.route("/adccli-logout")
def adccli_logout():
r = adcclilib.logout()
res = {'message': r}
return json.dumps(res)
@app.route("/adccli-whoami")
def adccli_whoami():
global app_args
with open(app_args['adccli'], 'r') as fp:
d = json.load(fp)
r = adcclilib.whoami()
res = {'message': r, 'status': r == d['username']}
return json.dumps(res)
@app.route("/adccli-get-all-q")
def adccli_get_all_q():
global app_args
out_abspath = os.path.abspath(app_args['question'])
r = adcclilib.get_q_all(out_abspath)
load_questions()
res = {'message': r}
return json.dumps(res)
@app.route("/adccli-put-a", methods=["POST"])
def adccli_put_a():
global app_args
global questions
qname = request.form["qname"]
if not "best_json" in questions[qname]:
res = {'message': "Required to 'save' before submission"}
else:
out_path = "{}/{}".format(app_args['out'], "submit")
qnumber = qname.replace("NL_Q", "").replace(".txt", "")
ans_file_path = "{}/T01_A{}.txt".format(out_path, qnumber)
ans_file_abspath = os.path.abspath(ans_file_path)
r = adcclilib.put_a(qnumber, ans_file_abspath)
mes = r + "\n"
json_name = questions[qname]['best_json']
data = questions[qname]['answers'][json_name]
r = adcclilib.put_a_info(qnumber, data['cputime'], "0", "Test")
mes += r
res = {'message': mes}
return json.dumps(res)
@app.route("/board-viewer", methods=["GET"]) @app.route("/board-viewer", methods=["GET"])
def show_board_viewer(): def show_board_viewer():
...@@ -524,6 +596,7 @@ if __name__ == "__main__": ...@@ -524,6 +596,7 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser(description="PYNQ control panel.") parser = argparse.ArgumentParser(description="PYNQ control panel.")
parser.add_argument("-c", "--client", action="store", type=str, default=None, required=True, help="Client list.") parser.add_argument("-c", "--client", action="store", type=str, default=None, required=True, help="Client list.")
parser.add_argument("-a", "--adccli", action="store", type=str, default="./adccli.json", help="Path to the ADCCLI configuration json file.")
parser.add_argument("-q", "--question", action="store", type=str, default="./problems", help="Path to the question folder.") parser.add_argument("-q", "--question", action="store", type=str, default="./problems", help="Path to the question folder.")
parser.add_argument("-o", "--out", action="store", type=str, default="./answers", help="Path to the output folder.") parser.add_argument("-o", "--out", action="store", type=str, default="./answers", help="Path to the output folder.")
parser.add_argument("--debug", action="store_true", default=False, help="Debug mode.") parser.add_argument("--debug", action="store_true", default=False, help="Debug mode.")
......
...@@ -145,6 +145,40 @@ $(function(){ ...@@ -145,6 +145,40 @@ $(function(){
}).done(function(d){ }).done(function(d){
$("#client-control-pane").html(""); $("#client-control-pane").html("");
$("#client-control-pane").html(d); $("#client-control-pane").html(d);
var button_action_with_ajax = function($obj, url){
$obj.prop("disabled", "disabled");
$.ajax({
type: "GET",
url: url,
dataType: "json",
}).done((data)=>{
$obj.prop("disabled", false);
alert(data['message']);
});
};
$("#adccli-login-button").click(function(){
button_action_with_ajax($(this), "/adccli-login");
});
$("#adccli-logout-button").click(function(){
button_action_with_ajax($(this), "/adccli-logout");
});
$("#adccli-get-all-q").click(function(){
button_action_with_ajax($(this), "/adccli-get-all-q");
});
$.ajax({
type: "GET",
url: "/adccli-whoami",
dataType: "json",
}).done((data)=>{
if(data['status'])
$("#adccli-status").text("ログイン中");
else
$("#adccli-status").text("ログアウト");
});
pm.getStatus(); pm.getStatus();
}); });
} }
...@@ -177,6 +211,17 @@ $(function(){ ...@@ -177,6 +211,17 @@ $(function(){
alert(data['status']); alert(data['status']);
}); });
}); });
$("#client-control-pane").find(".submit-button").eq(0).click(function(){
var qname = $(this).data("qname");
$.ajax({
type: "POST",
dataType: "json",
url: "/adccli-put-a",
data: {qname: qname}
}).done((data) => {
alert(data['message']);
});
});
$(".answer-detail-row td").click(function(){ $(".answer-detail-row td").click(function(){
var json_name = $(this).parent("tr").data("json"); var json_name = $(this).parent("tr").data("json");
......
...@@ -9,6 +9,13 @@ Viewer Mode ...@@ -9,6 +9,13 @@ Viewer Mode
{% endif %} {% endif %}
</p> </p>
<h4>自動運営システム</h4>
<button type="button" class="btn btn-primary" id="adccli-login-button">Login</button>
<button type="button" class="btn btn-light" id="adccli-logout-button">Logout</button>
<span id="adccli-status"></span>
<br />
<button type="button" class="btn btn-info" id="adccli-get-all-q">問題DL</button>
<h4>クライアント</h4> <h4>クライアント</h4>
<table class="table table-bordered" id="clients-table"> <table class="table table-bordered" id="clients-table">
<tr> <tr>
......
...@@ -3,8 +3,11 @@ ...@@ -3,8 +3,11 @@
<h3> 【{{qname}}】</h3> <h3> 【{{qname}}】</h3>
<p> <p>
<button class="btn btn-primary btn-lg start-button" type="button" data-qname="{{qname}}">Start</button> <button class="btn btn-primary btn-lg start-button" type="button" data-qname="{{qname}}">Start</button>
<button class="btn btn-danger btn-lg stop-button" type="button" data-qname="all">Stop</button><br /> <button class="btn btn-danger btn-lg stop-button" type="button" data-qname="all">Stop</button>
</p>
<p>
<button class="btn btn-info btn-lg save-button" type="button" data-qname="{{qname}}">Save</button> <button class="btn btn-info btn-lg save-button" type="button" data-qname="{{qname}}">Save</button>
<button class="btn btn-success btn-lg submit-button" type="button" data-qname="{{qname}}">Up</button>
</p> </p>
</div> </div>
<div class="col-8"> <div class="col-8">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment