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')()
];