1
0
mirror of https://github.com/kellyjonbrazil/jc.git synced 2025-07-15 01:24:29 +02:00

add integer and float conversions

This commit is contained in:
Kelly Brazil
2023-03-18 15:14:59 -07:00
parent 7e134a63bd
commit 164294ecb7
7 changed files with 81 additions and 7 deletions

View File

@ -2,6 +2,8 @@ jc changelog
20230305 v1.23.1
- Fix `zpool-status` command parser for lines that start with tab
- Fix `timedatectl` command parser when RTC set to local
- Add support for the `timesync-status` for the `timedatectl` command parser
20230227 v1.23.0
- Add input slicing as a `jc` command-line option

View File

@ -35,16 +35,20 @@ Schema:
"server": string,
"poll_interval": string,
"leap": string,
"version": string,
"stratum": string,
"version": integer,
"stratum": integer,
"reference": string,
"precision": string,
"root_distance": string,
"offset": string,
"delay": string,
"jitter": string,
"packet_count": string,
"frequency": string
"offset": float,
"offset_unit": string,
"delay": float,
"delay_unit": string,
"jitter": float,
"jitter_unit": string,
"packet_count": integer,
"frequency": float,
"frequency_unit": string
}
Examples:
@ -105,11 +109,26 @@ def _process(proc_data):
"""
bool_list = {'ntp_enabled', 'ntp_synchronized', 'rtc_in_local_tz', 'dst_active',
'system_clock_synchronized', 'systemd-timesyncd.service_active'}
int_list = {'version', 'stratum', 'packet_count'}
float_list = {'offset', 'delay', 'jitter', 'frequency'}
for key in ['offset', 'delay', 'jitter']:
if key in proc_data:
proc_data[key + '_unit'] = proc_data[key][-2:]
if 'frequency' in proc_data:
proc_data['frequency_unit'] = proc_data['frequency'][-3:]
for key in proc_data:
if key in bool_list:
proc_data[key] = jc.utils.convert_to_bool(proc_data[key])
if key in int_list:
proc_data[key] = jc.utils.convert_to_int(proc_data[key])
if key in float_list:
proc_data[key] = jc.utils.convert_to_float(proc_data[key])
if 'universal_time' in proc_data:
ts = jc.utils.timestamp(proc_data['universal_time'], format_hint=(7300,))
proc_data['epoch_utc'] = ts.utc

View File

@ -0,0 +1 @@
{"local_time":"Mon 2023-03-13 14:17:38 EET","universal_time":"Mon 2023-03-13 12:17:38 UTC","rtc_time":"Mon 2023-03-13 12:17:38","time_zone":"Europe/Athens (EET, +0200)","system_clock_synchronized":true,"ntp_service":"active","rtc_in_local_tz":true,"epoch_utc":1678709858}

View File

@ -0,0 +1,14 @@
Local time: Mon 2023-03-13 14:17:38 EET
Universal time: Mon 2023-03-13 12:17:38 UTC
RTC time: Mon 2023-03-13 12:17:38
Time zone: Europe/Athens (EET, +0200)
System clock synchronized: yes
NTP service: active
RTC in local TZ: yes
Warning: The system is configured to read the RTC time in the local time zone.
This mode cannot be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.

View File

@ -0,0 +1 @@
{"server":"216.239.35.8 (time.google.com)","poll_interval":"8min 32s (min: 32s; max 34min 8s)","leap":"normal","version":4,"stratum":1,"reference":"GOOG","precision":"1us (-20)","root_distance":"91us (max: 5s)","offset":-5.224,"delay":65.884,"jitter":5.386,"packet_count":5,"frequency":27.071,"offset_unit":"ms","delay_unit":"ms","jitter_unit":"ms","frequency_unit":"ppm"}

View File

@ -0,0 +1,13 @@
Server: 216.239.35.8 (time.google.com)
Poll interval: 8min 32s (min: 32s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 1
Reference: GOOG
Precision: 1us (-20)
Root distance: 91us (max: 5s)
Offset: -5.224ms
Delay: 65.884ms
Jitter: 5.386ms
Packet count: 5
Frequency: +27.071ppm

View File

@ -15,6 +15,12 @@ class MyTests(unittest.TestCase):
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/ubuntu-18.04/timedatectl.out'), 'r', encoding='utf-8') as f:
ubuntu_18_4_timedatectl = f.read()
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/timedatectl-rtc-local.out'), 'r', encoding='utf-8') as f:
timedatectl_rtc_local = f.read()
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/timedatectl-timesync-status.out'), 'r', encoding='utf-8') as f:
timedatectl_timesync_status = f.read()
# output
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/centos-7.7/timedatectl.json'), 'r', encoding='utf-8') as f:
centos_7_7_timedatectl_json = json.loads(f.read())
@ -22,6 +28,12 @@ class MyTests(unittest.TestCase):
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/ubuntu-18.04/timedatectl.json'), 'r', encoding='utf-8') as f:
ubuntu_18_4_timedatectl_json = json.loads(f.read())
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/timedatectl-rtc-local.json'), 'r', encoding='utf-8') as f:
timedatectl_rtc_local_json = json.loads(f.read())
with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/generic/timedatectl-timesync-status.json'), 'r', encoding='utf-8') as f:
timedatectl_timesync_status_json = json.loads(f.read())
def test_timedatectl_nodata(self):
"""
@ -41,6 +53,18 @@ class MyTests(unittest.TestCase):
"""
self.assertEqual(jc.parsers.timedatectl.parse(self.ubuntu_18_4_timedatectl, quiet=True), self.ubuntu_18_4_timedatectl_json)
def test_timedatectl_rtc_local(self):
"""
Test 'timedatectl' with RTC set to local
"""
self.assertEqual(jc.parsers.timedatectl.parse(self.timedatectl_rtc_local, quiet=True), self.timedatectl_rtc_local_json)
def test_timedatectl_timesync_status(self):
"""
Test 'timedatectl timesync-status'
"""
self.assertEqual(jc.parsers.timedatectl.parse(self.timedatectl_timesync_status, quiet=True), self.timedatectl_timesync_status_json)
if __name__ == '__main__':
unittest.main()