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
}
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)
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
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)
}
}
}
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)
}
}
}
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
#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
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);
// 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
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");
+ }
}
});
});
clearJobList();
}
+
function generateHtmlJobList(xml) {
var id = xml.find("Id").text();
var distribution = xml.find("Distribution").text();
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";
{
li = '<li class="jobs-li-header" data-role="list-divider" title="'+id+'">'
+ '<span>'+id+ ' ' +projectName+ '</span><span style="float: right">'+distribution+'</span></li>'
- + '<li id="jobs-li-'+id+'" class="jobs-list-data" title="'+id+'">'
+ + '<li id="jobs-li-'+id+'" class="jobs-list-data" title="'+id+'" data-icon="false">'
+ '<a href=log.html?jobid='+id+' id="jobs-li-link-'+id+'" class="logWindow" data-ajax="false">'
+ '<h3>' +projectName+ '</h3>'
+ '<p>ID : <strong>' +id+ '</strong></p>'
+ '<p id="jobs-li-time-'+id+'">TIME: <strong>' +startTime+ ' ~ '+endTime+ '</strong></p>';
li = li + '<p id="jobs-li-status-'+id+'" class="ui-li-aside jobs-li-status"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
- li = li + '<div hidden="hidden" class="jobs-li-hidden ui-screen-hidden">'
+ li = li + '</a>';
+ li = li + '<div id="jobs-li-'+id+'-sub-job-button-div" class="ui-screen-hidden" style="position: absolute; top: 95px; right: 20px;"><button id="jobs-li-'+id+'-sub-job-button" data-inline="true" data-mini="true" data-icon="plus" data-iconpos="notext" data-corners="true" onClick="clickSubJobs('+id+')"></button></div>'
+ li = li + '<div class="ui-screen-hidden">'
+ '<p class="jobs-li-hidden-id">'+id+'</p>'
+ '<p class="jobs-li-hidden-attr">'+jobAttribute+'</p>'
+ '</div>';
- li = li + '</a></li>';
+ li = li + '</li>';
+ //For Sub job
+ li = li + '<li id="jobs-li-'+id+'-child" class="ui-screen-hidden">'
+ + '<div id="jobs-li-'+id+'-sub-job-area"></div></li>';
}
else if(jobAttribute == "MULTI")
{
li = '<li class="jobs-li-header" data-role="list-divider" title="'+id+'">'
- + '<span>'+id+ ' ' +jobAttribute+ '</span><span style="float: right">'+distribution+'</span></li>'
- + '<li id="jobs-li-'+id+'" class="jobs-list-data" title="'+id+'">'
- + '<a href=log.html?jobid='+id+' id="jobs-li-link-'+id+'" class="logWindow" data-ajax="false">'
+ + '<span>'+id+ ' ' +jobAttribute+ '</span><span style="float: right">'+distribution+'</span></li>';
+ li = li + '<li id="jobs-li-'+id+'" class="jobs-list-data" title="'+id+'" data-icon="false">';
+ li = li + '<a href=log.html?jobid='+id+' id="jobs-li-link-'+id+'" class="logWindow" data-ajax="false">'
+ + '<h3>' +projectList+ '</h3>'
+ + '<p>ID : <strong>' +id+ '</strong></p>'
+ + '<p>TYPE : <strong>' +jobType+ '</strong></p>'
+ '<p>USER : <strong>' +userName+ '</strong></p>'
+ '<p id="jobs-li-time-'+id+'">TIME: <strong>' +startTime+ ' ~ '+endTime+ '</strong></p>'
- + '<p id="jobs-li-attr-'+id+'" hidden="hidden">'+jobAttribute+'</p>';
- li = li + '<p id="jobs-li-status-'+id+'" class="ui-li-aside jobs-li-status" title="'+id+'"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
- li = li + '<div hidden="hidden" class="jobs-li-hidden ui-screen-hidden">'
- + '<p class="jobs-li-hidden-id">'+id+'</p>'
- + '<p class="jobs-li-hidden-attr">'+jobAttribute+'</p>'
- + '</div>';
- li = li + '</a></li>';
+ li = li + '<p id="jobs-li-status-'+id+'" class="ui-li-aside jobs-li-status" title="'+id+'"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
+ li = li + '</a>';
+ li = li + '<div id="jobs-li-'+id+'-sub-job-button-div" class="ui-screen-hidden" style="position: absolute; top: 80px; right: 20px;"><button id="jobs-li-'+id+'-sub-job-button" data-inline="true" data-mini="true" data-icon="plus" data-iconpos="notext" data-corners="true" onClick="clickSubJobs('+id+')"></button></div>'
+ li = li + '<div class="ui-screen-hidden">'
+ + '<p class="jobs-li-hidden-id">'+id+'</p>'
+ + '<p class="jobs-li-hidden-attr">'+jobAttribute+'</p>'
+ + '</div>';
+ li = li + '</li>';
+ //For Sub job
+ li = li + '<li id="jobs-li-'+id+'-child" class="ui-screen-hidden">'
+ + '<div id="jobs-li-'+id+'-sub-job-area"></div></li>';
}
else if(jobAttribute == "CHILD")
{
- li = '<li id="jobs-li-'+id+'" class="jobs-list-data" title="'+id+'">'
- + '<a href=log.html?jobid='+id+' id="jobs-li-link-'+id+'" class="logWindow" data-ajax="false">'
- + '<h3>' +projectName+ '</h3>'
- + '<p>ID : <strong>' +id+ '</strong></p>'
+ li = '<div id="jobs-li-'+id+'" class="jobs-list-data" title="'+id+'" data-role="collapsible" data-collapsed="true" data-mini="true" data-iconpos="right" style="clear: both;">'
+ + '<h3><span style="width: 80%;">['+id+ '] '+projectName+' - '+os+'</span><span id="jobs-li-status-'+id+'" class="jobs-li-status" style="float: right; font-size: 12px;"><font color="'+font_color+'">'+jobStatus+'</font></span></h3>'
+ + '<a href=log.html?jobid='+id+' id="jobs-li-link-'+id+'" class="logWindow" data-ajax="false" style="text-decoration: none; color: black">'
+ + '<h4>' +projectName+ '</h4>'
+ + '<p class="ui-li-desc">ID : <strong>' +id+ '</strong></p>'
+ '<p>TYPE : <strong>' +jobType+ '</strong></p>'
+ '<p>OS : <strong>' +os+ '</strong></p>'
+ '<p id="jobs-li-time-'+id+'">TIME: <strong>' +startTime+ ' ~ '+endTime+ '</strong></p>'
- + '<p id="jobs-li-attr-'+id+'" hidden="hidden">'+jobAttribute+'</p>';
-
- li = li + '<p id="jobs-li-status-'+id+'" class="ui-li-aside jobs-list-status" title="'+id+'"><strong><font color="'+font_color+'">'+jobStatus+'</strong></p>';
- li = li + '<div hidden="hidden" class="jobs-li-hidden ui-screen-hidden">'
- + '<p class="jobs-li-hidden-id">'+id+'</p>'
- + '<p class="jobs-li-hidden-attr">'+jobAttribute+'</p>'
- + '</div>';
- li = li + '</a></li>';
+ + '</a>';
+ li = li + '<div class="ui-screen-hidden">'
+ + '<p class="jobs-li-hidden-id">'+id+'</p>'
+ + '<p class="jobs-li-hidden-attr">'+jobAttribute+'</p>'
+ + '</div>';
+ li = li + '<div id="jobs-li-'+id+'-sub-job-button-div" class="ui-screen-hidden" style="float: right; position: relative; top: -20px;"><button id="jobs-li-'+id+'-sub-job-button" data-inline="true" data-mini="true" data-icon="minus" data-iconpos="notext" data-corners="true" onClick="clickSubJobs('+id+')"></button></div>';
+ //For Sub job
+ li = li + '<div id="jobs-li-'+id+'-child" style="clear: both; width: 97%; position: relative; left: 30px;">'
+ + '<div id="jobs-li-'+id+'-sub-job-area"></div></div>';
+ li = li + '</div>';
}
return li;
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;
}
}
+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"});
+ }
+}
+