Commit aa7af10d authored by Kento HASEGAWA's avatar Kento HASEGAWA

Update the problem status view

parent 52f168a6
......@@ -44,10 +44,13 @@ def webui_part_solver_status():
else:
return abort(404)
@webui.route('/part/request/<request_id>')
def webui_part_request_status(request_id=None):
# @webui.route('/part/request/<request_id>')
@webui.route('/part/request/<problem_name>')
# def webui_part_request_status(request_id=None):
def webui_part_request_status(problem_name=None):
if (adc2019system.role is not None) and (adc2019system.role.type == 'host'):
request_status = adc2019system.role.get_request_status(float(request_id))
# request_status = adc2019system.role.get_request_status(float(request_id))
request_status = adc2019system.role.get_request_by_problem(problem_name)
return render_template('part_request_status.html', status=request_status)
else:
return abort(404)
......
......@@ -17,7 +17,7 @@ class Host(object):
self.problems = dict()
self.worker_manager = None
self.request = dict()
self.processing_request = None
self.problem_to_request = dict()
self._load_problems(config['problem_path'])
self._setup_workers()
......@@ -37,6 +37,7 @@ class Host(object):
_key = problem.name
self.problems[_key] = problem
self.problem_to_request[_key] = list()
def _setup_workers(self):
......@@ -56,6 +57,7 @@ class Host(object):
request = Request(self.worker_manager, problem.get_dict(), solvers=solvers)
request_id = request.get_id()
self.request[request_id] = request
self.problem_to_request[problem_key].append(request_id)
request.broadcast()
return {
......@@ -130,6 +132,16 @@ class Host(object):
else:
return {'status': 'unknown request'}
def get_request_by_problem(self, problem_key):
if problem_key in self.problem_to_request:
request_statuses = list()
for rid in self.problem_to_request[problem_key]:
r = self.request[rid]
request_statuses.append(r.get_status())
return reversed(request_statuses)
else:
return None
def get_viewer_data(self, problem_key, solution_id):
problem = self.get_problem(problem_key)
if problem is None:
......@@ -361,10 +373,8 @@ class Request(object):
self.response[worker] = data
def get_status(self):
# all_workers = self.worker_manager.get_workers().keys()
worker_count = 0
response_count = 0
# for v in all_workers:
for v in self.solvers:
worker_count += 1
if v in self.response:
......@@ -390,7 +400,6 @@ class Request(object):
progress = min(100, max(progress_problem, progress_time))
worker_status = dict()
# for v in all_workers:
for v in self.solvers:
if v in self.response:
worker_status[v] = self.response[v]['status']
......
......@@ -26,6 +26,8 @@ class StatusView {
_this.container.empty();
_this.container.html(d);
clearInterval(_this.request_refresh_timer);
_this.container.find('.start-button').click(()=>{
_this.start_solver();
});
......@@ -95,25 +97,26 @@ class StatusView {
contentType: 'application/json'
}).done((d) => {
var request_id = d['request_id'];
var timeout = d['timeout'];
_this.container.find('#solver-processing-modal').modal({
backdrop: 'static',
keyboard: false,
show: true
});
_this.container.find('#solver-processing-modal').on('hidden.bs.modal', function(e){
clearInterval(_this.request_refresh_timer);
_this.show_problem();
_this.fire('refresh');
})
// var timeout = d['timeout'];
// _this.container.find('#solver-processing-modal').modal({
// backdrop: 'static',
// keyboard: false,
// show: true
// });
// _this.container.find('#solver-processing-modal').on('hidden.bs.modal', function(e){
// clearInterval(_this.request_refresh_timer);
// _this.show_problem();
// _this.fire('refresh');
// })
_this.container.find('.stop-button').click(()=>{
_this.stop_solver();
});
// _this.container.find('.stop-button').click(()=>{
// _this.stop_solver();
// });
_this.request_refresh_timer = setInterval((function _t(){
_this.get_request_status(request_id);
// _this.get_request_status(request_id);
_this.get_request_status();
return _t;
}()), 1000);
});
......@@ -171,20 +174,38 @@ class StatusView {
});
}
get_request_status(request_id){
// get_request_status(request_id){
// var _this = this;
// $.ajax({
// type: 'GET',
// dataType: 'html',
// url: '/part/request/' + request_id
// }).done((d) => {
// _this.container.find('#request-status-container').empty();
// _this.container.find('#request-status-container').html(d);
// status = $(d).find('#request-status-value').text();
// if(status == 'done'){
// clearInterval(_this.request_refresh_timer);
// }
// });
// }
get_request_status(){
var _this = this;
$.ajax({
type: 'GET',
dataType: 'html',
url: '/part/request/' + request_id
url: '/part/request/' + _this.problem_key
}).done((d) => {
_this.container.find('#request-status-container').empty();
_this.container.find('#request-status-container').html(d);
_this.container.find('#request-table-container').empty();
_this.container.find('#request-table-container').html(d);
status = $(d).find('#request-status-value').text();
if(status == 'done'){
clearInterval(_this.request_refresh_timer);
}
// status = $(d).find('#request-status-value').text();
// if(status == 'done'){
// clearInterval(_this.request_refresh_timer);
// }
// _this.fire('refresh');
});
}
......
......@@ -46,6 +46,13 @@
</table>
</div>
</div>
<div id="request-list-container">
<h4>リクエスト一覧</h4>
<div id="request-table-container">
</div>
</div>
<div id='solution-list-container'>
<h4>処理結果一覧</h4>
......
<div>
<p>処理結果:<span id='request-status-value'>{{status.status}}</span></p>
<table class="table table-bordered">
<tr>
{% for r in status %}
<p>処理結果:<span id='request-status-value'>{{r.status}}</span></p>
<table class="table table-bordered table-sm">
<!-- <tr>
<th>Worker (Solver)</th>
<th>Status</th>
</tr>
{% for k, v in status['worker_status'].items() %}
<tr>
<td>{{k}}</td>
<td>{{v}}</td>
</tr>
{% endfor %}
</tr> -->
<tbody>
{% for k, v in r['worker_status'].items() %}
<tr>
<td>{{k}}</td>
<td>{{v}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
</div>
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