$(function() {
$("div.dashboard").each(function() {
var root = $('<div class="dashboard"></div>');
root.append(t2hui.dashboard.build_controls(100));
root.append(t2hui.dashboard.build_table(base_uri + 'runs/1/100'));
$(this).replaceWith(root);
});
});
t2hui.dashboard = {};
t2hui.dashboard.build_table = function(uri) {
var columns = [
{ 'name': 'tools', 'label': 'tools', 'class': 'tools', 'builder': t2hui.dashboard.tool_builder },
{ 'name': 'passed', 'label': 'P', 'class': 'count', 'builder': t2hui.dashboard.build_pass },
{ 'name': 'failed', 'label': 'F', 'class': 'count', 'builder': t2hui.dashboard.build_fail },
{ 'name': 'retried', 'label': 'R', 'class': 'count', 'builder': t2hui.dashboard.build_retry },
{ 'name': 'project', 'label': 'project', 'class': 'project'},
{ 'name': 'status', 'label': 'status', 'class': 'status'}
];
if (!single_user) {
columns.push({ 'name': 'user', 'label': 'user', 'class': 'user'});
}
var table = new FieldTable({
'class': 'dashboard_table',
'id': 'dashboard_runs',
'fetch': uri,
'sortable': true,
'modify_row_hook': t2hui.dashboard.modify_row,
'row_redraw_check': t2hui.dashboard.redraw_check,
'row_redraw_fetch': t2hui.dashboard.redraw_fetch,
'row_redraw_interval': 5 * 1000,
'dynamic_field_attribute': 'fields',
'dynamic_field_fetch': t2hui.dashboard.field_fetch,
'dynamic_field_builder': t2hui.dashboard.field_builder,
'columns': columns,
'postfix_columns': [
{ 'name': 'added', 'label': 'date+time (' + time_zone + ')', 'class': 'date' },
]
});
return table.render();
}
t2hui.dashboard.build_controls = function(count) {
var page = 1;
var controls = $('<div class="dashboard_controls"></div>');
var pn = $('<span>' + page + '</span>');
var dp = $('<div class="dashboard_page">Page </div>');
dp.append(pn);
var prev = $('<div class="dashboard_pager"><<</div>');
prev.click(function() {
page--;
$("div#dashboard_runs").each(function() { $(this).replaceWith(t2hui.dashboard.build_table(base_uri + 'runs/' + page + '/' + count)) });
if (page < 2) { prev.addClass('hide') }
pn.text(page);
});
controls.append(prev);
if (page < 2) { prev.addClass('hide') }
controls.append(dp);
var next = $('<div class="dashboard_pager">>></div>');
next.click(function() {
page++;
$("div#dashboard_runs").each(function() { $(this).replaceWith(t2hui.dashboard.build_table(base_uri + 'runs/' + page + '/' + count)) });
if (page > 1) { prev.removeClass('hide') }
pn.text(page);
});
controls.append(next);
return controls;
}
t2hui.dashboard.build_pass = function(item, col) {
var val = item.passed;
if (val === null) { return };
if (val === undefined) { return };
col.text(val);
};
t2hui.dashboard.build_fail = function(item, col) {
var val = item.failed;
if (val === null) { return };
if (val === undefined) { return };
if (val == 0) { col.append($('<div class="success_txt">' + val + '</div>')) }
else { col.text(val) }
};
t2hui.dashboard.build_retry = function(item, col) {
var val = item.retried;
if (val === null) { return };
if (val === undefined) { return };
if (val == 0) { col.append($('<div class="success_txt">' + val + '</div>')) }
else { col.append($('<div class="iffy_txt">' + val + '</div>')) }
};
t2hui.dashboard.tool_builder = function(item, tools, data) {
var link = base_uri + 'run/' + item.run_id;
var downlink = base_uri + 'download/' + item.run_id;
var params = $('<div class="tool etoggle" title="See Run Parameters"><img src="/img/data.png" /></div>');
tools.append(params);
params.click(function() {
$('#modal_body').jsonView(item.parameters, {collapsed: true});
$('#free_modal').slideDown();
});
var download = $('<a class="tool etoggle" title="Download Log" href="' + downlink + '"><img src="/img/download.png" /></a>');
tools.append(download);
if (item.error) {
var err = $('<div class="tool etoggle error" title="See Error Message"><img src="/img/error.png"/></div>');
tools.append(err);
err.click(function() {
var pre = $('<pre></pre>');
pre.text(item.error);
$('#modal_body').append(pre);
$('#free_modal').slideDown();
});
}
else {
var go = $('<a class="tool etoggle" title="Open Run" href="' + link + '"><img src="/img/goto.png" /></a>');
tools.append(go);
}
var pin = $('<img />');
var pintool = $('<a class="tool etoggle"></a>');
var pinstate;
if (item.pinned) {
pintool.prop('title', 'unpin');
pinstate = true;
pin.attr('src', '/img/locked.png');
}
else {
pintool.prop('title', 'pin');
pinstate = false;
pin.attr('src', '/img/unlocked.png');
}
pintool.append(pin);
tools.prepend(pintool);
pintool.click(function() {
var url = link + '/pin';
$.ajax(url, {
'data': { 'content-type': 'application/json' },
'error': function(a, b, c) { alert("Failed to pin run") },
'success': function() {
pinstate = !pinstate;
pintool.children().remove();
pin = $('<img />');
if (pinstate) {
pintool.prop('title', 'unpin');
pin.attr('src', '/img/locked.png');
}
else {
pintool.prop('title', 'pin');
pin.attr('src', '/img/unlocked.png');
}
pintool.append(pin);
},
});
});
};
t2hui.dashboard.redraw_check = function(item) {
if (item.status == 'pending') { return true }
if (item.status == 'running') { return true }
return false;
};
t2hui.dashboard.redraw_fetch = function(item) {
return base_uri + 'run/' + item.run_id;
};
t2hui.dashboard.field_fetch = function(field_data) {
return base_uri + 'run/' + field_data.run_id;
};
t2hui.dashboard.field_builder = function(data, name) {
var it;
data.fields.forEach(function(field) {
if (field.name === name) {
it = field.data;
return false;
}
});
return it;
};
t2hui.dashboard.modify_row = function(row, item) {
if (item.failed) {
row.addClass('error_set');
}
else if(item.passed) {
row.addClass('success_set');
}
row.addClass(item.status + "_set");
};