-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvyatta-show-timing-source
executable file
·113 lines (100 loc) · 3.79 KB
/
vyatta-show-timing-source
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env python3
#
# Copyright (c) 2021, AT&T Intellectual Property. All Rights Reserved
#
# SPDX-License-Identifier: LGPL-2.1-only
import sys, json
from vyatta import configd
import argparse
def show_one_pps_status(state):
"""
state:
{
"frequency": [{"source": "gps", "weighted-priority": 25}],
"frequency-status": {
"operating-status": "Locked",
"priority": [
{"source":"bits", "weighted-priority":10},
{"source":"gps", "weighted-priority":25},
{"source":"ptp", "weighted-priority":30},
{"source":"sma", "weighted-priority":20},
{"source":"synce", "weighted-priority":40},
],
"source": "synce",
},
"one-pps-status": {
"operating-status": "Locked",
"priority": [
{"source":"gps-1pps", "weighted-priority":50},
{"source":"ptp-1pps", "weighted-priority":40},
{"source":"sma-1pps", "weighted-priority":30},
{"source":"tod-1pps", "weighted-priority":20},
],
"source": "ptp-1pps",
},
}
"""
try:
operating_status = state["one-pps-status"]["operating-status"]
operating_status = operating_status.replace(" ", "-")
state["one-pps-status"]["priority"] = sorted(state["one-pps-status"]["priority"],
key=lambda k: k['weighted-priority'], reverse=True)
print(f' 1PPS source: {state["one-pps-status"]["source"].upper()}')
print(f' 1PPS operating-status: {operating_status}')
print(f' 1PPS priorities:')
for item in state["one-pps-status"]["priority"]:
print(f' {item["weighted-priority"]}: {item["source"].upper()}')
except:
pass
def show_frequency_status(state):
try:
operating_status = state["frequency-status"]["operating-status"]
operating_status = operating_status.replace(" ", "-")
state["frequency-status"]["priority"] = sorted(state["frequency-status"]["priority"],
key=lambda k: k['weighted-priority'], reverse=True)
print(f' Frequency source: {state["frequency-status"]["source"].upper()}')
print(f' Frequency operating-status: {operating_status}')
print(f' Frequency priorities:')
for item in state["frequency-status"]["priority"]:
print(f' {item["weighted-priority"]}: {item["source"].upper()}')
except:
pass
def get_state_timing_source():
try:
c = configd.Client()
except:
print("can't connect to configd\n", file=sys.stderr)
sys.exit(1)
try:
d = c.tree_get_full_dict(
"system timing timing-status timing-source", configd.Client.RUNNING, "json"
)
except:
print("can't retrieve timing-source information\n", file=sys.stderr)
sys.exit(1)
# print(f"received from configd:{d}")
if not bool(d):
d = {"timing-source": {"one-pps-status": {}, "frequency-status": {}}}
return d["timing-source"]
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="System timing timing-source show")
parser.add_argument(
"-f",
"--frequency",
help="Show timing-source frequency status",
action="store_true",
)
parser.add_argument(
"-p", "--one-pps", help="Show timing-source 1PPS status", action="store_true"
)
args = parser.parse_args()
if args.one_pps:
state = get_state_timing_source()
show_one_pps_status(state)
elif args.frequency:
state = get_state_timing_source()
show_frequency_status(state)
else:
state = get_state_timing_source()
show_frequency_status(state)
show_one_pps_status(state)