Skip to content

Commit df14765

Browse files
authored
Merge pull request #48 from aws-solutions/fix/date_calculation
Remove the date_utils call to avoid incorrect termination of workspaces.
2 parents 6e5c576 + 3569ea0 commit df14765

File tree

4 files changed

+40
-9
lines changed

4 files changed

+40
-9
lines changed

source/workspaces_app/workspaces_app/__tests__/test_workspaces_helper.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
from ..utils import workspace_utils
1212
from botocore.stub import Stubber
1313
from dateutil.tz import tzutc
14+
from freezegun import freeze_time
15+
from ..utils import date_utils
1416

1517

1618
@pytest.fixture(scope='module')
@@ -596,23 +598,29 @@ def test_check_if_workspace_needs_to_be_terminated_returns_yes_is_dry_run_false(
596598
assert result == 'Yes'
597599

598600

601+
@freeze_time("2020-11-29 03:21:34")
599602
def test_check_if_workspace_used_for_selected_period_returns_false_if_timestamp_is_none():
600603
last_known_user_connection_timestamp = None
601-
result = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp)
604+
first_day_selected_month = date_utils.get_first_day_selected_month()
605+
result = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp, first_day_selected_month)
602606
assert result is False
603607

604608

609+
@freeze_time("2022-11-29 03:21:34")
605610
def test_check_if_workspace_used_for_selected_period_returns_false_if_timestamp_is_before_first_day():
606611
last_known_user_connection_timestamp = datetime.datetime.strptime('2021-01-10 19:35:15.524000+00:00',
607612
'%Y-%m-%d %H:%M:%S.%f+00:00')
608-
result = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp)
613+
first_day_selected_month = date_utils.get_first_day_selected_month()
614+
result = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp, first_day_selected_month)
609615
assert result is False
610616

611617

618+
@freeze_time("2020-11-29 03:21:34")
612619
def test_check_if_workspace_used_for_selected_period_returns_true_if_timestamp_is_first_day_selected_month():
613620
last_known_user_connection_timestamp = datetime.datetime.utcnow().today().replace(day=1, hour=0, minute=0, second=0,
614621
microsecond=0)
615-
result = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp)
622+
first_day_selected_month = date_utils.get_first_day_selected_month()
623+
result = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp, first_day_selected_month)
616624
assert result is True
617625

618626

@@ -1289,3 +1297,19 @@ def test_check_if_workspace_needs_to_be_terminated_returns_empty_string_for_last
12891297
result = workspace_helper.check_if_workspace_needs_to_be_terminated(workspace_id)
12901298
assert result == ''
12911299

1300+
1301+
@freeze_time('2023-03-31', auto_tick_seconds=86400)
1302+
def test_check_if_workspace_used_for_selected_period_returns_true_for_multi_day_processing():
1303+
1304+
first_day_selected_month = datetime.datetime(year=2023, month=3, day=1).date()
1305+
last_known_user_connection_timestamp = datetime.datetime.strptime('2023-03-20 19:35:15.524000+00:00', '%Y-%m-%d %H:%M:%S.%f+00:00')
1306+
result = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp, first_day_selected_month)
1307+
assert result is True
1308+
1309+
result1 = date_utils.get_first_day_selected_month()
1310+
result2 = date_utils.get_first_day_selected_month()
1311+
assert result2 == datetime.date(2023, 4, 1)
1312+
1313+
result = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp, first_day_selected_month)
1314+
assert result is True
1315+

source/workspaces_app/workspaces_app/utils/__tests__/test_date_utils.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,12 @@ def test_get_date_time_values_for_processing_returns_all_the_correct_values():
6868
"current_month_last_day": False,
6969
"date_today": '11/29/20',
7070
"date_for_s3_key": '2020/11/29/'
71-
}
71+
}
72+
73+
74+
@freeze_time("2020-05-31 23:00:00", auto_tick_seconds=86400)
75+
def test_get_first_day_selected_month_returns_first_day_selected_month_then_returns_next_month_date():
76+
result = date_utils.get_first_day_selected_month()
77+
assert result == datetime.date(2020, 5, 1)
78+
result = date_utils.get_first_day_selected_month()
79+
assert result == datetime.date(2020, 6, 1)

source/workspaces_app/workspaces_app/utils/workspace_utils.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import logging
77
import os
8-
from . import date_utils
98

109
TERMINATE_UNUSED_WORKSPACES = os.getenv('TerminateUnusedWorkspaces')
1110
RESOURCE_UNAVAILABLE = 'ResourceUnavailable'
@@ -21,7 +20,7 @@ def is_terminate_workspace_enabled():
2120
return TERMINATE_UNUSED_WORKSPACES == "Yes" or TERMINATE_UNUSED_WORKSPACES == "Dry Run"
2221

2322

24-
def check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp):
23+
def check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp, first_day_selected_month):
2524
"""
2625
This method returns a boolean value to indicate if the workspace was used in selected period
2726
:param: last_known_user_connection_timestamp: Last known connection timestamp
@@ -36,7 +35,6 @@ def check_if_workspace_used_for_selected_period(last_known_user_connection_times
3635
return True
3736
else:
3837
log.debug("Last know timestamp value is not None. Processing further.")
39-
first_day_selected_month = date_utils.get_first_day_selected_month()
4038
log.debug(f'First day for selected period is {first_day_selected_month}')
4139
last_known_user_connection_day = last_known_user_connection_timestamp.date()
4240
return last_known_user_connection_day >= first_day_selected_month

source/workspaces_app/workspaces_app/workspaces_helper.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,15 @@ def get_termination_status(self, workspace_id, billable_time, tags):
181181
self.settings.get('dateTimeValues').get('current_month_last_day') or
182182
(self.settings.get('testEndOfMonth'))
183183
):
184-
log.debug('Today is the last day of the month or the TestEndOfMonth parameter is set to yes.')
184+
log.debug(f"The value for current_month_last_day is {self.settings.get('dateTimeValues').get('current_month_last_day')}")
185+
log.debug(f"The value for testEndOfMonth is {(self.settings.get('testEndOfMonth'))}")
185186
log.debug(f'Processing further for workspace id {workspace_id}')
186187
last_known_user_connection_timestamp = self.get_last_known_user_connection_timestamp(workspace_id)
187188
log.debug(f'Last known user connection time stamp is {last_known_user_connection_timestamp}')
188189
workspace_available_on_first_day_of_selected_month = self.check_if_workspace_available_on_first_day_selected_month(workspace_id)
189190
log.debug((f'The value for workspace available on first day of selected period is '
190191
f'{workspace_available_on_first_day_of_selected_month}'))
191-
workspace_used_in_selected_period = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp)
192+
workspace_used_in_selected_period = workspace_utils.check_if_workspace_used_for_selected_period(last_known_user_connection_timestamp, self.settings.get('dateTimeValues').get('first_day_selected_month'))
192193
log.debug(f'The value for workspace used in selected period is {workspace_used_in_selected_period}')
193194
if workspace_available_on_first_day_of_selected_month and not workspace_used_in_selected_period:
194195
workspace_terminated = self.check_if_workspace_needs_to_be_terminated(workspace_id)

0 commit comments

Comments
 (0)