diff options
| author | wukong <wukong@longaeva> | 2026-01-12 16:28:14 -0800 |
|---|---|---|
| committer | wukong <wukong@longaeva> | 2026-01-12 16:28:14 -0800 |
| commit | c32bbf335d4af02ed1b8a4c46b748bcf757595f4 (patch) | |
| tree | 33d0f81959e7cb4ab55a3141c14c5e12e28b5960 /ckt0.awk | |
| parent | 3734455bf0712563f75b2963a2ab32f03a594902 (diff) | |
added uname case for 'Darwin';
added seconds case for ck_uptime();
completed ck_time() function to allow different commands for checking time;
reverted t_meas estimation to basic subtraction method;
adjusted sleep timer from mod 30 to mod 60 in ckt0.sh;
Diffstat (limited to 'ckt0.awk')
| -rw-r--r-- | ckt0.awk | 46 |
1 files changed, 31 insertions, 15 deletions
@@ -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) |
