#!/usr/bin/env python3 # -*- coding: utf-8 -*- import math import subprocess import sys # ╰─○ chronyc tracking # Reference ID : 192.53.103.108 (ptbtime1.ptb.de) # Stratum : 2 # Ref time (UTC) : Mon Oct 30 09:48:39 2017 # System time : 0.000000000 seconds fast of NTP time # Last offset : +0.000054065 seconds # RMS offset : 42.973133087 seconds # Frequency : 421.567 ppm fast # Residual freq : +0.013 ppm # Skew : 0.218 ppm # Root delay : 0.017120 seconds # Root dispersion : 0.001280 seconds # Update interval : 238.4 seconds # Leap status : Normal KEY_SYSTEM_TIME = 'System time' KEY_PARSED_OFFSET = 'Parsed offset' def get_stats(): stats = {} for line in subprocess.check_output(['/usr/bin/chronyc', 'tracking']).decode('utf-8').split('\n'): line_parts = line.split(' : ') if len(line_parts) != 2: continue desc, cont = line_parts stats[desc.strip()] = cont.strip() offset_parts = stats[KEY_SYSTEM_TIME].split(' ') offset = float(offset_parts[0]) * (1 if offset_parts[2] == 'fast' else -1) stats[KEY_PARSED_OFFSET] = offset return stats def main(): stats = get_stats() if math.fabs(stats[KEY_PARSED_OFFSET]) > 1.0: print('{:.2f}s diff'.format(stats[KEY_PARSED_OFFSET])) return 0 if __name__ == '__main__': sys.exit(main())