From 7e15007e16bf9b01958de4a9db6f7ef2d4061b5d Mon Sep 17 00:00:00 2001 From: dibs Date: Tue, 15 Jan 2013 16:53:01 +0900 Subject: [PATCH] [Title] update job status in Jobs page. --- dibs-web/app/controllers/jobs_controller.rb | 26 +++- dibs-web/app/controllers/utils.rb | 1 + dibs-web/config/routes.rb | 1 + dibs-web/public/javascripts/dibs-api.js | 3 + dibs-web/public/javascripts/jobs.js | 144 ++++++++++++++------ 5 files changed, 132 insertions(+), 43 deletions(-) diff --git a/dibs-web/app/controllers/jobs_controller.rb b/dibs-web/app/controllers/jobs_controller.rb index 41eb70d..ea5cc82 100644 --- a/dibs-web/app/controllers/jobs_controller.rb +++ b/dibs-web/app/controllers/jobs_controller.rb @@ -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 diff --git a/dibs-web/app/controllers/utils.rb b/dibs-web/app/controllers/utils.rb index 0f26bb1..b0e5f4b 100644 --- a/dibs-web/app/controllers/utils.rb +++ b/dibs-web/app/controllers/utils.rb @@ -122,6 +122,7 @@ puts "[[[#{cmd}]]]" # get result IO.popen("#{cmd}") + #system "#{cmd}" return true end diff --git a/dibs-web/config/routes.rb b/dibs-web/config/routes.rb index 3f61be5..a4e0f36 100644 --- a/dibs-web/config/routes.rb +++ b/dibs-web/config/routes.rb @@ -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" diff --git a/dibs-web/public/javascripts/dibs-api.js b/dibs-web/public/javascripts/dibs-api.js index 5f931c4..25e0fad 100644 --- a/dibs-web/public/javascripts/dibs-api.js +++ b/dibs-web/public/javascripts/dibs-api.js @@ -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); diff --git a/dibs-web/public/javascripts/jobs.js b/dibs-web/public/javascripts/jobs.js index 3cc161f..8406cff 100644 --- a/dibs-web/public/javascripts/jobs.js +++ b/dibs-web/public/javascripts/jobs.js @@ -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 = ''+jobStatus+''; + $("#"+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 + '

DISTRIBUTION: ' +distribution+ '

'; } - - if(jobStatus == "ERROR" || jobStatus == "CANCELED") { - li = li + '

' +jobStatus+ '

' - } else if(jobStatus == "JUST_CREATED" || jobStatus == "PENDING" - || jobStatus == "WORKING" || jobStatus == "REMOTE_WORKING") { - li = li + '

' +jobStatus+ '

' - } else if(jobStatus == "WAITING") { - li = li + '

' +jobStatus+ '

' - } else if(jobStatus == "FINISHED") { - li = li + '

' +jobStatus+ '

' - } else { - li = li + '

' +jobStatus+ '

' - } - + + li = li + '

'+jobStatus+'

'; li = li + ''; } else if(jobAttribute == "MULTI") @@ -541,19 +622,7 @@ function generateHtmlJobList(xml) { li = li + '

DISTRIBUTION: ' +distribution+ '

'; } - if(jobStatus.toUpperCase() == "ERROR" || jobStatus.toUpperCase() == "CANCELED") { - li = li + '

' +jobStatus+ '

' - } else if(jobStatus == "JUST_CREATED" || jobStatus == "PENDING" - || jobStatus == "WORKING" || jobStatus == "REMOTE_WORKING") { - li = li + '

' +jobStatus+ '

' - } else if(jobStatus == "WAITING") { - li = li + '

' +jobStatus+ '

' - } else if(jobStatus == "FINISHED") { - li = li + '

' +jobStatus+ '

' - } else { - li = li + '

' +jobStatus+ '

' - } - + li = li + '

'+jobStatus+'

'; li = li + ''; } else if(jobAttribute == "CHILD") @@ -565,21 +634,14 @@ function generateHtmlJobList(xml) { + '

OS : ' +os+ '

' + '

TIME: ' +startTime+ ' ~ '+endTime+ '

'; - if(jobStatus.toUpperCase() == "ERROR" || jobStatus.toUpperCase() == "CANCELED") { - li = li + '

' +jobStatus+ '

' - } else if(jobStatus == "JUST_CREATED" || jobStatus == "PENDING" - || jobStatus == "WORKING" || jobStatus == "REMOTE_WORKING") { - li = li + '

' +jobStatus+ '

' - } else if(jobStatus == "WAITING") { - li = li + '

' +jobStatus+ '

' - } else if(jobStatus == "FINISHED") { - li = li + '

' +jobStatus+ '

' - } else { - li = li + '

' +jobStatus+ '

' - } - + li = li + '

'+jobStatus+'

'; li = li + ''; } + if(update) { + updateJobListStatus(id, "jobs-li-"+id); + } + return li; } + -- 2.34.1