1#!/usr/bin/python 2 3# Time Drift Script 4# Periodically checks and displays time drift 5# by john stultz (jstultz@us.ibm.com) 6 7# Copyright (C) 2003-2006 IBM 8# 9# This program is free software; you can redistribute it and/or 10# modify it under the terms of the GNU General Public License as 11# published by the Free Software Foundation; either version 2 of the 12# License, or (at your option) any later version. 13# 14# This program is distributed in the hope that it will be useful, but 15# WITHOUT ANY WARRANTY; without even the implied warranty of 16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17# General Public License for more details. 18# 19# You should have received a copy of the GNU General Public License 20# along with this program; if not, write to the Free Software 21# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 22# 02111-1307, USA. 23 24 25# Usage: drift-test.py [-s] [ntp_server [sleep_time]] 26 27import commands 28import sys 29import string 30import time 31 32server_default = "bvrgsa.ibm.com" 33sleep_time_default = 60 34 35server = "" 36sleep_time = 0 37set_time = 0 38 39#parse args 40for arg in sys.argv[1:]: 41 if arg == "-s": 42 set_time = 1 43 elif server == "": 44 server = arg 45 elif sleep_time == 0: 46 sleep_time = string.atoi(arg) 47 48if server == "": 49 server = server_default 50if sleep_time == 0: 51 sleep_time = sleep_time_default 52 53#set time 54if (set_time == 1): 55 cmd = commands.getoutput('/usr/sbin/ntpdate -ub ' + server) 56 57cmd = commands.getoutput('/usr/sbin/ntpdate -uq ' + server) 58line = string.split(cmd) 59 60#parse original offset 61start_offset = string.atof(line[-2]); 62#parse original time 63start_time = time.localtime(time.time()) 64datestr = time.strftime("%d %b %Y %H:%M:%S", start_time) 65 66time.sleep(1) 67while 1: 68 cmd = commands.getoutput('/usr/sbin/ntpdate -uq ' + server) 69 line = string.split(cmd) 70 71 #parse offset 72 now_offset = string.atof(line[-2]); 73 74 #parse time 75 now_time = time.localtime(time.time()) 76 datestr = time.strftime("%d %b %Y %H:%M:%S", now_time) 77 78 # calculate drift 79 delta_time = time.mktime(now_time) - time.mktime(start_time) 80 delta_offset = now_offset - start_offset 81 drift = delta_offset / delta_time * 1000000 82 83 #print output 84 print time.strftime("%d %b %H:%M:%S",now_time), 85 print " offset:", now_offset , 86 print " drift:", drift ,"ppm" 87 sys.stdout.flush() 88 89 #sleep 90 time.sleep(sleep_time) 91