def clock_state(): """ Determine the state of the system clock and return a hash of information conforming to the definition of a SystemClockStatus object as described in the JSON dictionary. time - Current system time as an ISO 8601 string synchronized - Whether or not the clock is synchronized to an outside source. source - The source of synchronization. Currently, the only valid value is "ntp." Not provided if not synchronized. reference - A human-readable string describing the source. Not provided if not synchronized. offset - A float indicating the estimated clock offset. Not provided if not synchronized. error - """ adjtime = ntp_adjtime() system_synchronized = adjtime.synchronized # Format the local time with offset as ISO 8601. Python's # strftime() only does "-0400" format; we need "-04:00". utc = datetime.datetime.utcnow() local_tz = tzlocal.get_localzone() time_here = pytz.utc.localize(utc).astimezone(local_tz) raw_offset = time_here.strftime("%z") if len(raw_offset): offset = raw_offset[:3] + ":" + raw_offset[-2:] else: offset = "" result = { "time": time_here.strftime("%Y-%m-%dT%H:%M:%S.%f") + offset, "synchronized": system_synchronized } if system_synchronized: # Assume NTP for the time being try: ntp = ntplib.NTPClient().request("127.0.0.1") result["offset"] = ntp.offset result["source"] = "ntp" result["reference"] = "%s from %s" % (ntplib.stratum_to_text( ntp.stratum), ntplib.ref_id_to_text(ntp.ref_id)) except Exception as ex: result["synchronized"] = False result["error"] = str(ex) return result
def clock_state(): """ Determine the state of the system clock and return a hash of information conforming to the definition of a SystemClockStatus object as described in the JSON dictionary. time - Current system time as an ISO 8601 string synchronized - Whether or not the clock is synchronized to an outside source. source - The source of synchronization. Currently, the only valid value is "ntp." Not provided if not synchronized. reference - A human-readable string describing the source. Not provided if not synchronized. offset - A float indicating the estimated clock offset. Not provided if not synchronized. error - """ adjtime = ntp_adjtime() system_synchronized = adjtime.synchronized # Format the local time with offset as ISO 8601. Python's # strftime() only does "-0400" format; we need "-04:00". utc = datetime.datetime.utcnow() local_tz = tzlocal.get_localzone() time_here = pytz.utc.localize(utc).astimezone(local_tz) raw_offset = time_here.strftime("%z") if len(raw_offset): offset = raw_offset[:3] + ":" + raw_offset[-2:] else: offset = "" result = {"time": time_here.strftime("%Y-%m-%dT%H:%M:%S.%f") + offset, "synchronized": system_synchronized} if system_synchronized: # Assume NTP for the time being try: ntp = ntplib.NTPClient().request("127.0.0.1") result["offset"] = ntp.offset result["source"] = "ntp" result["reference"] = "%s from %s" % ( ntplib.stratum_to_text(ntp.stratum), ntplib.ref_id_to_text(ntp.ref_id), ) except Exception as ex: result["error"] = str(ex) return result
def ntp_logging(): ''' Compute a timestamp using NIST Internet Time Servers as an additional level of assurance for database. This function is called by search function or can be called via XML or JSON remote procedure calls. Example for XMLRPC: >>> from xmlrpclib import ServerProxy >>> s = ServerProxy('http://ml-lab.bioinformatics.org/init/plugin_notalogger/call/xmlrpc') >>> s.ntp_logging() ''' ntp_pool = ['asia.pool.ntp.org', 'europe.pool.ntp.org', 'oceania.pool.ntp.org', 'north-america.pool.ntp.org', 'south-america.pool.ntp.org', 'africa.pool.ntp.org'] client = ntplib.NTPClient() server = random.choice(ntp_pool) response = client.request(server, version=3) try: results = ['Network time server: ' + server, 'Offset : %f' % response.offset, 'Stratum : %s (%d)' % (ntplib.stratum_to_text(response.stratum), response.stratum), 'Precision : %d' % response.precision, 'Root delay : %f ' % response.root_delay, 'Root dispersion : %f' % response.root_dispersion, 'Delay : %f' % response.delay, 'Leap indicator : %s (%d)' % (ntplib.leap_to_text(response.leap), response.leap), 'Poll : %d' % response.poll, 'Mode : %s (%d)' % (ntplib.mode_to_text(response.mode), response.mode), 'Reference clock identifier : ' + \ ntplib.ref_id_to_text(response.ref_id, response.stratum), 'Original timestamp : ' + time.ctime(response.orig_time), 'Receive timestamp : ' + time.ctime(response.recv_time), 'Transmit timestamp : ' + time.ctime(response.tx_time), 'Destination timestamp : ' + time.ctime(response.dest_time)] results = ' | '.join(results) except: results = 'Failure to connect to network time server or there is \ an internet error. Please try again later.' notalogger_db.logger.insert(notarizecode='', name='', pidentifier='', email='', usage='NTP pool server time check', comments=results, datetimeserver=str(server), seconds_since_epoch=str(time.time())) notalogger_db.commit()
def ntp_stamp(): if session.username == None: redirect(URL(r=request, f='../account/log_in')) form = FORM( TABLE( TR('Network Time Servers: ', SELECT('asia.pool.ntp.org', 'europe.pool.ntp.org', 'oceania.pool.ntp.org', 'north-america.pool.ntp.org', 'south-america.pool.ntp.org', 'africa-america.pool.ntp.org', _name='server')), TR(INPUT(_type='submit', _value='Stamp')))) if form.accepts(request.vars, session): from time import ctime import ntplib client = ntplib.NTPClient() try: response = client.request(form.vars.server, version=3) results = ['Network time server: ' + form.vars.server, 'Offset : %f' % response.offset, 'Stratum : %s (%d)' % (ntplib.stratum_to_text(response.stratum), response.stratum), 'Precision : %d' % response.precision, 'Root delay : %f ' % response.root_delay, 'Root dispersion : %f' % response.root_dispersion, 'Delay : %f' % response.delay, 'Leap indicator : %s (%d)' % (ntplib.leap_to_text(response.leap), response.leap), 'Poll : %d' % response.poll, 'Mode : %s (%d)' % (ntplib.mode_to_text(response.mode), response.mode), 'Reference clock identifier : ' + \ ntplib.ref_id_to_text(response.ref_id, response.stratum), 'Original timestamp : ' + ctime(response.orig_time), 'Receive timestamp : ' + ctime(response.recv_time), 'Transmit timestamp : ' + ctime(response.tx_time), 'Destination timestamp : ' + ctime(response.dest_time)] db.log.insert(event='NTP timestamp. ' + ' | '.join(results), user=session.username) db.user_event.insert(event='NTP timestamp. ' + ' | '.join(results), user=session.username) db.entry_hash.insert(eid='NTP', edatetime='NTP', etitle='NTP', ehash='NTP timestamp. ' + ' | '.join(results)) db.comment_hash.insert(cid='NTP', cdatetime='NTP', eid='NTP', chash='NTP timestamp. ' + ' | '.join(results)) except: results = 'Failure to connect to network time server or there is \ an internet error. Please try again later.' session.result = results redirect(URL(r=request, f='ntp_stamp_output')) return dict(form=form)
def stats(): response = get_data() return { "time": asctime(gmtime(response.tx_time)), "offset": response.offset, "leap": ntplib.leap_to_text(response.leap), "delay": response.root_delay, "ref": ntplib.ref_id_to_text(response.ref_id), "stratum": ntplib.stratum_to_text(response.stratum), "timestamp": response.tx_time }
def test_helpers(self): """Helper methods tests.""" client = ntplib.NTPClient() time.sleep(self.POLL_DELAY) info = client.request(self.NTP_SERVER) self.assertEqual(int(info.tx_time), ntplib.ntp_to_system_time( ntplib.system_to_ntp_time(int(info.tx_time)))) self.assertTrue(isinstance(ntplib.leap_to_text(info.leap), str)) self.assertTrue(isinstance(ntplib.mode_to_text(info.mode), str)) self.assertTrue(isinstance(ntplib.stratum_to_text(info.stratum), str)) self.assertTrue(isinstance(ntplib.ref_id_to_text(info.ref_id, info.stratum), str))
def test_helpers(self): """Helper methods tests.""" client = ntplib.NTPClient() time.sleep(self.POLL_DELAY) info = client.request(self.NTP_SERVER) self.assertEqual( int(info.tx_time), ntplib.ntp_to_system_time( ntplib.system_to_ntp_time(int(info.tx_time)))) self.assertTrue(isinstance(ntplib.leap_to_text(info.leap), str)) self.assertTrue(isinstance(ntplib.mode_to_text(info.mode), str)) self.assertTrue(isinstance(ntplib.stratum_to_text(info.stratum), str)) self.assertTrue( isinstance(ntplib.ref_id_to_text(info.ref_id, info.stratum), str))
def print_response(response): print ("Version number : %d" % response.version) print ("Offset : %f" % response.offset) print ("Stratum : %s (%d)" % (ntplib.stratum_to_text(response.stratum), response.stratum)) print ("Precision : %d" % response.precision) print ("Root delay : %f " % response.root_delay) print ("Root dispersion : %f" % response.root_dispersion) print ("Delay : %f" % response.delay) print ("Leap indicator : %s (%d)" % (ntplib.leap_to_text(response.leap), response.leap)) print ("Poll : %d" % response.poll) print ("Mode : %s (%d)" % (ntplib.mode_to_text(response.mode), response.mode)) print ("Python time: %f, %s" % (time.time(), str(datetime.datetime.utcnow()))) print ("Transmit timestamp : " + time.ctime(response.tx_time)) print ("Reference timestamp : " + time.ctime(response.ref_time)) print ("Original timestamp : " + time.ctime(response.orig_time)) print ("Receive timestamp : " + time.ctime(response.recv_time)) print ("Destination timestamp : " + time.ctime(response.dest_time)) print ("Reference clock identifier : " + ntplib.ref_id_to_text(response.ref_id, response.stratum))
def print_response(response): print('Version number : %d' % response.version) print('Offset : %f' % response.offset) print('Stratum : %s (%d)' % (ntplib.stratum_to_text(response.stratum), response.stratum)) print('Precision : %d' % response.precision) print('Root delay : %f ' % response.root_delay) print('Root dispersion : %f' % response.root_dispersion) print('Delay : %f' % response.delay) print('Leap indicator : %s (%d)' % (ntplib.leap_to_text(response.leap), response.leap)) print('Poll : %d' % response.poll) print('Mode : %s (%d)' % (ntplib.mode_to_text(response.mode), response.mode)) print('Python time: %f, %s' % (time.time(), str(datetime.datetime.utcnow()))) print('Transmit timestamp : ' + time.ctime(response.tx_time)) print('Reference timestamp : ' + time.ctime(response.ref_time)) print('Original timestamp : ' + time.ctime(response.orig_time)) print('Receive timestamp : ' + time.ctime(response.recv_time)) print('Destination timestamp : ' + time.ctime(response.dest_time)) print('Reference clock identifier : ' + ntplib.ref_id_to_text(response.ref_id, response.stratum))
import ntplib if len(sys.argv) > 1: hostname = sys.argv[1] else: sys.stdout.write('NTP server ? ') hostname = sys.stdin.readline().strip() client = ntplib.NTPClient() response = client.request(hostname, version=3) print('Version number : %d' % response.version) print('Offset : %f' % response.offset) print('Stratum : %s (%d)' % (ntplib.stratum_to_text(response.stratum), response.stratum)) print('Precision : %d' % response.precision) print('Root delay : %f ' % response.root_delay) print('Root dispersion : %f' % response.root_dispersion) print('Delay : %f' % response.delay) print('Leap indicator : %s (%d)' % (ntplib.leap_to_text(response.leap), response.leap)) print('Poll : %d' % response.poll) print('Mode : %s (%d)' % (ntplib.mode_to_text(response.mode), response.mode)) print('Transmit timestamp : ' + str(response.tx_time)) print('Reference timestamp : ' + str(response.ref_time)) print('Original timestamp : ' + str(response.orig_time)) print('Receive timestamp : ' + str(response.recv_time)) print('Destination timestamp : ' + str(response.dest_time)) print('Reference clock identifier : ' + ntplib.ref_id_to_text(response.ref_id,