Commit aa7af10d authored by Kento HASEGAWA's avatar Kento HASEGAWA
Browse files

Update the problem status view

parent 52f168a6
Loading
Loading
Loading
Loading
+6 −3
Changes for main.py: 6 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -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)
+13 −4
Changes for roles/host.py: 13 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -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']
+46 −25
Changes for static/js/adc2019.js: 46 added lines, 25 removed lines.
Original line number Diff line number Diff line
@@ -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');
            })
            
            _this.container.find('.stop-button').click(()=>{
                _this.stop_solver();
            });
            // 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.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');
        });
    }
    
+7 −0
Changes for templates/part_problem_status.html: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -47,6 +47,13 @@
        </div>
    </div>

    <div id="request-list-container">
        <h4>リクエスト一覧</h4>
        <div id="request-table-container">

        </div>
    </div>
    
    <div id='solution-list-container'>
        <h4>処理結果一覧</h4>
        <table class="table table-bordered table-striped">
+9 −5
Changes for templates/part_request_status.html: 9 added lines, 5 removed lines.
Original line number Diff line number Diff line
<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> -->
        <tbody>
            {% for k, v in r['worker_status'].items() %}
            <tr>
                <td>{{k}}</td>
                <td>{{v}}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>
    {% endfor %}
</div>