From 49fe80955b6ba55a99e3f7b98f15f1fedf20d0be Mon Sep 17 00:00:00 2001 From: Sungmin kim Date: Sat, 20 Apr 2013 18:18:19 +0900 Subject: [PATCH] [title] Display reverse job in web page of jobs. --- dibs-web/app/controllers/jobs_controller.rb | 121 ++++++------ dibs-web/public/index.html | 2 +- dibs-web/public/javascripts/jobs.js | 192 ++++++++++++++------ 3 files changed, 202 insertions(+), 113 deletions(-) diff --git a/dibs-web/app/controllers/jobs_controller.rb b/dibs-web/app/controllers/jobs_controller.rb index 0172bb6..0524f58 100644 --- a/dibs-web/app/controllers/jobs_controller.rb +++ b/dibs-web/app/controllers/jobs_controller.rb @@ -140,26 +140,11 @@ class JobsController < ApplicationController doc.UserName(job.user_name) doc.StartTime(job.start_time) doc.EndTime(job.end_time) - } - if job.job_attribute == "MULTI" - child_jobs = get_child_job_info(job.job_id) - child_jobs.each {|job| - doc.Job { - doc.Id(job.job_id) - doc.Distribution(job.distribution_name) - doc.ProjectName(job.project_name) - doc.JobType(job.job_type) - doc.JobAttribute("CHILD") - doc.ParentJobId(job.parent_job_id) - 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) - } - } - end + project_list = get_child_job_project_name(job.job_id) + doc.ProjectList(project_list) + } + generate_xml_sub_jobs(doc,job.job_id) end end } @@ -234,7 +219,6 @@ class JobsController < ApplicationController doc.JobList { jobs.each {|job_list| job = get_job_info(job_list.id) - doc.Job { doc.Id(job.job_id) doc.Distribution(job.distribution_name) @@ -247,25 +231,11 @@ class JobsController < ApplicationController doc.UserName(job.user_name) doc.StartTime(job.start_time) doc.EndTime(job.end_time) - } - if job_list.job_attribute == "MULTI" - child_jobs = get_child_job_info(job.job_id) - child_jobs.each {|job| - doc.Job { - doc.Id(job.job_id) - doc.Distribution(job.distribution_name) - doc.ProjectName(job.project_name) - doc.JobType(job.job_type) - doc.JobAttribute("CHILD") - 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) - } - } - end + project_list = get_child_job_project_name(job.job_id) + doc.ProjectList(project_list) + } + generate_xml_sub_jobs(doc,job.job_id) } } end @@ -337,25 +307,11 @@ class JobsController < ApplicationController doc.UserName(job.user_name) doc.StartTime(job.start_time) doc.EndTime(job.end_time) - } - if job_list.job_attribute == "MULTI" - child_jobs = get_child_job_info(job.job_id) - child_jobs.each {|job| - doc.Job { - doc.Id(job.job_id) - doc.Distribution(job.distribution_name) - doc.ProjectName(job.project_name) - doc.JobType(job.job_type) - doc.JobAttribute("CHILD") - 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) - } - } - end + project_list = get_child_job_project_name(job.job_id) + doc.ProjectList(project_list) + } + generate_xml_sub_jobs(doc,job.job_id) } } } @@ -432,6 +388,9 @@ class JobsController < ApplicationController doc.UserName(job.user_name) doc.StartTime(job.start_time) doc.EndTime(job.end_time) + + project_list = get_child_job_project_name(job.job_id) + doc.ProjectList(project_list) } } } @@ -515,6 +474,54 @@ class JobsController < ApplicationController return job end + def get_child_job_project_name(parent_job_id) + project_list = nil + job = Job.find_by_sql("SELECT DISTINCT projects.name AS project_name + FROM jobs + LEFT JOIN projects + ON jobs.project_id = projects.id + WHERE jobs.parent_job_id = #{parent_job_id} + ORDER BY projects.name") + job.each do |job| + if project_list.nil? then + project_list = job.project_name + else + project_list = project_list + ', ' + job.project_name + end + end + return project_list + end + + def get_sub_job_count(job_id) + return Job.where(:parent_job_id => job_id).count + end + + def generate_xml_sub_jobs(doc, job_id) + sub_job_cnt = get_sub_job_count(job_id) + if sub_job_cnt > 0 + child_jobs = get_child_job_info(job_id) + child_jobs.each {|job| + doc.Job { + doc.Id(job.job_id) + doc.Distribution(job.distribution_name) + doc.ProjectName(job.project_name) + doc.JobType(job.job_type) + doc.JobAttribute("CHILD") + doc.ParentJobId(job.parent_job_id) + 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) + + project_list = get_child_job_project_name(job.job_id) + doc.ProjectList(project_list) + } + generate_xml_sub_jobs(doc,job.job_id) + } + end + end + def log_more line_cnt = 999 conti= 1 @@ -578,7 +585,7 @@ class JobsController < ApplicationController #read log file log_contents = nil - if start_line < end_line + if start_line <= end_line IO.popen("sed -n \"#{start_line},#{last_line}p\" #{path}") do |sed| log_contents = sed.read if log_contents.include? "=LOG_END" then diff --git a/dibs-web/public/index.html b/dibs-web/public/index.html index 7b9b817..1961916 100644 --- a/dibs-web/public/index.html +++ b/dibs-web/public/index.html @@ -288,7 +288,7 @@ Contributors: Search
- +

diff --git a/dibs-web/public/javascripts/jobs.js b/dibs-web/public/javascripts/jobs.js index fb75482..c3005ab 100644 --- a/dibs-web/public/javascripts/jobs.js +++ b/dibs-web/public/javascripts/jobs.js @@ -310,17 +310,46 @@ function queryJobList(requestUrl, condition, param, queryDistribution, selectedS var lastJobId = 0; $(xml).find("JobList").find("Job").each(function(){ var id = $(this).find("Id").text(); - var li = generateHtmlJobList($(this)); + var jobAttribute = $(this).find("JobAttribute").text(); + var parentJobId = $(this).find("ParentJobId").text(); + var li = ""; + if(jobAttribute == "CHILD") + { + li = generateHtmlJobList($(this)); + console.log("add-child-job parent's id:"+parentJobId); + $("#jobs-li-"+parentJobId+"-sub-job-area").append(li); + $("#jobs-li-"+id).collapsible(); + $("#jobs-li-"+id+"-sub-job-button").button(); - lastJobId = id; - $("#jobs-job-list").append(li).listview('refresh'); + $("#jobs-li-link-"+id).popupWindow({ + height:900, + width:800, + top:30, + left:50 + }); + console.log("add-child-job id:"+id); + + //Display sub-jobs button + if($("#jobs-li-"+parentJobId+"-sub-job-button-div").hasClass("ui-screen-hidden") == true) { + $("#jobs-li-"+parentJobId+"-sub-job-button-div").removeClass("ui-screen-hidden"); + } + } + else + { + li = generateHtmlJobList($(this)); + + lastJobId = id; + $("#jobs-job-list").append(li).listview('refresh'); + $("#jobs-li-"+id+"-sub-job-button").button(); + + $("#jobs-li-link-"+id).popupWindow({ + height:900, + width:800, + top:30, + left:50 + }); + } - $("#jobs-li-link-"+id).popupWindow({ - height:900, - width:800, - top:30, - left:50 - }); }); console.log("last job id :"+lastJobId); @@ -354,17 +383,42 @@ function jobUpdateList(condition, param, distribution, selectedStatus) { // Add new job list $(xml).find("JobList").find("Job").each(function(){ var id = $(this).find("Id").text(); + var jobAttribute = $(this).find("JobAttribute").text(); + var parentJobId = $(this).find("ParentJobId").text(); var li = generateHtmlJobList($(this)); - $(li).insertBefore(firstLi); - $("#jobs-job-list").listview('refresh'); - $("#jobs-li-link-"+id).popupWindow({ - height:900, - width:800, - top:30, - left:50 - }); - console.log("ADD List :"+id); + if(jobAttribute == "CHILD") { + console.log("add-child-job parent's id:"+parentJobId); + $("#jobs-li-"+parentJobId+"-sub-job-area").append(li); + $("#jobs-li-"+id).collapsible(); + $("#jobs-li-"+id+"-sub-job-button").button(); + $("#jobs-job-list").listview('refresh'); + + $("#jobs-li-link-"+id).popupWindow({ + height:900, + width:800, + top:30, + left:50 + }); + console.log("add-child-job id:"+id); + + //Display sub-jobs button + if($("#jobs-li-"+parentJobId+"-sub-job-button-div").hasClass("ui-screen-hidden") == true) { + $("#jobs-li-"+parentJobId+"-sub-job-button-div").removeClass("ui-screen-hidden"); + } + } + else { + $(li).insertBefore(firstLi); + $("#jobs-job-list").listview('refresh'); + $("#jobs-li-"+id+"-sub-job-button").button(); + $("#jobs-li-link-"+id).popupWindow({ + height:900, + width:800, + top:30, + left:50 + }); + console.log("ADD List :"+id); + } }); // Update working job list @@ -410,23 +464,25 @@ function jobUpdateList(condition, param, distribution, selectedStatus) { console.log("UPDATE List :"+job_id); } else { - var next_parent_job_li = $("#jobs-li-"+parent_job_id).nextAll(".jobs-li-header").first(); - console.log(parent_job_id); - console.log($("#jobs-li-"+parent_job_id)); - console.log(next_parent_job_li); - console.log(next_parent_job_li.text()); - + console.log("add-child-job parent's id:"+parent_job_id); var li = generateHtmlJobList($(this)); - - $(li).insertBefore(next_parent_job_li); + $("#jobs-li-"+parent_job_id+"-sub-job-area").append(li); + $("#jobs-li-"+job_id).collapsible(); + $("#jobs-li-"+job_id+"-sub-job-button").button(); $("#jobs-job-list").listview('refresh'); + $("#jobs-li-link-"+job_id).popupWindow({ height:900, width:800, top:30, left:50 }); - console.log("ADD child list :"+job_id); + console.log("add-child-job id:"+job_id); + + //Display sub-jobs button + if($("#jobs-li-"+parent_job_id+"-sub-job-button-div").hasClass("ui-screen-hidden") == true) { + $("#jobs-li-"+parent_job_id+"-sub-job-button-div").removeClass("ui-screen-hidden"); + } } }); }); @@ -536,6 +592,7 @@ function jobsClear() { clearJobList(); } + function generateHtmlJobList(xml) { var id = xml.find("Id").text(); var distribution = xml.find("Distribution").text(); @@ -547,6 +604,7 @@ function generateHtmlJobList(xml) { var userName = xml.find("UserName").text(); var startTime = xml.find("StartTime").text(); var endTime = xml.find("EndTime").text(); + var projectList = xml.find("ProjectList").text(); var li = ""; var font_color = "black"; @@ -579,7 +637,7 @@ function generateHtmlJobList(xml) { { li = '
  • ' + ''+id+ ' ' +projectName+ ''+distribution+'
  • ' - + '
  • ' + + '
  • ' + '' + '

    ' +projectName+ '

    ' + '

    ID : ' +id+ '

    ' @@ -589,46 +647,61 @@ function generateHtmlJobList(xml) { + '

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

    '; li = li + '

    '+jobStatus+'

    '; - li = li + '
  • '; + li = li + ''; + //For Sub job + li = li + '
  • ' + + '
  • '; } else if(jobAttribute == "MULTI") { li = '
  • ' - + ''+id+ ' ' +jobAttribute+ ''+distribution+'
  • ' - + '
  • ' - + '' + + ''+id+ ' ' +jobAttribute+ ''+distribution+'
  • '; + li = li + '
  • '; + li = li + '' + + '

    ' +projectList+ '

    ' + + '

    ID : ' +id+ '

    ' + + '

    TYPE : ' +jobType+ '

    ' + '

    USER : ' +userName+ '

    ' + '

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

    ' - + ''; - li = li + '

    '+jobStatus+'

    '; - li = li + ''; - li = li + '
  • '; + li = li + '

    '+jobStatus+'

    '; + li = li + ''; + li = li + '
    ' + li = li + '
    ' + + '

    '+id+'

    ' + + '

    '+jobAttribute+'

    ' + + '
    '; + li = li + ''; + //For Sub job + li = li + '
  • ' + + '
  • '; } else if(jobAttribute == "CHILD") { - li = '
  • ' - + '' - + '

    ' +projectName+ '

    ' - + '

    ID : ' +id+ '

    ' + li = '
  • '; + + ''; + li = li + '
    ' + + '

    '+id+'

    ' + + '

    '+jobAttribute+'

    ' + + '
    '; + li = li + '
    '; + //For Sub job + li = li + '
    ' + + '
    '; + li = li + ''; } return li; @@ -648,9 +721,7 @@ function searchWorkingList() { case "WORKING" : case "REMOTE_WORKING" : case "WAITING" : - if(job_attr != "CHILD") { - working_job_array.push(job_id); - } + working_job_array.push(job_id); break; default: break; @@ -693,3 +764,14 @@ function isPolling(idx) { } } +function clickSubJobs(job_id) { + if($("#jobs-li-"+job_id+"-child").hasClass("ui-screen-hidden") == true) { + $("#jobs-li-"+job_id+"-child").removeClass("ui-screen-hidden"); + $("#jobs-li-"+job_id+"-sub-job-button").buttonMarkup({icon:"minus"}); + } + else { + $("#jobs-li-"+job_id+"-child").addClass("ui-screen-hidden"); + $("#jobs-li-"+job_id+"-sub-job-button").buttonMarkup({icon:"plus"}); + } +} + -- 2.34.1