From 595ae01362230a5c1e76766f9be56d2c1f2908f5 Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Mon, 29 Nov 2021 15:11:19 +0100 Subject: [PATCH] TMSS-671: added fixed_time_scheduling_enabled setting, default True --- .../scheduling/lib/dynamic_scheduling.py | 6 ++-- .../src/tmss/tmssapp/models/specification.py | 1 + SAS/TMSS/backend/src/tmss/tmssapp/populate.py | 3 +- .../authenticate/permission.stack.handler.js | 3 +- .../tmss_webapp/src/services/util.service.js | 31 ++++++++++++++++++- 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/SAS/TMSS/backend/services/scheduling/lib/dynamic_scheduling.py b/SAS/TMSS/backend/services/scheduling/lib/dynamic_scheduling.py index ee4f26d905e..ca8b27b0ae1 100644 --- a/SAS/TMSS/backend/services/scheduling/lib/dynamic_scheduling.py +++ b/SAS/TMSS/backend/services/scheduling/lib/dynamic_scheduling.py @@ -407,8 +407,10 @@ class TMSSDynamicSchedulingMessageHandler(TMSSEventMessageHandler): if self._do_schedule_event.wait(timeout=10): self._do_schedule_event.clear() try: - # always schedule fixed_time scheduling_units, even if dynamic scheduling is disabled - schedule_fixed_time_scheduling_units() + if models.Setting.objects.get(name=models.SystemSettingFlag.Choices.FIXED_TIME_SCHEDULING_ENABLED.value).value: + schedule_fixed_time_scheduling_units() + else: + logger.warning("Skipping update of fixed_time schedule because the setting %s=%s", models.SystemSettingFlag.Choices.FIXED_TIME_SCHEDULING_ENABLED.value, models.Setting.objects.get(name=models.SystemSettingFlag.Choices.DYNAMIC_SCHEDULING_ENABLED.value).value) if models.Setting.objects.get(name=models.SystemSettingFlag.Choices.DYNAMIC_SCHEDULING_ENABLED.value).value: do_dynamic_schedule() diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py index f2a06f32ccb..e5a6ad4eae1 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/models/specification.py @@ -95,6 +95,7 @@ class SystemSettingFlag(AbstractChoice): """Defines the model and predefined list of possible Flags to be used in Setting. The items in the Choises class below are automagically populated into the database via a data migration.""" class Choices(Enum): + FIXED_TIME_SCHEDULING_ENABLED = "fixed_time_scheduling_enabled" DYNAMIC_SCHEDULING_ENABLED = "dynamic_scheduling_enabled" diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/populate.py b/SAS/TMSS/backend/src/tmss/tmssapp/populate.py index ce6817c8b8f..7132c6c62c3 100644 --- a/SAS/TMSS/backend/src/tmss/tmssapp/populate.py +++ b/SAS/TMSS/backend/src/tmss/tmssapp/populate.py @@ -233,7 +233,8 @@ def populate_subtask_allowed_state_transitions_extra(apps, schema_editor): ]) def populate_settings(apps, schema_editor): - Setting.objects.create(name=SystemSettingFlag.objects.get(value='dynamic_scheduling_enabled'), value=isDevelopmentEnvironment()) + Setting.objects.create(name=SystemSettingFlag.objects.get(value=SystemSettingFlag.Choices.DYNAMIC_SCHEDULING_ENABLED.value), value=isDevelopmentEnvironment()) + Setting.objects.create(name=SystemSettingFlag.objects.get(value=SystemSettingFlag.Choices.FIXED_TIME_SCHEDULING_ENABLED.value), value=True) def populate_test_data(): """ diff --git a/SAS/TMSS/frontend/tmss_webapp/src/authenticate/permission.stack.handler.js b/SAS/TMSS/frontend/tmss_webapp/src/authenticate/permission.stack.handler.js index 79d7486e976..1a6619a6b52 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/authenticate/permission.stack.handler.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/authenticate/permission.stack.handler.js @@ -46,6 +46,7 @@ const PermissionStackUtil = { task_relation_draft: 'task_relation_draft', task_relation_blueprint: 'task_relation_blueprint', dynamicScheduler: 'setting/dynamic_scheduling_enabled', + fixedTimeScheduler: 'setting/fixed_time_scheduling_enabled', systemevent: 'system_event', } const modules = Object.keys(module_url); @@ -133,7 +134,7 @@ const PermissionStackUtil = { delete: allowedPermission?(_.includes(allowedPermission, 'DELETE')):false }; } - else if (module === 'dynamicScheduler') { + else if (module === 'dynamicScheduler' || module === 'fixedTimeScheduler') { permissionStack[module] = { setting: allowedPermission?(_.includes(allowedPermission, 'PATCH')):false, }; diff --git a/SAS/TMSS/frontend/tmss_webapp/src/services/util.service.js b/SAS/TMSS/frontend/tmss_webapp/src/services/util.service.js index 4529a11408a..5bd4f7b13be 100644 --- a/SAS/TMSS/frontend/tmss_webapp/src/services/util.service.js +++ b/SAS/TMSS/frontend/tmss_webapp/src/services/util.service.js @@ -244,6 +244,20 @@ const UtilService = { return null; } }, + /** + * Get FixedTime Scheduling On/Off Status + * @returns JSON object + */ + getFixedTimeSchedulerStatus: async function() { + try { + const url = `/api/setting/fixed_time_scheduling_enabled`; + const response = await axios.get(url); + return response.data; + } catch (error) { + console.error('[getFixedTimeSchedulerStatus]',"Mistake", error); + return null; + } + }, /** * Update Switch On/Off status of Dynamic Scheduling * @param {Object} JSON object @@ -258,7 +272,22 @@ const UtilService = { console.error('[updateDynamicSchedulerStatus]',"Mistake", error); return null } - }, + }, + /** + * Update Switch On/Off status of FixedTime Scheduling + * @param {Object} JSON object + * @returns + */ + updateFixedTimeSchedulerStatus: async function (response) { + try { + const url = `/api/setting/fixed_time_scheduling_enabled`; + response = await axios.patch(url, response); + return response.data; + } catch (error) { + console.error('[updateFixedTimeSchedulerStatus]',"Mistake", error); + return null + } + }, } export default UtilService; \ No newline at end of file -- GitLab