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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
#!/usr/bin/env awk -f
function log10(n) {
return log(n)/log(10.0)
}
function merge_meas(est_val, est_unc, meas_val, meas_unc) {
# Kalman filtering compares variances,
# convert uncertainties to square units
est_unc = (0.5*est_unc)^2.0
meas_unc = (0.5*meas_unc)^2.0
K = (est_unc)/((est_unc) + (meas_unc))
est_val = est_val + K*(meas_val - est_val)
est_unc = (est_unc*meas_unc)/(est_unc + meas_unc)
# convert est_unc back to original units
est_unc = 2.0*sqrt(est_unc)
return sprintf(OFMT OFS OFMT ORS, est_val, est_unc)
}
function sigfig(val, unc) {
ordmag_val = log10(val)
ordmag_unc = log10(unc)
ordmag_high = sqrt((ordmag_val)^2.0 + (ordmag_unc)^2.0)
ordmag_low = ((ordmag_val)^-1.0 + (ordmag_unc)^-1.0)^-1.0
ordmag_range = ordmag_high - ordmag_low
sigfig_unc = sprintf("%.f", sqrt((ordmag_range)^2.0 + 3.0^2.0))
sigfig_val = sprintf("%.f", sqrt((ordmag_range)^2.0 + (sigfig_unc)^2.0 + 3.0^2.0))
ofmt_val = "%." sigfig_val "g"
ofmt_unc = "%." sigfig_unc "g"
return sprintf(ofmt_val OFS ofmt_unc, val, unc)
}
function ck_cptime() {
t_sys_meas[1] = systime()
t_sys_meas[2] = 1.0
"sysctl kern.cp_time" | getline cptime_cmd
close("sysctl kern.cp_time")
split(merge_meas(t_sys_meas[1], t_sys_meas[2], systime(), 1.0), t_sys_meas)
sub("^.*=", "", cptime_cmd)
gsub(",", OFS, cptime_cmd)
#split(cptime_cmd, cptime_arr, ",")
return sprintf(OFMT OFS "%s", t_sys_meas[1], cptime_cmd)
}
function ck_uptime() {
# check uptime cmd
"uptime" | getline t_up_cmd
close("uptime")
# evaluate measured uptime
t_up_meas[1] = 0.0
t_up_meas[2] = systime()
sub("^.*up ", "", t_up_cmd)
sub(", load.*$", "", t_up_cmd)
split(t_up_cmd, t_up_cmd_arr, ",")
for (i in t_up_cmd_arr) {
# TODO: add cases for days, months, years, etc.
if (t_up_cmd_arr[i] ~ /day/) {
split(t_up_cmd_arr[i], days)
t_up_meas[1] += 86400.0*(days[1] + 0.0)
(t_up_meas[2] > 86400.0) ? t_up_meas[2] = 86400.0 : t_up_meas[2] += 0.0
}
if (t_up_cmd_arr[i] ~ /hr/) {
split(t_up_cmd_arr[i], hrs)
t_up_meas[1] += 3600.0*(hrs[1] + 0.0)
(t_up_meas[2] > 3600.0) ? t_up_meas[2] = 3600.0 : t_up_meas[2] += 0.0
}
if (t_up_cmd_arr[i] ~ /min/) {
split(t_up_cmd_arr[i], mins)
t_up_meas[1] += (60.0*(mins[1] + 0.0))
(t_up_meas[2] > 60.0) ? t_up_meas[2] = 60.0 : t_up_meas[2] += 0.0
}
if (t_up_cmd_arr[i] ~ /:/) {
split(t_up_cmd_arr[i], hrs_min, ":")
t_up_meas[1] += 3600.0*(hrs_min[1] + 0.0)
(t_up_meas[2] > 3600.0) ? t_up_meas[2] = 3600.0 : t_up_meas[2] += 0.0
t_up_meas[1] += 60.0*(hrs_min[2] + 0.0)
(t_up_meas[2] > 60.0) ? t_up_meas[2] = 60.0 : t_up_meas[2] += 0.0
}
}
return sigfig(t_up_meas[1], t_up_meas[2])
}
BEGIN {
OFMT="%f"
pi = 4.0*atan2(1.0, 1.0)
c0 = 299792458 # m/sec
#print("_systime_", systime())
#print("_boottime_", ck_boottime())
print( ck_cptime() )
}
|