From 763f91fd4ca6b09524c75e160893fbed82ba5f7a Mon Sep 17 00:00:00 2001 From: Benjamin Gamard Date: Sun, 22 Apr 2018 11:12:09 +0200 Subject: [PATCH] Closes #220: background tasks count --- .../docs/core/model/context/AppContext.java | 15 ++++++++++- .../docs/rest/resource/AppResource.java | 3 +++ docs-web/src/main/webapp/src/app/docs/app.js | 8 +++--- .../docs/controller/settings/SettingsLog.js | 12 --------- .../controller/settings/SettingsMonitoring.js | 16 ++++++++++++ docs-web/src/main/webapp/src/index.html | 2 +- docs-web/src/main/webapp/src/locale/en.json | 15 ++++++----- .../webapp/src/partial/docs/settings.html | 2 +- .../webapp/src/partial/docs/settings.log.html | 18 ------------- .../src/partial/docs/settings.monitoring.html | 25 +++++++++++++++++++ .../sismics/docs/rest/TestAppResource.java | 1 + 11 files changed, 74 insertions(+), 43 deletions(-) delete mode 100644 docs-web/src/main/webapp/src/app/docs/controller/settings/SettingsLog.js create mode 100644 docs-web/src/main/webapp/src/app/docs/controller/settings/SettingsMonitoring.js delete mode 100644 docs-web/src/main/webapp/src/partial/docs/settings.log.html create mode 100644 docs-web/src/main/webapp/src/partial/docs/settings.monitoring.html diff --git a/docs-core/src/main/java/com/sismics/docs/core/model/context/AppContext.java b/docs-core/src/main/java/com/sismics/docs/core/model/context/AppContext.java index 73184c01..1193530c 100644 --- a/docs-core/src/main/java/com/sismics/docs/core/model/context/AppContext.java +++ b/docs-core/src/main/java/com/sismics/docs/core/model/context/AppContext.java @@ -68,7 +68,7 @@ public class AppContext { /** * Asynchronous executors. */ - private List asyncExecutorList; + private List asyncExecutorList; /** * Start the application context. @@ -181,6 +181,19 @@ public class AppContext { } } + /** + * Return the current number of queued tasks waiting to be processed. + * + * @return Number of queued tasks + */ + public int getQueuedTaskCount() { + int queueSize = 0; + for (ThreadPoolExecutor executor : asyncExecutorList) { + queueSize += executor.getQueue().size(); + } + return queueSize; + } + public EventBus getAsyncEventBus() { return asyncEventBus; } diff --git a/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java b/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java index 5e8568ca..fd0f1491 100644 --- a/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java +++ b/docs-web/src/main/java/com/sismics/docs/rest/resource/AppResource.java @@ -66,6 +66,8 @@ public class AppResource extends BaseResource { * @apiSuccess {String} current_version API current version * @apiSuccess {String} min_version API minimum version * @apiSuccess {Boolean} guest_login True if guest login is enabled + * @apiSuccess {String} default_language Default platform language + * @apiSuccess {Number} queued_tasks Number of queued tasks waiting to be processed * @apiSuccess {String} total_memory Allocated JVM memory (in bytes) * @apiSuccess {String} free_memory Free JVM memory (in bytes) * @apiSuccess {String} document_count Number of documents @@ -97,6 +99,7 @@ public class AppResource extends BaseResource { .add("min_version", minVersion) .add("guest_login", guestLogin) .add("default_language", defaultLanguage) + .add("queued_tasks", AppContext.getInstance().getQueuedTaskCount()) .add("total_memory", Runtime.getRuntime().totalMemory()) .add("free_memory", Runtime.getRuntime().freeMemory()) .add("document_count", documentDao.getDocumentCount()) diff --git a/docs-web/src/main/webapp/src/app/docs/app.js b/docs-web/src/main/webapp/src/app/docs/app.js index 63638fbf..7b9e26da 100644 --- a/docs-web/src/main/webapp/src/app/docs/app.js +++ b/docs-web/src/main/webapp/src/app/docs/app.js @@ -118,12 +118,12 @@ angular.module('docs', } } }) - .state('settings.log', { - url: '/log', + .state('settings.monitoring', { + url: '/monitoring', views: { 'settings': { - templateUrl: 'partial/docs/settings.log.html', - controller: 'SettingsLog' + templateUrl: 'partial/docs/settings.monitoring.html', + controller: 'SettingsMonitoring' } } }) diff --git a/docs-web/src/main/webapp/src/app/docs/controller/settings/SettingsLog.js b/docs-web/src/main/webapp/src/app/docs/controller/settings/SettingsLog.js deleted file mode 100644 index 41c72e8a..00000000 --- a/docs-web/src/main/webapp/src/app/docs/controller/settings/SettingsLog.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -/** - * Settings logs controller. - */ -angular.module('docs').controller('SettingsLog', function($scope, Restangular) { - Restangular.one('app/log').get({ - limit: 100 - }).then(function(data) { - $scope.logs = data.logs; - }); -}); \ No newline at end of file diff --git a/docs-web/src/main/webapp/src/app/docs/controller/settings/SettingsMonitoring.js b/docs-web/src/main/webapp/src/app/docs/controller/settings/SettingsMonitoring.js new file mode 100644 index 00000000..da6257a5 --- /dev/null +++ b/docs-web/src/main/webapp/src/app/docs/controller/settings/SettingsMonitoring.js @@ -0,0 +1,16 @@ +'use strict'; + +/** + * Settings monitoring controller. + */ +angular.module('docs').controller('SettingsMonitoring', function($scope, Restangular) { + Restangular.one('app').get().then(function(data) { + $scope.app = data; + }); + + Restangular.one('app/log').get({ + limit: 100 + }).then(function(data) { + $scope.logs = data.logs; + }); +}); \ No newline at end of file diff --git a/docs-web/src/main/webapp/src/index.html b/docs-web/src/main/webapp/src/index.html index 223a7a6a..4ae97981 100644 --- a/docs-web/src/main/webapp/src/index.html +++ b/docs-web/src/main/webapp/src/index.html @@ -82,7 +82,7 @@ - + diff --git a/docs-web/src/main/webapp/src/locale/en.json b/docs-web/src/main/webapp/src/locale/en.json index 870583d4..28b3621d 100644 --- a/docs-web/src/main/webapp/src/locale/en.json +++ b/docs-web/src/main/webapp/src/locale/en.json @@ -262,7 +262,7 @@ "menu_vocabularies": "Vocabularies", "menu_configuration": "Configuration", "menu_inbox": "Inbox scanning", - "menu_server_logs": "Server logs", + "menu_monitoring": "Monitoring", "user": { "title": "Users management", "add_user": "Add a user", @@ -393,11 +393,14 @@ "test_success": "The connection to the inbox is successful ({{ count }} unread message{{ count > 1 ? 's' : '' }})", "test_fail": "An error occurred while connecting to the inbox, please check the parameters" }, - "log": { - "title": "Server logs", - "date": "Date", - "tag": "Tag", - "message": "Message" + "monitoring": { + "background_tasks": "Background tasks", + "queued_tasks": "There is currently {{ count }} queued tasks.", + "queued_tasks_explain": "File processing, thumbnail creation, index update, optical character recognition are background tasks. A large amount of unprocessed tasks will result in incomplete search results.", + "server_logs": "Server logs", + "log_date": "Date", + "log_tag": "Tag", + "log_message": "Message" }, "session": { "title": "Opened sessions", diff --git a/docs-web/src/main/webapp/src/partial/docs/settings.html b/docs-web/src/main/webapp/src/partial/docs/settings.html index 8ae18fd6..cf80bd39 100644 --- a/docs-web/src/main/webapp/src/partial/docs/settings.html +++ b/docs-web/src/main/webapp/src/partial/docs/settings.html @@ -19,7 +19,7 @@ {{ 'settings.menu_inbox' | translate }} {{ 'settings.menu_vocabularies' | translate }} {{ 'settings.menu_configuration' | translate }} - {{ 'settings.menu_server_logs' | translate }} + {{ 'settings.menu_monitoring' | translate }} diff --git a/docs-web/src/main/webapp/src/partial/docs/settings.log.html b/docs-web/src/main/webapp/src/partial/docs/settings.log.html deleted file mode 100644 index a39ac5c5..00000000 --- a/docs-web/src/main/webapp/src/partial/docs/settings.log.html +++ /dev/null @@ -1,18 +0,0 @@ -

- - - - - - - - - - - - - - - -
{{ 'settings.log.date' | translate }}{{ 'settings.log.tag' | translate }}{{ 'settings.log.message' | translate }}
{{ log.date | date: dateTimeFormat }}{{ log.tag }}{{ log.message }}
diff --git a/docs-web/src/main/webapp/src/partial/docs/settings.monitoring.html b/docs-web/src/main/webapp/src/partial/docs/settings.monitoring.html new file mode 100644 index 00000000..81f4e7bf --- /dev/null +++ b/docs-web/src/main/webapp/src/partial/docs/settings.monitoring.html @@ -0,0 +1,25 @@ +

+

+ {{ 'settings.monitoring.queued_tasks' | translate: { count: app.queued_tasks } }} + + +

+

{{ 'settings.monitoring.queued_tasks_explain' | translate }}

+

+ + + + + + + + + + + + + + + +
{{ 'settings.monitoring.log_date' | translate }}{{ 'settings.monitoring.log_tag' | translate }}{{ 'settings.monitoring.log_message' | translate }}
{{ log.date | date: dateTimeFormat }}{{ log.tag }}{{ log.message }}
diff --git a/docs-web/src/test/java/com/sismics/docs/rest/TestAppResource.java b/docs-web/src/test/java/com/sismics/docs/rest/TestAppResource.java index 6da347fe..b4c72fa6 100644 --- a/docs-web/src/test/java/com/sismics/docs/rest/TestAppResource.java +++ b/docs-web/src/test/java/com/sismics/docs/rest/TestAppResource.java @@ -39,6 +39,7 @@ public class TestAppResource extends BaseJerseyTest { Assert.assertTrue(freeMemory > 0); Long totalMemory = json.getJsonNumber("total_memory").longValue(); Assert.assertTrue(totalMemory > 0 && totalMemory > freeMemory); + Assert.assertEquals(0, json.getJsonNumber("queued_tasks").intValue()); Assert.assertFalse(json.getBoolean("guest_login")); Assert.assertEquals("eng", json.getString("default_language")); Assert.assertTrue(json.containsKey("global_storage_current"));