diff options
author | Milo Casagrande <milo.casagrande@linaro.org> | 2014-12-04 16:54:19 +0100 |
---|---|---|
committer | Milo Casagrande <milo.casagrande@linaro.org> | 2014-12-04 16:54:19 +0100 |
commit | 2ba7fa8e23376206e04ec79c32e74dbef6078f49 (patch) | |
tree | b1904eecfe4a81871c99310bc656174fb5eef2b8 | |
parent | f7f748a605ec6854d9f5603f44dc7fb7158c2ce7 (diff) |
Refactor using new base lib.
Change-Id: I570600ee4d07246dc39aec8f68012827f6cb6d33
-rw-r--r-- | app/dashboard/static/js/linaro-jobs-all-1.0.9.js | 641 |
1 files changed, 301 insertions, 340 deletions
diff --git a/app/dashboard/static/js/linaro-jobs-all-1.0.9.js b/app/dashboard/static/js/linaro-jobs-all-1.0.9.js index 3798a79..26d1df7 100644 --- a/app/dashboard/static/js/linaro-jobs-all-1.0.9.js +++ b/app/dashboard/static/js/linaro-jobs-all-1.0.9.js @@ -1,375 +1,336 @@ var searchFilter = $('#search-filter').val(); var pageLen = $('#page-len').val(); +var dateRange = $('#date-range').val(); -$(document).ready(function() { +function failedAjaxCall() { 'use strict'; + $('#table-loading').remove(); +} - $('#li-job').addClass('active'); +function countFailCallback() { + 'use strict'; + JSBase.replaceContentByClass('.count-badge', '∞'); +} - $('body').tooltip({ - 'selector': '[rel=tooltip]', - 'placement': 'auto' - }); +function batchCountElements(data) { + 'use strict'; + var localData = data.result, + len = localData.length, + i = 0, + j = 0, + batchElements = 4, + jobName = '', + queriesLen = len * 4, + batchQueries = new Array(queriesLen), + errorReason = 'Batch count failed', + deferredAjaxCall = null, + ajaxData = null; - $('#table-div').hide(); + if (len > 0) { + for (i; i < queriesLen; i += batchElements) { + j = i; + jobName = localData[i / batchElements].job; - var errorReason = '', - getDataAjax = null; + // Get successful defconfig count. + batchQueries[i] = { + 'method': 'GET', + 'operation_id': '#defconf-success-count-' + jobName, + 'collection': 'count', + 'document_id': 'defconfig', + 'query': 'status=PASS&date_range=' + dateRange + + '&job=' + jobName + }; - function failedAjaxCall() { - $('#table-loading').remove(); - } + // Get failed defconfig count. + batchQueries[j + 1] = { + 'method': 'GET', + 'operation_id': '#defconf-fail-count-' + jobName, + 'collection': 'count', + 'document_id': 'defconfig', + 'query': 'status=FAIL&date_range=' + dateRange + + '&job=' + jobName + }; - function countFailCallback() { - $('.count-badge').each(function() { - $(this).empty().append('∞'); - }); - } + // Get successful boot reports count. + batchQueries[j + 2] = { + 'method': 'GET', + 'operation_id': '#boot-success-count-' + jobName, + 'collection': 'count', + 'document_id': 'boot', + 'query': 'status=PASS&date_range=' + dateRange + + '&job=' + jobName + }; - function batchCountElements(data) { - var localData = data.result, - i = 0, - j = 0, - batchElements = 4, - jobName = '', - dateRange = $('#date-range').val(), - len = localData.length, - queriesLen = len * 4, - batchQueries = new Array(queriesLen); + // Get failed boot reports count. + batchQueries[j + 3] = { + 'method': 'GET', + 'operation_id': '#boot-fail-count-' + jobName, + 'collection': 'count', + 'document_id': 'boot', + 'query': 'status=FAIL&date_range=' + dateRange + + '&job=' + jobName + }; + } - errorReason = 'Batch count failed.'; + ajaxData = JSON.stringify({ + 'batch': batchQueries + }); + deferredAjaxCall = JSBase.createDeferredCall( + '/_ajax/batch', + 'POST', + ajaxData, + null, + countFailCallback, + errorReason, + {'Content-Type': 'application/json'}, + 'batch-failed' + ); - if (len > 0) { - for (i; i < queriesLen; i += batchElements) { - j = i; - jobName = localData[i / batchElements].job; + $.when(deferredAjaxCall).done(function(data) { + var batchData = data.result, + batchLen = batchData.length, + batchResult = null, + idx = 0; - // Get successful defconfig count. - batchQueries[i] = { - 'method': 'GET', - 'operation_id': '#defconf-success-count-' + jobName, - 'collection': 'count', - 'document_id': 'defconfig', - 'query': 'status=PASS&date_range=' + dateRange + - '&job=' + jobName - }; + if (batchLen > 0) { + for (idx; idx < batchLen; idx++) { + batchResult = batchData[idx].result[0]; + $(batchData[idx].operation_id).empty().append( + batchResult.count); + } + } + }); + } +} + +function createJobsTable(data) { + 'use strict'; - // Get failed defconfig count. - batchQueries[j + 1] = { - 'method': 'GET', - 'operation_id': '#defconf-fail-count-' + jobName, - 'collection': 'count', - 'document_id': 'defconfig', - 'query': 'status=FAIL&date_range=' + dateRange + - '&job=' + jobName - }; + var localData = data.result, + table = $('#jobstable').dataTable({ + 'dom': '<"row"<"col-xs-12 col-sm-12 col-md-6 col-lg-6"' + + '<"length-menu"l>>' + + '<"col-xs-12 col-sm-12 col-md-4 col-lg-4 col-lg-offset-2"f>' + + 'r' + + '<"col-xs-12 col-sm-12 col-md-12 col-lg-12"t>>' + + '<"row"<"col-xs-12 col-sm-12 col-md-6 col-lg-6"i>' + + '<"col-xs-12 col-sm-12 col-md-6 col-lg-6"p>>', + 'language': { + 'lengthMenu': '_MENU_ <strong>jobs per page</strong>', + 'zeroRecords': '<h4>No jobs to display.</h4>', + 'search': '<div id="search-area" class="input-group">' + + '<span class="input-group-addon">' + + '<i class="fa fa-search"></i></span>_INPUT_</div>' + }, + 'initComplete': function() { + $('#table-loading').remove(); + $('#table-div').fadeIn('slow', 'linear'); - // Get successful boot reports count. - batchQueries[j + 2] = { - 'method': 'GET', - 'operation_id': '#boot-success-count-' + jobName, - 'collection': 'count', - 'document_id': 'boot', - 'query': 'status=PASS&date_range=' + dateRange + - '&job=' + jobName - }; + var api = this.api(); - // Get failed boot reports count. - batchQueries[j + 3] = { - 'method': 'GET', - 'operation_id': '#boot-fail-count-' + jobName, - 'collection': 'count', - 'document_id': 'boot', - 'query': 'status=FAIL&date_range=' + dateRange + - '&job=' + jobName - }; + pageLen = Number(pageLen); + if (isNaN(pageLen)) { + pageLen = 25; } - $.ajax({ - 'url': '/_ajax/batch', - 'type': 'POST', - 'traditional': true, - 'dataType': 'json', - 'headers': { - 'Content-Type': 'application/json' - }, - 'beforeSend': function(jqXHR) { - setXhrHeader(jqXHR); - }, - 'data': JSON.stringify({ - 'batch': batchQueries - }), - 'timeout': 20000, - 'error': function() { - countFailCallback(); - }, - 'statusCode': { - 403: function() { - setErrorAlert('batch-403-error', 403, errorReason); - }, - 404: function() { - setErrorAlert('batch-404-error', 404, errorReason); - }, - 408: function() { - errorReason = 'Batch count failed: timeout.'; - setErrorAlert('batch-408-error', 408, errorReason); - }, - 500: function() { - setErrorAlert('batch-500-error', 500, errorReason); - } - } - }).done(function(data) { - var batchData = data.result, - batchLen = batchData.length, - batchResult = null, - idx = 0; + api.page.len(pageLen).draw(); - if (batchLen > 0) { - for (idx; idx < batchLen; idx++) { - batchResult = batchData[idx].result[0]; - $(batchData[idx].operation_id).empty().append( - batchResult.count); - } + if (searchFilter !== null && searchFilter.length > 0) { + api.search(searchFilter, true).draw(); + } + }, + 'lengthMenu': [25, 50, 75, 100], + 'deferRender': true, + 'ordering': true, + 'processing': true, + 'stateDuration': -1, + 'stateSave': true, + 'order': [3, 'desc'], + 'search': { + 'regex': true + }, + 'data': localData, + 'columns': [ + { + 'data': 'job', + 'title': 'Tree ‐ Branch', + 'type': 'string', + 'render': function(data, type, object) { + return '<a class="table-link" href="/job/' + data + + '/">' + data + ' ‐ <small>' + + object.git_branch + '</small></a>'; } - }); - } - } - - function createJobsTable(data) { - var localData = data.result, - table = $('#jobstable').dataTable({ - 'dom': '<"row"<"col-xs-12 col-sm-12 col-md-6 col-lg-6"' + - '<"length-menu"l>>' + - '<"col-xs-12 col-sm-12 col-md-4 col-lg-4 col-lg-offset-2"f>' + - 'r' + - '<"col-xs-12 col-sm-12 col-md-12 col-lg-12"t>>' + - '<"row"<"col-xs-12 col-sm-12 col-md-6 col-lg-6"i>' + - '<"col-xs-12 col-sm-12 col-md-6 col-lg-6"p>>', - 'language': { - 'lengthMenu': '_MENU_ <strong>jobs per page</strong>', - 'zeroRecords': '<h4>No jobs to display.</h4>', - 'search': '<div id="search-area" class="input-group">' + - '<span class="input-group-addon">' + - '<i class="fa fa-search"></i></span>_INPUT_</div>' }, - 'initComplete': function() { - $('#table-loading').remove(); - $('#table-div').fadeIn('slow', 'linear'); - - var api = this.api(); - - pageLen = Number(pageLen); - if (isNaN(pageLen)) { - pageLen = 25; + { + 'data': 'job', + 'title': '<span rel="tooltip" data-toggle="tooltip"' + + 'title="Successful/Failed defconfigs built">' + + 'Build Status</span>', + 'type': 'String', + 'searchable': false, + 'orderable': false, + 'className': 'pull-center', + 'render': function(data) { + return '<a class="clean-link" href="/job/' + data + + '"><span class="badge alert-success ' + + 'extra-margin">' + + '<span id="defconf-success-count-' + data + + '" class="count-badge">' + + '<i class="fa fa-cog fa-spin"></i>' + + '</span></span>' + + '<span class="badge alert-danger">' + + '<span id="defconf-fail-count-' + data + + '" class="count-badge">' + + '<i class="fa fa-cog fa-spin"></i>' + + '</span></span></a>'; } - - api.page.len(pageLen).draw(); - - if (searchFilter !== null && searchFilter.length > 0) { - api.search(searchFilter, true).draw(); + }, + { + 'data': 'job', + 'title': '<span rel="tooltip" data-toggle="tooltip"' + + 'title="Successful/Failed boot reports">' + + 'Boot Status</span>', + 'type': 'string', + 'searchable': false, + 'orderable': false, + 'className': 'pull-center', + 'render': function(data) { + return '<a class="clean-link" href="/boot/all/job/' + + data + '"><span class="badge alert-success ' + + 'extra-margin">' + + '<span id="boot-success-count-' + data + + '" class="count-badge">' + + '<i class="fa fa-cog fa-spin"></i>' + + '</span></span>' + + '<span class="badge alert-danger">' + + '<span id="boot-fail-count-' + data + + '" class="count-badge">' + + '<i class="fa fa-cog fa-spin"></i>' + + '</span></span></a>'; } }, - 'lengthMenu': [25, 50, 75, 100], - 'deferRender': true, - 'ordering': true, - 'processing': true, - 'stateDuration': -1, - 'stateSave': true, - 'order': [3, 'desc'], - 'search': { - 'regex': true + { + 'data': 'created_on', + 'title': 'Date', + 'type': 'date', + 'render': function(data) { + var created = new Date(data.$date); + return created.getCustomISODate(); + } }, - 'data': localData, - 'columns': [ - { - 'data': 'job', - 'title': 'Tree ‐ Branch', - 'type': 'string', - 'render': function(data, type, object) { - return '<a class="table-link" href="/job/' + data + - '/">' + data + ' ‐ <small>' + - object.git_branch + '</small></a>'; - } - }, - { - 'data': 'job', - 'title': '<span rel="tooltip" data-toggle="tooltip"' + - 'title="Successful/Failed defconfigs built">' + - 'Build Status</span>', - 'type': 'String', - 'searchable': false, - 'orderable': false, - 'className': 'pull-center', - 'render': function(data) { - return '<a class="clean-link" href="/job/' + data + - '"><span class="badge alert-success ' + - 'extra-margin">' + - '<span id="defconf-success-count-' + data + - '" class="count-badge">' + - '<i class="fa fa-cog fa-spin"></i>' + - '</span></span>' + - '<span class="badge alert-danger">' + - '<span id="defconf-fail-count-' + data + - '" class="count-badge">' + - '<i class="fa fa-cog fa-spin"></i>' + - '</span></span></a>'; - } - }, - { - 'data': 'job', - 'title': '<span rel="tooltip" data-toggle="tooltip"' + - 'title="Successful/Failed boot reports">' + - 'Boot Status</span>', - 'type': 'string', - 'searchable': false, - 'orderable': false, - 'className': 'pull-center', - 'render': function(data) { - return '<a class="clean-link" href="/boot/all/job/' + - data + '"><span class="badge alert-success ' + - 'extra-margin">' + - '<span id="boot-success-count-' + data + - '" class="count-badge">' + - '<i class="fa fa-cog fa-spin"></i>' + - '</span></span>' + - '<span class="badge alert-danger">' + - '<span id="boot-fail-count-' + data + - '" class="count-badge">' + - '<i class="fa fa-cog fa-spin"></i>' + - '</span></span></a>'; - } - }, - { - 'data': 'created_on', - 'title': 'Date', - 'type': 'date', - 'render': function(data) { - var created = new Date(data['$date']); - return created.getCustomISODate(); - } - }, - { - 'data': 'status', - 'title': 'Status', - 'type': 'string', - 'className': 'pull-center', - 'render': function(data) { - var displ; - switch (data) { - case 'BUILD': - displ = '<span rel="tooltip" ' + - 'data-toggle="tooltip"' + - 'title="Building">' + - '<span class="label label-info">' + - '<i class="fa fa-cogs"></i></span></span>'; - break; - case 'PASS': - displ = '<span rel="tooltip" ' + - 'data-toggle="tooltip"' + - 'title="Build completed">' + - '<span class="label label-success">' + - '<i class="fa fa-check"></i></span></span>'; - break; - case 'FAIL': - displ = '<span rel="tooltip" ' + - 'data-toggle="tooltip"' + - 'title="Build failed">' + - '<span class="label label-danger">' + - '<i class="fa fa-exclamation-triangle">' + - '</i></span></span>'; - break; - default: - displ = '<span rel="tooltip" ' + - 'data-toggle="tooltip"' + - 'title="Unknown status">' + - '<span class="label label-warning">' + - '<i class="fa fa-question">' + - '</i></span></span>'; - break; - } - return displ; - } - }, - { - 'data': 'job', - 'title': '', - 'searchable': false, - 'orderable': false, - 'width': '30px', - 'className': 'pull-center', - 'render': function(data) { - return '<span rel="tooltip" data-toggle="tooltip"' + - 'title="Details for ' + data + '">' + - '<a href="/job/' + data + '">' + - '<i class="fa fa-search"></i></a></span>'; + { + 'data': 'status', + 'title': 'Status', + 'type': 'string', + 'className': 'pull-center', + 'render': function(data) { + var displ; + switch (data) { + case 'BUILD': + displ = '<span rel="tooltip" ' + + 'data-toggle="tooltip"' + + 'title="Building">' + + '<span class="label label-info">' + + '<i class="fa fa-cogs"></i></span></span>'; + break; + case 'PASS': + displ = '<span rel="tooltip" ' + + 'data-toggle="tooltip"' + + 'title="Build completed">' + + '<span class="label label-success">' + + '<i class="fa fa-check"></i></span></span>'; + break; + case 'FAIL': + displ = '<span rel="tooltip" ' + + 'data-toggle="tooltip"' + + 'title="Build failed">' + + '<span class="label label-danger">' + + '<i class="fa fa-exclamation-triangle">' + + '</i></span></span>'; + break; + default: + displ = '<span rel="tooltip" ' + + 'data-toggle="tooltip"' + + 'title="Unknown status">' + + '<span class="label label-warning">' + + '<i class="fa fa-question">' + + '</i></span></span>'; + break; } + return displ; + } + }, + { + 'data': 'job', + 'title': '', + 'searchable': false, + 'orderable': false, + 'width': '30px', + 'className': 'pull-center', + 'render': function(data) { + return '<span rel="tooltip" data-toggle="tooltip"' + + 'title="Details for ' + data + '">' + + '<a href="/job/' + data + '">' + + '<i class="fa fa-search"></i></a></span>'; } - ] - }); - - $(document).on('click', '#jobstable tbody tr', function() { - var tableData = table.fnGetData(this); - if (tableData) { - window.location = '/job/' + tableData.job + '/'; - } - }); - - $('#search-area > .input-sm').attr('placeholder', 'Filter the results'); - $('.input-sm').keyup(function(key) { - // Remove focus from input when Esc is pressed. - if (key.keyCode === 27) { - $(this).blur(); } - }); - - return data; - } + ] + }); - function updateJobsPage(data) { - // Simple function needed to wrap another deferred call. - // Create the table, then update it with the batch count operation. - $.when(createJobsTable(data)).done(batchCountElements); - } + $(document).on('click', '#jobstable tbody tr', function() { + var tableData = table.fnGetData(this); + if (tableData) { + window.location = '/job/' + tableData.job + '/'; + } + }); - errorReason = 'Job data call failed.'; - getDataAjax = $.ajax({ - 'url': '/_ajax/job', - 'traditional': true, - 'cache': true, - 'dataType': 'json', - 'dataSrc': 'result', - 'beforeSend': function(jqXHR) { - setXhrHeader(jqXHR); - }, - 'data': { - 'aggregate': 'job', - 'sort': 'created_on', - 'sort_order': -1, - 'date_range': $('#date-range').val(), - 'field': [ - 'job', 'created_on', 'status', 'git_branch' - ] - }, - 'error': function() { - failedAjaxCall(); - }, - 'timeout': 6000, - 'statusCode': { - 403: function() { - setErrorAlert('job-403-error', 403, errorReason); - }, - 404: function() { - setErrorAlert('job-404-error', 404, errorReason); - }, - 408: function() { - errorReason = 'Job data call failed: timeout.'; - setErrorAlert('job-408-error', 408, errorReason); - }, - 500: function() { - setErrorAlert('job-500-error', 500, errorReason); - } + $('#search-area > .input-sm').attr('placeholder', 'Filter the results'); + $('.input-sm').keyup(function(key) { + // Remove focus from input when Esc is pressed. + if (key.keyCode === 27) { + $(this).blur(); } }); - $.when(getDataAjax).then(updateJobsPage, failedAjaxCall); + return data; +} + +function updateJobsPage(data) { + 'use strict'; + // Simple function needed to wrap another deferred call. + // Create the table, then update it with the batch count operation. + $.when(createJobsTable(data)).done(batchCountElements); +} + +$(document).ready(function() { + 'use strict'; + + $('#li-job').addClass('active'); + $('#table-div').hide(); + + var errorReason = 'Job data call failed', + deferredAjaxCall = null, + ajaxData = null; + + ajaxData = { + 'aggregate': 'job', + 'sort': 'created_on', + 'sort_order': -1, + 'date_range': $('#date-range').val(), + 'field': [ + 'job', 'created_on', 'status', 'git_branch' + ] + }; + deferredAjaxCall = JSBase.createDeferredCall( + '/_ajax/job', + 'GET', + ajaxData, + null, + failedAjaxCall, + errorReason, + null, + 'failed-job' + ); + + $.when(deferredAjaxCall).done(updateJobsPage); }); |