Skip to content

Commit

Permalink
feat: implement healthcheck start_interval #3157
Browse files Browse the repository at this point in the history
Signed-off-by: Khushiyant <[email protected]>
  • Loading branch information
Khushiyant committed Feb 8, 2024
1 parent bd164f9 commit d584562
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
5 changes: 5 additions & 0 deletions docker/types/containers.py
Original file line number Diff line number Diff line change
Expand Up @@ -703,6 +703,11 @@ def __init__(
'healthcheck start period was introduced in API '
'version 1.29'
)

if version_lt(version, '1.44') and 'StartInterval' in healthcheck:
raise errors.InvalidVersion(
'healthcheck start interval was introduced in API version 1.44'
)

if isinstance(command, str):
command = split_command(command)
Expand Down
14 changes: 13 additions & 1 deletion docker/types/healthcheck.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ class Healthcheck(DictType):
start_period (int): Start period for the container to
initialize before starting health-retries countdown in
nanoseconds. It should be 0 or at least 1000000 (1 ms).
start_interval (int): It is interval to be used by healthchecks during the start period in
nanoseconds. It should be 0 or at least 1000000 (1 ms).
"""
def __init__(self, **kwargs):
test = kwargs.get('test', kwargs.get('Test'))
Expand All @@ -36,13 +38,15 @@ def __init__(self, **kwargs):
timeout = kwargs.get('timeout', kwargs.get('Timeout'))
retries = kwargs.get('retries', kwargs.get('Retries'))
start_period = kwargs.get('start_period', kwargs.get('StartPeriod'))
start_interval = kwargs.get('start_interval', kwargs.get('StartInterval'))

super().__init__({
'Test': test,
'Interval': interval,
'Timeout': timeout,
'Retries': retries,
'StartPeriod': start_period
'StartPeriod': start_period,
'StartInterval': start_interval
})

@property
Expand Down Expand Up @@ -86,3 +90,11 @@ def start_period(self):
@start_period.setter
def start_period(self, value):
self['StartPeriod'] = value

@property
def start_interval(self):
return self['StartInterval']

@start_interval.setter
def start_interval(self, value):
self['StartInterval'] = value
17 changes: 17 additions & 0 deletions tests/integration/api_healthcheck_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,20 @@ def test_healthcheck_start_period(self):
self.tmp_containers.append(container)
self.client.start(container)
wait_on_health_status(self.client, container, "healthy")

@helpers.requires_api_version('1.44')
def test_healthcheck_start_interval(self):
container = self.client.create_container(
TEST_IMG, 'top', healthcheck={
'test': "echo 'hello docker'",
'interval': 1 * SECOND,
'timeout': 1 * SECOND,
'retries': 1,
'start_interval': 1 * SECOND
}
)

self.tmp_containers.append(container)
self.client.start(container)
wait_on_health_status(self.client, container, "healthy")

0 comments on commit d584562

Please sign in to comment.