summaryrefslogtreecommitdiff
path: root/ckt0.awk
diff options
context:
space:
mode:
authorwukong <wukong@longaeva>2026-01-14 16:22:54 -0800
committerwukong <wukong@longaeva>2026-01-14 16:22:54 -0800
commitea1f0737b1f0a46d5a8572fda2dd032713c14c03 (patch)
tree1801b00956571885fe2fa01bbd84d30cb0e988ae /ckt0.awk
parent95ece1f65d38a807ace68c18441693ac4137f126 (diff)
added t_up measurement from /proc/uptime for linux and freebsd;
added unc_g to algorithmically guess uncertainty when not available, needs further testing and tuning;
Diffstat (limited to '')
-rw-r--r--ckt0.awk60
1 files changed, 49 insertions, 11 deletions
diff --git a/ckt0.awk b/ckt0.awk
index 35ff5ca..f868904 100644
--- a/ckt0.awk
+++ b/ckt0.awk
@@ -49,6 +49,22 @@ function sigfig(val, unc) {
}
+function unc_g(val) {
+
+ # order of magnitude
+ omag_val = log10(val)
+
+ # trim punctuation from val
+ sub("[eE].*$", "", val)
+ gsub("[.+-]", "", val)
+ n_digits = omag_val - (length(val) - 0.0)
+ n_digits *= omag_val - (length(val) - 1.0)
+
+ return sprintf("%.2g", 10.0^(n_digits))
+
+}
+
+
function ck_boottime(unm) {
if (unm ~/OpenBSD/) {
@@ -84,11 +100,11 @@ function ck_boottime(unm) {
function ck_time(unm) {
- if (unm ~/FreeBSD/) {
+ if (unm ~ /FreeBSD/ || unm ~ /Linux/) {
"date +%s.%N" | getline t
close("date +%s.%N")
}
- #if (unm ~/Darwin/) {
+ #if (unm ~ /Darwin/) {
else {
"date +%s" | getline t
close("date +%s")
@@ -118,7 +134,6 @@ function ck_uptime(unm) {
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)
@@ -137,11 +152,11 @@ function ck_uptime(unm) {
(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] ~ /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, ":")
@@ -153,11 +168,34 @@ function ck_uptime(unm) {
}
+ if (uname ~ /FreeBSD/ || uname ~ /Linux/) {
+ split(ck_proc_uptime(uname), t_pu_meas)
+ split(merge_meas(t_up_meas[1], t_up_meas[2], t_pu_meas[1], 0.1), t_up_meas)
+ }
+
return sigfig(t_up_meas[1], t_up_meas[2])
}
+function ck_proc_uptime(unm) {
+
+ proc_file = ""
+ if (unm ~ /FreeBSD/) {
+ proc_file = "/compat/linux/proc/uptime"
+ }
+ if (unm ~ /Linux/) {
+ proc_file = "/proc/uptime"
+ }
+
+ getline proc_uptime < proc_file
+ close(proc_file)
+
+ return proc_uptime
+
+}
+
+
BEGIN {
OFMT="%f"
@@ -179,15 +217,15 @@ BEGIN {
## check systime, check uptime, check systime again
t_meas[1] = ck_time(uname)
- split(ck_uptime(), t_up_meas)
+ split(ck_uptime(uname), t_up_meas)
t_meas[2] = ck_time(uname)
## convert to [val, unc] vector
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[2] = unc_g(t_meas[1])
+ #t_meas[2] = sqrt(t_meas[2]^2.0 + 1.0^2.0)
}
t_meas_str = sigfig(t_meas[1], t_meas[2])