def check(self, instance): service_check_msg = None offset_threshold = instance.get('offset_threshold', DEFAULT_OFFSET_THRESHOLD) custom_tags = instance.get('tags', []) try: offset_threshold = int(offset_threshold) except (TypeError, ValueError): raise Exception('Must specify an integer value for offset_threshold. Configured value is %s' % repr(offset_threshold)) req_args = NTPUtil().args self.log.debug("Using ntp host: {0}".format(req_args['host'])) try: ntp_stats = ntplib.NTPClient().request(**req_args) except ntplib.NTPException: self.log.debug("Could not connect to NTP Server {0}".format( req_args['host'])) status = AgentCheck.UNKNOWN ntp_ts = None else: ntp_offset = ntp_stats.offset # Use the ntp server's timestamp for the time of the result in # case the agent host's clock is messed up. ntp_ts = ntp_stats.recv_time self.gauge('ntp.offset', ntp_offset, timestamp=ntp_ts, tags=custom_tags) if abs(ntp_offset) > offset_threshold: status = AgentCheck.CRITICAL service_check_msg = "Offset {0} secs higher than offset threshold ({1} secs)".format(ntp_offset, offset_threshold) else: status = AgentCheck.OK self.service_check('ntp.in_sync', status, timestamp=ntp_ts, message=service_check_msg, tags=custom_tags)
def get_ntp_info(): req_args = NTPUtil().args ntp_offset = ntplib.NTPClient().request(**req_args).offset if abs(ntp_offset) > NTP_OFFSET_THRESHOLD: ntp_styles = ['red', 'bold'] else: ntp_styles = [] return ntp_offset, ntp_styles
def test_ntp_global_settings(self): # Clear any existing ntp config NTPUtil._drop() config = { 'instances': [{ "host": "foo.com", "port": "bar", "version": 42, "timeout": 13.37 }], 'init_config': {} } agentConfig = { 'version': '0.1', 'api_key': 'toto', 'additional_checksd': '.', } # load this config in the ntp singleton ntp_util = NTPUtil(config) # default min collection interval for that check was 20sec check = load_check('ntp', config, agentConfig) check.run() self.assertEqual(ntp_util.args["host"], "foo.com") self.assertEqual(ntp_util.args["port"], "bar") self.assertEqual(ntp_util.args["version"], 42) self.assertEqual(ntp_util.args["timeout"], 13.37) # Clear the singleton to prepare for next config NTPUtil._drop() config = {'instances': [{}], 'init_config': {}} agentConfig = {'version': '0.1', 'api_key': 'toto'} # load the new config ntp_util = NTPUtil(config) # default min collection interval for that check was 20sec check = load_check('ntp', config, agentConfig) try: check.run() except Exception: pass self.assertTrue(ntp_util.args["host"].endswith("datadog.pool.ntp.org")) self.assertEqual(ntp_util.args["port"], "ntp") self.assertEqual(ntp_util.args["version"], 3) self.assertEqual(ntp_util.args["timeout"], 1.0) NTPUtil._drop()
def test_ntp_global_settings(self): # Clear any existing ntp config NTPUtil._drop() config = {'instances': [{ "host": "foo.com", "port": "bar", "version": 42, "timeout": 13.37}], 'init_config': {}} agentConfig = { 'version': '0.1', 'agent_key': 'toto' } # load this config in the ntp singleton ntp_util = NTPUtil(config) # default min collection interval for that check was 20sec check = load_check('ntp', config, agentConfig) check.run() self.assertEqual(ntp_util.args["host"], "foo.com") self.assertEqual(ntp_util.args["port"], "bar") self.assertEqual(ntp_util.args["version"], 42) self.assertEqual(ntp_util.args["timeout"], 13.37) # Clear the singleton to prepare for next config NTPUtil._drop() config = {'instances': [{}], 'init_config': {}} agentConfig = { 'version': '0.1', 'agent_key': 'toto' } # load the new config ntp_util = NTPUtil(config) # default min collection interval for that check was 20sec check = load_check('ntp', config, agentConfig) try: check.run() except Exception: pass self.assertTrue(ntp_util.args["host"].endswith("datadog.pool.ntp.org")) self.assertEqual(ntp_util.args["port"], "ntp") self.assertEqual(ntp_util.args["version"], 3) self.assertEqual(ntp_util.args["timeout"], 1.0) NTPUtil._drop()