Example #1
0
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
Example #2
0
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()
Example #4
0
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)
Example #5
0
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))
Example #7
0
    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))
Example #8
0
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))
Example #9
0
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))
Example #10
0
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,