/* * status.js * Copyright (C) 2016 thegrumpydictator@gmail.com * * This software may be modified and distributed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International License. * * See the LICENSE file for details. */ /** global: jobImportUrl, langImportSingleError, langImportMultiError, jobStartUrl, langImportTimeOutError, langImportFinished, langImportFatalError */ var displayStatus = 'initial'; var timeOutId; // var startedImport = false; var startInterval = 2000; var interval = 500; // var timeoutLimit = 5000; // var currentLimit = 0; // var stepCount = 0; // after this many tries, stop checking when the job is not running anyway. var maxNotRunningCount = 20; var notRunningCount = 0; $(function () { "use strict"; //$('#import-status-intro').hide(); //$('#import-status-more-info').hide(); // check status, every 500 ms. timeOutId = setTimeout(checkImportStatus, startInterval); // button to start import routine: $('.start-job').click(startJob); }); function startJob() { console.log('Job started.'); $.post(jobStartUrl); // reset not running thing notRunningCount = 0; // check status, every 500 ms. timeOutId = setTimeout(checkImportStatus, startInterval); return false; } function checkImportStatus() { "use strict"; $.getJSON(jobImportUrl).done(reportOnJobImport).fail(failedJobImport); } function reportToConsole(data) { console.log('status: ' + data.status + ', steps: ' + data.steps + ', stepsDone: ' + data.stepsDone); //console.log('more status: ' + data); } function reportOnJobImport(data) { "use strict"; if (data.running == false) { notRunningCount++; } displayCorrectBox(data.status); reportToConsole(data); updateBar(data); //reportErrors(data); reportStatus(data); //updateTimeout(data); //if (importJobFinished(data)) { // finishedJob(data); // return; //} // same number of steps as last time? //if (currentLimit > timeoutLimit) { // timeoutError(); // return; //} // if the job has not actually started, do so now: //if (!data.started && !startedImport) { // kickStartJob(); // return; //} // trigger another check. if (notRunningCount < maxNotRunningCount && data.finished === false) { timeOutId = setTimeout(checkImportStatus, interval); } if (notRunningCount >= maxNotRunningCount && data.finished === false) { console.error('Job still not running, stop checking for it.'); } if(data.finished === true) { console.log('Job is done'); } } function displayCorrectBox(status) { console.log('Current job state is ' + status); if (status === 'configured' && displayStatus === 'initial') { // hide some boxes: $('.status_initial').hide(); return; } if (status === 'running') { // hide some boxes: $('.status_initial').hide(); $('.status_running').show(); $('.status_configured').hide(); return; } if(status === 'finished') { $('.status_initial').hide(); $('.status_running').hide(); $('.status_configured').hide(); $('.status_finished').show(); } console.error('CANNOT HANDLE CURRENT STATE'); } function importComplete() { "use strict"; var bar = $('#import-status-bar'); bar.removeClass('active'); } function updateBar(data) { "use strict"; var bar = $('#import-status-bar'); if (data.showPercentage) { console.log('Going to update bar with percentage.'); bar.addClass('progress-bar-success').removeClass('progress-bar-info'); bar.attr('aria-valuenow', data.percentage); bar.css('width', data.percentage + '%'); $('#import-status-bar').text(data.stepsDone + '/' + data.steps); if (data.percentage >= 100) { importComplete(); return; } return; } console.log('Going to update bar without percentage.'); // dont show percentage: bar.removeClass('progress-bar-success').addClass('progress-bar-info'); bar.attr('aria-valuenow', 100); bar.css('width', '100%'); } // // function reportErrors(data) { // "use strict"; // if (data.errors.length === 1) { // $('#import-status-error-intro').text(langImportSingleError); // //'An error has occured during the import. The import can continue, however.' // } // if (data.errors.length > 1) { // // 'Errors have occured during the import. The import can continue, however.' // $('#import-status-error-intro').text(langImportMultiError); // } // // // fill the list with error texts // $('#import-status-error-list').empty(); // for (var i = 0; i < data.errors.length; i++) { // var item = $('