var reloadInterval = 30000; // in millisecs
//var reloadInterval = 10000; // in millisecs
var prioritiseAdminUrl = "/automation.svc/admin/prioritise",
skipAdminUrl = "/automation.svc/admin/skip",
reprocessAdminUrl = "/automation.svc/admin/reprocess",
notProcessedYear = 9999;
function toDate(s) {
if (!s) {
return null;
}
var toDateRe = new RegExp("^/Date\\((\\-?\\d+)[\\+\\d]*\\)/$");
var unixtime = Number(s.replace(toDateRe, "$1"));
unixtime = (unixtime > 0) ? unixtime : 0;
return (new Date(unixtime));
};
function getLocaleDatetimeString(date, separator) {
return (date.toLocaleDateString() + separator + date.toLocaleTimeString());
}
function getSortableDatetimeString(date, separator) {
return ((date.getFullYear() != notProcessedYear) ? (date.toDateString() + separator + date.toLocaleTimeString()) : "");
//return (date.toDateString() + separator + date.toLocaleTimeString());
}
// Return the difference of two date objects in secs
function datesDiffInSecs(date1, date2) {
return (((date1.getFullYear() == notProcessedYear) || (date1.getTime() < date2.getTime()))) ? 0 : ((date1.getTime() - date2.getTime()) / 1000);
}
function formatSecs(secs) {
var zeros = d3.format("02d");
var h = zeros(Math.floor(secs / 3600));
var m = zeros(Math.floor((secs % 3600) / 60));
var s = zeros(Math.floor((secs % 3600) % 60));
return (h + ":" + m + ":" + s);
}
function getChangelistLink(changelist) {
var link;
var urlPrefix = "http://rsgedip4s1:8080/@md=d&cd=//&c=7FM@/";
var urlSuffix = "?ac=10";
if (changelist) {
link = $("" , {
text: changelist,
title: "View Changelist on Perforce Web",
href: urlPrefix + changelist + urlSuffix,
target: "_blank",
}).prop("outerHTML");
}
else
link = " ";
//console.log(link);
return link;
}
function addJob(guid) {
if( $("#jobpage" + guid).length === 0) {
//create the html for the tab
var newjobpage = $("#jobpage").clone();
newjobpage[0].id = "jobpage" + guid;
$("#tabs").append(newjobpage);
var jobid = "#" + newjobpage[0].id;
$("#tabs").tabs("add", jobid, "Job " + guid + "Remove Tab");
$("#tabs span.ui-icon-close").click(function(e) {
e.preventDefault(); // Don't add the job id to the url
/* Old buggy code
var index = $( "li", $("#tabs") ).index( $( this ).parent() );
$("#tabs").tabs( "remove", index );
*/
// Remove the panel's page which will become hidden
$(jobid).remove($(this).attr("id"));
// Remove the tab (html li)
$(this).closest("li").remove();
// Refresh the tabs and select the last one (doesn't always work (why?))
$("#tabs").tabs("refresh");
$("#tabs").tabs("select", getNumberOfTabs() - 1);
});
updateJob(guid);
$("#tabs").tabs("select", $("#tabs").tabs("length") - 1);
}
};
function getNumberOfTabs() {
// Because $("#tabs").tabs("length") is not updated when a tab is removed
return ($("#tabs ul li:visible").length);
}
function updateJob( guid ) {
var node = $("#tabs #jobpage" + guid );
//node.id = node.id + index;
//currentcl = cl;
var job = jobJson[guid];
var hout = "Type: " + job.__type;
hout += "
ID: " + job.ID;
hout += "
Trigger: ";
if(job.Trigger.__type == "UserRequestTrigger") {
hout += "User request by " + job.Trigger.Username + "";
hout += " at " + getLocaleDatetimeString(toDate(job.Trigger.SubmittedAt), " ");
} else {
hout += "Changelist " + getChangelistLink(job.Trigger.Changelist);
hout += " checked in by " + job.Trigger.Username + " (" + job.Trigger.Client + ")";
hout += " at " + getLocaleDatetimeString(toDate(job.Trigger.SubmittedAt), " ") + "";
hout += "
Description: " + job.Trigger.Description;
}
hout += "
Processing State: " + jobstateenum[job.State];
if(job.State == 2) {
hout += "
Processing Finished At: " + getLocaleDatetimeString(toDate(job.ProcessedAt), " ");
hout += "
Processing Time: " + job.ProcessingTime;
} else {
hout += "
Priority: " + job.Priority;
}
hout += "
";
hout += " ";
hout += " ";
hout += " ";
hout += "
";
node.children("#jobdetail").html(hout);
var userElement = node.children("#jobdetail").find(".username");
createUserInfoDiv(job.Trigger.Username, userElement);
$(userElement).unbind().hover(function() {
$(this).children("div.user").fadeIn("fast");
},
function() {
$(this).children("div.user").fadeOut("fast");
});
$("#jobdetail button").button();
var currentJobDiv = "#jobpage" + job.ID + " #action-status";
node.find("#clpri").click(function() {
$.ajax({
type: "GET",
url: prioritiseAdminUrl,
data: {job: job.ID},
dataType: "json",
success: function(json) {
$(currentJobDiv)
.removeClass("failed").addClass("success")
.html("'Prioritise' action for " + job.ID + " was sent successfully.");
},
error: function() {
$(currentJobDiv)
.html("'Prioritise' action for " + job.ID + " has failed!")
.removeClass("success").addClass("failed");
},
complete: function() {}
});
});
// Disabling the prioritise button
node.find("#clpri").attr("disabled", true);
node.find("#clskip").click(function() {
$.ajax({
type: "GET",
url: skipAdminUrl,
data: {job: job.ID},
dataType: "json",
success: function(json) {
$(currentJobDiv)
.removeClass("failed").addClass("success")
.html("'Skip' action for " + job.ID + " was sent successfully.");
},
error: function() {
$(currentJobDiv)
.html("'Skip' action for " + job.ID + " has failed!")
.removeClass("success").addClass("failed");
},
complete: function() {
}
});
});
// Disabling the skip button
//node.find("#clskip").attr("disabled", true);
//console.log(node)
node.find("#clforce").click(function() {
$.ajax({
type: "GET",
url: reprocessAdminUrl,
data: {job: job.ID},
dataType: "json",
success: function(json) {
$(currentJobDiv)
.removeClass("failed").addClass("success")
.html("'Force' action for " + job.ID + " was sent successfully.");
},
error: function() {
$(currentJobDiv)
.html("'Force' action for " + job.ID + " has failed!")
.removeClass("success").addClass("failed");
},
complete: function() {
}
});
});
// Disabling the force button
//node.find("#clforce").attr("disabled", true);
/*
var tabledata = {"aaData" : [], "aoColumns" : [], "bStateSave": true};
tabledata.aoColumns.push({ "sTitle": "Files" });
var table3 = node.children('#list3').dataTable(tabledata);
table3.fnClearTable();
$.each(job.Trigger.Files, function(i, file) {
table3.fnAddData([file]);
});
*/
addFilesListTable(job, node.children("#list3"));
}
// Adds a dataTable with the files of the current job to a given jQuery element
function addFilesListTable(job, element) {
//console.log(element);
var tabledata = {"aoColumns" : [], "bStateSave": true};
tabledata.aoColumns.push({ "sTitle": "Files" });
var table3 = element.dataTable(tabledata);
table3.fnClearTable();
$.each(job.Trigger.Files, function(i, file) {
table3.fnAddData([file], false);
});
table3.fnDraw();
}