From dd45f74d30514bda59d5bef689cdb1f38d0875f5 Mon Sep 17 00:00:00 2001 From: Benjamin Kane Date: Wed, 27 Oct 2021 09:04:50 -0700 Subject: [PATCH 1/2] Add customizable NS1 monitor tcp timout settings --- octodns/provider/ns1.py | 16 ++++++++++++++-- tests/test_octodns_provider_ns1.py | 16 +++++++++++++++- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/octodns/provider/ns1.py b/octodns/provider/ns1.py index f743adf..c48889b 100644 --- a/octodns/provider/ns1.py +++ b/octodns/provider/ns1.py @@ -1053,6 +1053,16 @@ class Ns1Provider(BaseProvider): return monitor_id, self._feed_create(monitor) + def _healthcheck_tcp_connect_timeout(self, record): + return record._octodns.get('ns1', {}) \ + .get('healthcheck', {}) \ + .get('tcp_connect_timeout', 2000) + + def _healthcheck_tcp_response_timeout(self, record): + return record._octodns.get('ns1', {}) \ + .get('healthcheck', {}) \ + .get('tcp_response_timeout', 10000) + def _monitor_gen(self, record, value): host = record.fqdn[:-1] _type = record._type @@ -1064,10 +1074,12 @@ class Ns1Provider(BaseProvider): ret = { 'active': True, 'config': { - 'connect_timeout': 2000, + 'connect_timeout': + self._healthcheck_tcp_connect_timeout(record), 'host': value, 'port': record.healthcheck_port, - 'response_timeout': 10000, + 'response_timeout': + self._healthcheck_tcp_response_timeout(record), 'ssl': record.healthcheck_protocol == 'HTTPS', }, 'frequency': 60, diff --git a/tests/test_octodns_provider_ns1.py b/tests/test_octodns_provider_ns1.py index fec01fd..814b370 100644 --- a/tests/test_octodns_provider_ns1.py +++ b/tests/test_octodns_provider_ns1.py @@ -599,7 +599,13 @@ class TestNs1ProviderDynamic(TestCase): 'path': '/_ping', 'port': 80, 'protocol': 'HTTP', - } + }, + 'ns1': { + 'healthcheck': { + 'tcp_connect_timeout': 5000, + 'tcp_response_timeout': 6000, + }, + }, }, 'ttl': 32, 'type': 'A', @@ -919,6 +925,14 @@ class TestNs1ProviderDynamic(TestCase): # No http response expected self.assertFalse('rules' in monitor) + record._octodns['ns1']['healthcheck']['tcp_connect_timeout'] = 1234 + monitor = provider._monitor_gen(record, value) + self.assertEquals(1234, monitor['config']['connect_timeout']) + + record._octodns['ns1']['healthcheck']['tcp_response_timeout'] = 5678 + monitor = provider._monitor_gen(record, value) + self.assertEquals(5678, monitor['config']['response_timeout']) + def test_monitor_gen_AAAA(self): provider = Ns1Provider('test', 'api-key') From de76ee0fd628b7b5e1537a16a5c143cd497ed225 Mon Sep 17 00:00:00 2001 From: Benjamin Kane Date: Wed, 27 Oct 2021 15:28:42 -0700 Subject: [PATCH 2/2] Rename timeouts and make the default seconds. Add docs. --- docs/dynamic_records.md | 17 +++++++++++++++++ octodns/provider/ns1.py | 16 ++++++++++------ tests/test_octodns_provider_ns1.py | 12 ++++++------ 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/docs/dynamic_records.md b/docs/dynamic_records.md index f2b59a9..69338db 100644 --- a/docs/dynamic_records.md +++ b/docs/dynamic_records.md @@ -198,3 +198,20 @@ Sonar check regions (sonar_regions) possible values: - EUROPE sonar_type: TCP ``` + +#### NS1 Health Check Options + +| Key | Description | Default | +|--|--|--| +| connect_timeout | Timeout (in seconds) before we give up trying to connect | 2 | +| response_timeout | Timeout (in seconds) after connecting to wait for output. | 10 | + +```yaml + +--- + octodns: + ns1: + healthcheck: + connect_timeout: 2 + response_timeout: 10 +``` \ No newline at end of file diff --git a/octodns/provider/ns1.py b/octodns/provider/ns1.py index c48889b..63cf227 100644 --- a/octodns/provider/ns1.py +++ b/octodns/provider/ns1.py @@ -1053,15 +1053,15 @@ class Ns1Provider(BaseProvider): return monitor_id, self._feed_create(monitor) - def _healthcheck_tcp_connect_timeout(self, record): + def _healthcheck_connect_timeout(self, record): return record._octodns.get('ns1', {}) \ .get('healthcheck', {}) \ - .get('tcp_connect_timeout', 2000) + .get('connect_timeout', 2) - def _healthcheck_tcp_response_timeout(self, record): + def _healthcheck_response_timeout(self, record): return record._octodns.get('ns1', {}) \ .get('healthcheck', {}) \ - .get('tcp_response_timeout', 10000) + .get('response_timeout', 10) def _monitor_gen(self, record, value): host = record.fqdn[:-1] @@ -1075,11 +1075,15 @@ class Ns1Provider(BaseProvider): 'active': True, 'config': { 'connect_timeout': - self._healthcheck_tcp_connect_timeout(record), + # TCP monitors use milliseconds, so convert from + # seconds to milliseconds + self._healthcheck_connect_timeout(record) * 1000, 'host': value, 'port': record.healthcheck_port, 'response_timeout': - self._healthcheck_tcp_response_timeout(record), + # TCP monitors use milliseconds, so convert from + # seconds to milliseconds + self._healthcheck_response_timeout(record) * 1000, 'ssl': record.healthcheck_protocol == 'HTTPS', }, 'frequency': 60, diff --git a/tests/test_octodns_provider_ns1.py b/tests/test_octodns_provider_ns1.py index 814b370..b7753d9 100644 --- a/tests/test_octodns_provider_ns1.py +++ b/tests/test_octodns_provider_ns1.py @@ -602,8 +602,8 @@ class TestNs1ProviderDynamic(TestCase): }, 'ns1': { 'healthcheck': { - 'tcp_connect_timeout': 5000, - 'tcp_response_timeout': 6000, + 'connect_timeout': 5, + 'response_timeout': 6, }, }, }, @@ -925,13 +925,13 @@ class TestNs1ProviderDynamic(TestCase): # No http response expected self.assertFalse('rules' in monitor) - record._octodns['ns1']['healthcheck']['tcp_connect_timeout'] = 1234 + record._octodns['ns1']['healthcheck']['connect_timeout'] = 1 monitor = provider._monitor_gen(record, value) - self.assertEquals(1234, monitor['config']['connect_timeout']) + self.assertEquals(1000, monitor['config']['connect_timeout']) - record._octodns['ns1']['healthcheck']['tcp_response_timeout'] = 5678 + record._octodns['ns1']['healthcheck']['response_timeout'] = 2 monitor = provider._monitor_gen(record, value) - self.assertEquals(5678, monitor['config']['response_timeout']) + self.assertEquals(2000, monitor['config']['response_timeout']) def test_monitor_gen_AAAA(self): provider = Ns1Provider('test', 'api-key')