summaryrefslogtreecommitdiff
path: root/ckt0.awk
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ckt0.awk46
1 files changed, 31 insertions, 15 deletions
diff --git a/ckt0.awk b/ckt0.awk
index 325fe40..68dd358 100644
--- a/ckt0.awk
+++ b/ckt0.awk
@@ -8,6 +8,10 @@ function log10(n) {
function merge_meas(est_val, est_unc, meas_val, meas_unc) {
+ # add sanity (staleness) check on previous estimate
+ #z_est = (meas_val - est_val)/est_unc
+ #z_meas = (meas_val - est_val)/meas_unc
+
# Kalman filtering compares variances,
# convert uncertainties to square units
est_unc = (0.5*est_unc)^2.0
@@ -58,7 +62,7 @@ function ck_boottime(unm) {
t0_k = mktime(t0_k)
}
- if (unm ~/FreeBSD/) {
+ if (unm ~/FreeBSD/ || unm ~/Darwin/) {
"sysctl kern.boottime" | getline t0_k
close("sysctl kern.boottime")
sub("^.*{", "", t0_k)
@@ -71,7 +75,7 @@ function ck_boottime(unm) {
}
- t0_k_unc = systime()
+ t0_k_unc = ck_time(unm)
return sprintf("%s %s", t0_k, t0_k_unc)
@@ -81,20 +85,24 @@ function ck_boottime(unm) {
function ck_time(unm) {
if (unm ~/FreeBSD/) {
- #t = systime()
"date +%s.%N" | getline t
close("date +%s.%N")
}
+ #if (unm ~/Darwin/) {
else {
- t = systime()
+ "date +%s" | getline t
+ close("date +%s")
}
+ #else {
+ # t = systime()
+ #}
return t
}
-function ck_uptime() {
+function ck_uptime(unm) {
# check uptime cmd
"uptime" | getline t_up_cmd
@@ -102,7 +110,7 @@ function ck_uptime() {
# evaluate measured uptime
t_up_meas[1] = 0.0
- t_up_meas[2] = systime()
+ t_up_meas[2] = ck_time(unm)
sub("^.*up ", "", t_up_cmd)
sub(", load.*$", "", t_up_cmd)
@@ -129,6 +137,12 @@ function ck_uptime() {
(t_up_meas[2] > 60.0) ? t_up_meas[2] = 60.0 : t_up_meas[2] += 0.0
}
+ if (t_up_cmd_arr[i] ~ /sec/) {
+ split(t_up_cmd_arr[i], sec)
+ t_up_meas[1] += sec[1]
+ (t_up_meas[2] > 1.0) ? t_up_meas[2] = 1.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)
@@ -156,9 +170,9 @@ BEGIN {
# check ARGV for previous estimates
if (ARGC) {
ARGV[1] ? t_prev[1] = ARGV[1] : t_prev[1] = 0.0
- ARGV[2] ? t_prev[2] = ARGV[2] : t_prev[2] = systime()
+ ARGV[2] ? t_prev[2] = ARGV[2] : t_prev[2] = ck_time(uname)
ARGV[3] ? t_up_prev[1] = ARGV[3] : t_up_prev[1] = 0.0
- ARGV[4] ? t_up_prev[2] = ARGV[4] : t_up_prev[2] = systime()
+ ARGV[4] ? t_up_prev[2] = ARGV[4] : t_up_prev[2] = ck_time(uname)
ARGV[5] ? t0_prev[1] = ARGV[5] : split(ck_boottime(uname), t0_prev)
ARGV[6] ? t0_prev[2] = ARGV[6] : split(ck_boottime(uname), t0_prev)
}
@@ -169,11 +183,11 @@ BEGIN {
t_meas[2] = ck_time(uname)
# convert to [val, unc] vector
- if ( t_meas[1] != t_meas[2] ) {
- t_meas[2] -= t_meas[1]
- t_meas[1] += 0.5*t_meas[2]
- } else {
- split(merge_meas(t_meas[1], 1.0, t_meas[2], 1.0), t_meas)
+ t_meas[2] -= t_meas[1]
+ t_meas[1] += 0.5*t_meas[2]
+ if ( t_meas[2] == 0.0 ) {
+ #split(merge_meas(t_meas[1], 1.0, t_meas[2], 1.0), t_meas)
+ t_meas[2] = sqrt(t_meas[2]^2.0 + 1.0^2.0)
}
t_meas_str = sigfig(t_meas[1], t_meas[2])
@@ -185,10 +199,11 @@ BEGIN {
t_up_est[1] = t_up_prev[1] + dt[1]
t_up_est[2] = t_up_prev[2] + dt[2]
t_up_est[2] += sqrt((t_up_est[1] - t_up_prev[1] - dt[1])^2.0)
+ t_up_prev[2] += sqrt((t_up_est[1] - t_up_prev[1] - dt[1])^2.0)
# alt. prediction based on t0
- t_up_alt[1] = t_meas[1] - t0_prev[1]
- t_up_alt[2] = t_meas[2] + t0_prev[2]
+ # t_up_alt[1] = t_meas[1] - t0_prev[1]
+ # t_up_alt[2] = t_meas[2] + t0_prev[2]
# dt_up_alt
# dt_up_alt[1] = t_up_alt[1] - (t_prev[1] - t0_prev[1])
@@ -210,6 +225,7 @@ BEGIN {
t0_est[1] = t_meas[1] - t_up_est[1]
t0_est[2] = t_meas[2] + t_up_est[2]
t0_est[2] += sqrt((t0_est[1] - t0_prev[1])^2.0)
+ t0_prev[2] += sqrt((t0_est[1] - t0_prev[1])^2.0)
# merge previous and updated boot time, t0
split(merge_meas(t0_est[1], t0_est[2], t0_prev[1], t0_prev[2]), t0_est)