diff --git a/main.py b/main.py index 23ba17dce08766e3e6ceaa0606ef5bee18f971d2..2564e88b7a418e0c2c4dd8b2e61c41c36cfcb243 100644 --- a/main.py +++ b/main.py @@ -44,10 +44,13 @@ def webui_part_solver_status(): else: return abort(404) -@webui.route('/part/request/') -def webui_part_request_status(request_id=None): +# @webui.route('/part/request/') +@webui.route('/part/request/') +# 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) diff --git a/roles/host.py b/roles/host.py index 218b39bc1c4e5115ba92dfb64fc92a1d5650782b..82a3b4d3a0e7546dd7b1f8053588543842bfb185 100644 --- a/roles/host.py +++ b/roles/host.py @@ -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'] diff --git a/static/js/adc2019.js b/static/js/adc2019.js index c0b89163606acea0eae2fd79cf9ebe9de2538e73..fb9877af93c5c93d90fb8ba005d30846d67497c8 100644 --- a/static/js/adc2019.js +++ b/static/js/adc2019.js @@ -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'); }); } diff --git a/templates/part_problem_status.html b/templates/part_problem_status.html index 14d83142f34588a252b3ac80ba3d8d0dffadbdf6..30b38ce1456b8eef5f23a81002cc6b4d5a5e05ca 100644 --- a/templates/part_problem_status.html +++ b/templates/part_problem_status.html @@ -46,6 +46,13 @@ + +
+

リクエスト一覧

+
+ +
+

処理結果一覧

diff --git a/templates/part_request_status.html b/templates/part_request_status.html index 2f1bbf973a7b0a6ab26f40faf5ad71d8855b832e..b0dea2812a631496b9e96b11fd03774e4c6ffa1d 100644 --- a/templates/part_request_status.html +++ b/templates/part_request_status.html @@ -1,15 +1,19 @@
-

処理結果:{{status.status}}

- - + {% for r in status %} +

処理結果:{{r.status}}

+
+ + + {% for k, v in r['worker_status'].items() %} + + + + + {% endfor %} +
{{k}}{{v}}
+ {% endfor %}