Commit e3011371 authored by Kento HASEGAWA's avatar Kento HASEGAWA

Add adcclilib.py module to access the adc server (#14)

parent f2bdebe1
#!/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()
p = subprocess.run(exec_cmd, stdout=subprocess.PIPE, shell=True)
res = p.stdout.decode().strip()
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")
for v in question_list:
out_file_path = "{}/NL_Q{:02d}.txt".format(outpath, int(v))
cmd = "--output {} get-q {}".format(out_file_path, v.rstrip())
_exec_adccli(cmd)
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
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../../solver')
import BoardStr
import adcclilib
app = Flask(__name__)
app_args = {}
questions = None
......@@ -440,6 +442,37 @@ def get_clients():
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("/board-viewer", methods=["GET"])
def show_board_viewer():
......@@ -524,6 +557,7 @@ if __name__ == "__main__":
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("-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("-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.")
......
......@@ -145,6 +145,43 @@ $(function(){
}).done(function(d){
$("#client-control-pane").html("");
$("#client-control-pane").html(d);
$("#adccli-login-button").click(function(){
var $obj = $(this);
$obj.prop("disabled", "disabled");
$.ajax({
type: "GET",
url: "/adccli-login",
dataType: "json",
}).done((data)=>{
$obj.prop("disabled", false);
alert(data['message']);
});
});
$("#adccli-logout-button").click(function(){
var $obj = $(this);
$obj.prop("disabled", "disabled");
$.ajax({
type: "GET",
url: "/adccli-logout",
dataType: "json",
}).done((data)=>{
$obj.prop("disabled", false);
alert(data['message']);
});
});
$.ajax({
type: "GET",
url: "/adccli-whoami",
dataType: "json",
}).done((data)=>{
if(data['status'])
$("#adccli-status").text("ログイン中");
else
$("#adccli-status").text("ログアウト");
});
pm.getStatus();
});
}
......
......@@ -9,6 +9,11 @@ Viewer Mode
{% endif %}
</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>
<h4>クライアント</h4>
<table class="table table-bordered" id="clients-table">
<tr>
......
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