[Title] update job status in Jobs page.
authordibs <dibs@samsung.com>
Tue, 15 Jan 2013 07:53:01 +0000 (16:53 +0900)
committerdibs <dibs@samsung.com>
Tue, 15 Jan 2013 07:53:01 +0000 (16:53 +0900)
dibs-web/app/controllers/jobs_controller.rb
dibs-web/app/controllers/utils.rb
dibs-web/config/routes.rb
dibs-web/public/javascripts/dibs-api.js
dibs-web/public/javascripts/jobs.js

index 41eb70df2dba5197c35d90bb330fdf26d2bca0f6..ea5cc82e2514bcec385dd9cb0ab7c1aa060ee247 100644 (file)
@@ -79,8 +79,30 @@ class JobsController < ApplicationController
                listQuery("UPDATE", params[:distribution], params[:status], params[:lastID], "", params[:date])
        end
 
-       def queryJobInfo
-               job_id = params[:jobID]
+       def jobInfo
+               job_id = params[:id]
+
+               job = get_job_info(job_id)
+
+               #generate to XML
+               doc = Builder::XmlMarkup.new( :target => out_string = "", :indent => 2 )
+               doc.Response {
+                       generate_xml_header(doc)
+                       doc.Data {
+                               doc.Id(job.job_id)
+                               doc.Distribution(job.distribution_name)
+                               doc.ProjectName(job.project_name)
+                               doc.JobType(job.job_type)
+                               doc.Os(job.supported_os_name)
+                               doc.Status(job.status)
+                               doc.UserName(job.user_name)
+                               doc.StartTime(job.start_time)
+                               doc.EndTime(job.end_time)
+                       }
+               }
+
+               render :text => out_string, :content_type => "text/xml"
+               return
        end
 
 
index 0f26bb1b647b307308586819bbacd10f993b3782..b0e5f4b31193e1182bc940041b266382a4337fdd 100644 (file)
@@ -122,6 +122,7 @@ puts "[[[#{cmd}]]]"
   
     # get result
     IO.popen("#{cmd}")
+    #system "#{cmd}"
 
        return true
   end
index 3f61be5aa830123f149f29319d4b499ff7769890..a4e0f36a014f79ef8b316251b5e909b4ed6d7ef6 100644 (file)
@@ -64,6 +64,7 @@ Dibs::Application.routes.draw do
     get "jobs/updateList/project/:project/:distribution/:status/:lastID" => "jobs#updateListSearchProject" , :constraints => { :project => /[0-9A-Za-z\-\.]+/ }
     get "jobs/updateList/date/:date/:distribution/:status/:lastID" => "jobs#updateListSearchDate", :constraints => { :distribution => /[0-9A-Za-z\-\.\_]+/ }
 
+       match "jobs/jobInfo/:id" => "jobs#jobInfo"
        match "jobs/log/:id" => "jobs#log"
        match "jobs/log/:id/:line" => "jobs#log_more"
        match "jobs/cancel/:id" => "jobs#cancelJob"
index 5f931c4ff10ef364fc51d1b66fc4630dd19e202c..25e0fad4e7c729d52be9b0bbff7560b9707c3098 100644 (file)
@@ -90,6 +90,9 @@ function queryJobsList(url, successFunction) {
 function updateJobsList(url, successFunction) {
        return getInfoFromServerNoPreProcess(url, successFunction);
 }
+function updateJobsListStatus(url, successFunction) {
+       return getInfoFromServerNoPreProcess(url, successFunction);
+}
 function queryJobsLog(job_id, next_line, successFunction) {
        var url = "jobs/log/"+ job_id + "/" + next_line;
        getInfoFromServerNoPreProcess(url, successFunction);
index 3cc161f3ba0f706c751015be28fc974de0226d76..8406cff261db6b4e8a5d3fe13eb2e641eb623541 100644 (file)
@@ -385,7 +385,6 @@ function updateJobList(condition, distribution, selectedStatus) {
 
 function queryUpdateJobList(requestUrl, condition, queryDistribution, selectedStatus, latest_job_id) {
        var url = requestUrl+"/"+condition+"/"+queryDistribution+"/"+selectedStatus+"/"+latest_job_id;
-       console.log("update url: "+url);
        return updateJobsList(url, function(xml) {
                var firstLi= $("#jobList li").first();
 
@@ -399,6 +398,68 @@ function queryUpdateJobList(requestUrl, condition, queryDistribution, selectedSt
        });
 }
 
+function updateJobListStatus(jobId, id) {
+       update_ajax = queryUpdateJobListStatus(jobId, id);
+       var idx = addRequestList(update_ajax);
+
+       update_ajax.success(function(xml) {
+               var jobStatus = $(xml).find("Data").find("Status").text();
+               var font_color = "black";
+               var update = false;
+
+               switch(jobStatus)
+               {
+                       case "ERROR" :
+                       case "CANCELED" :
+                               font_color = "red";
+                               update = false;
+                               break;
+                       case "INITIALIZING" :
+                       case "JUST_CREATED" :
+                       case "PENDING" :
+                       case "WORKING" :
+                       case "REMOTE_WORKING" :
+                               font_color = "blue";
+                               update = true;
+                               break;
+                       case "WAITING" :
+                               font_color = "green";
+                               update = true;
+                               break;
+                       case "FINISHED" :
+                               font_color = "black";
+                               update = false;
+                               break;
+                       default:
+                               console.error(job_status+" status is not define.");
+                               font_color = "black";
+                               update = false;
+                               break;
+               }
+               html = '<strong><font color="'+font_color+'">'+jobStatus+'</strong>';
+               $("#"+id).html(html);
+
+               setTimeout(function(){
+                       var jobStatus = $(xml).find("Data").find("Status").text();
+                       console.log(jobStatus);
+                       if(update && isPolling(idx) && $.mobile.activePage.attr('id') == "jobs" && idx < 900) {
+                               console.log("Update request.");
+                               request_list[idx].polling = false;
+                               updateJobListStatus(jobId, id);
+                       }
+                       else {
+                               console.log("Stop update.");
+                       }
+               }, 2000);
+       });
+}
+
+function queryUpdateJobListStatus(jobId, id) {
+       var url = "jobs/jobInfo/"+jobId;
+       console.log("update url: "+url);
+       return updateJobsListStatus(url, function(xml) { });
+}
+
 function clearSuggestJobSearchList() {
        $("#jobSearchList").empty();
 }
@@ -500,6 +561,38 @@ function generateHtmlJobList(xml) {
        var startTime = xml.find("StartTime").text();
        var endTime = xml.find("EndTime").text();
        var li = "";
+       var font_color = "black";
+       var update = false;
+
+       switch(jobStatus)
+       {
+               case "ERROR" :
+               case "CANCELED" :
+                       font_color = "red";
+                       update = false;
+                       break;
+               case "INITIALIZING" :
+               case "JUST_CREATED" :
+               case "PENDING" :
+               case "WORKING" :
+               case "REMOTE_WORKING" :
+                       font_color = "blue";
+                       update = true;
+                       break;
+               case "WAITING" :
+                       font_color = "green";
+                       update = true;
+                       break;
+               case "FINISHED" :
+                       font_color = "black";
+                       update = false;
+                       break;
+               default:
+                       console.error(job_status+" status is not define.");
+                       font_color = "black";
+                       update = false;
+                       break;
+       }
 
        if(jobAttribute == "SINGLE")
        {
@@ -515,20 +608,8 @@ function generateHtmlJobList(xml) {
                        if(queryDistribution == "ALL") {
                         li = li + '<p>DISTRIBUTION: <strong>' +distribution+ '</strong></p>';
                        }
-
-                       if(jobStatus == "ERROR" || jobStatus == "CANCELED") {
-                        li = li + '<p class="ui-li-aside"><strong><font color="red">' +jobStatus+ '</strong></p>'
-                       } else if(jobStatus == "JUST_CREATED" || jobStatus == "PENDING"
-                                       || jobStatus == "WORKING" || jobStatus == "REMOTE_WORKING") {
-                        li = li + '<p class="ui-li-aside"><strong><font color="blue">' +jobStatus+ '</strong></p>'
-                       } else if(jobStatus == "WAITING") {
-                        li = li + '<p class="ui-li-aside"><strong><font color="green">' +jobStatus+ '</strong></p>'
-                       } else if(jobStatus == "FINISHED") {
-                        li = li + '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
-                       } else {
-                        li = li + '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
-                       }
-
+                        
+                       li = li + '<p id="jobs-li-'+id+'" class="ui-li-aside"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
                        li = li + '</a></li>';
        }
        else if(jobAttribute == "MULTI")
@@ -541,19 +622,7 @@ function generateHtmlJobList(xml) {
                         li = li + '<p>DISTRIBUTION: <strong>' +distribution+ '</strong></p>';
                        }
                        
-                       if(jobStatus.toUpperCase() == "ERROR" || jobStatus.toUpperCase() == "CANCELED") {
-                        li = li + '<p class="ui-li-aside"><strong><font color="red">' +jobStatus+ '</strong></p>'
-                       } else if(jobStatus == "JUST_CREATED" || jobStatus == "PENDING"
-                                       || jobStatus == "WORKING" || jobStatus == "REMOTE_WORKING") {
-                        li = li + '<p class="ui-li-aside"><strong><font color="blue">' +jobStatus+ '</strong></p>'
-                       } else if(jobStatus == "WAITING") {
-                        li = li + '<p class="ui-li-aside"><strong><font color="green">' +jobStatus+ '</strong></p>'
-                       } else if(jobStatus == "FINISHED") {
-                        li = li + '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
-                       } else {
-                        li = li + '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
-                       }
-
+                       li = li + '<p id="jobs-li-'+id+'" class="ui-li-aside"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
                        li = li + '</a></li>';
        }
        else if(jobAttribute == "CHILD")
@@ -565,21 +634,14 @@ function generateHtmlJobList(xml) {
                        + '<p>OS : <strong>' +os+ '</strong></p>'
                        + '<p>TIME: <strong>' +startTime+ ' ~ '+endTime+ '</strong></p>';
                        
-                       if(jobStatus.toUpperCase() == "ERROR" || jobStatus.toUpperCase() == "CANCELED") {
-                        li = li + '<p class="ui-li-aside"><strong><font color="red">' +jobStatus+ '</strong></p>'
-                       } else if(jobStatus == "JUST_CREATED" || jobStatus == "PENDING"
-                                       || jobStatus == "WORKING" || jobStatus == "REMOTE_WORKING") {
-                        li = li + '<p class="ui-li-aside"><strong><font color="blue">' +jobStatus+ '</strong></p>'
-                       } else if(jobStatus == "WAITING") {
-                        li = li + '<p class="ui-li-aside"><strong><font color="green">' +jobStatus+ '</strong></p>'
-                       } else if(jobStatus == "FINISHED") {
-                        li = li + '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
-                       } else {
-                        li = li + '<p class="ui-li-aside"><strong>' +jobStatus+ '</strong></p>'
-                       }
-
+                       li = li + '<p id="jobs-li-'+id+'" class="ui-li-aside"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
                        li = li + '</a></li>';
        }
 
+       if(update) {
+               updateJobListStatus(id, "jobs-li-"+id);
+       }
+
        return li;
 }
+