diff --git a/lib/admin_plugins/cleanentriesdb.js b/lib/admin_plugins/cleanentriesdb.js new file mode 100644 index 000000000000..dd8ce0032c18 --- /dev/null +++ b/lib/admin_plugins/cleanentriesdb.js @@ -0,0 +1,80 @@ +'use strict'; + +var moment = require('moment'); + +var cleanentriesdb = { + name: 'cleanentriesdb' + , label: 'Clean Mongo entries (glucose entries) database' + , pluginType: 'admin' +}; + +function init() { + return cleanentriesdb; +} + +module.exports = init; + +cleanentriesdb.actions = [ + { + name: 'Delete all documents from entries collection older than 180 days' + , description: 'This task removes all documents from entries collection that are older than 180 days. Useful when uploader battery status is not properly updated.' + , buttonLabel: 'Delete old documents' + , confirmText: 'Delete old documents from entries collection?' + , preventClose: true + } + ]; + +cleanentriesdb.actions[0].init = function init(client, callback) { + var translate = client.translate; + var $status = $('#admin_' + cleanentriesdb.name + '_0_status'); + + $status.hide(); + + var numDays = '
' + + ''; + + $('#admin_' + cleanentriesdb.name + '_0_html').html(numDays); + + if (callback) { callback(); } +}; + +cleanentriesdb.actions[0].code = function deleteOldRecords(client, callback) { + var translate = client.translate; + var $status = $('#admin_' + cleanentriesdb.name + '_0_status'); + var numDays = Number($('#admin_entries_days').val()); + + if (isNaN(numDays) || (numDays < 1)) { + alert(translate('%1 is not a valid number', { params: [$('#admin_entries_days').val()] })); + if (callback) { callback(); } + return; + } + var endDate = moment().subtract(numDays, 'days'); + var dateStr = endDate.format('YYYY-MM-DD'); + + if (!client.hashauth.isAuthenticated()) { + alert(translate('Your device is not authenticated yet')); + if (callback) { + callback(); + } + return; + } + + $status.hide().text(translate('Deleting records ...')).fadeIn('slow'); + $.ajax({ + method: 'DELETE' + , url: '/api/v1/entries/?find[created_at][$lte]=' + dateStr + , headers: client.headers() + , success: function (retVal) { + $status.hide().text(translate('%1 records deleted',{ params: [retVal.n] })).fadeIn('slow'); + } + }).done(function success () { + if (callback) { callback(); } + }).fail(function fail() { + $status.hide().text(translate('Error')).fadeIn('slow'); + if (callback) { callback(); } + }); + +}; diff --git a/lib/admin_plugins/index.js b/lib/admin_plugins/index.js index eed60a943ad6..224054538d15 100644 --- a/lib/admin_plugins/index.js +++ b/lib/admin_plugins/index.js @@ -9,6 +9,7 @@ function init() { , require('./roles')() , require('./cleanstatusdb')() , require('./cleantreatmentsdb')() + , require('./cleanentriesdb')() , require('./futureitems')() ];