about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-10-20 20:55:30 -0400
committerJune McEnroe <june@causal.agency>2020-10-20 20:56:06 -0400
commitd90a43d948c3b9ed96f2908a58945939cbc30cf0 (patch)
tree4b5b7bd2e4a6842d50a0a89bef22d099c2498ae7
parentHumanize restart interval (diff)
downloadcatsit-d90a43d948c3b9ed96f2908a58945939cbc30cf0.tar.gz
catsit-d90a43d948c3b9ed96f2908a58945939cbc30cf0.zip
Humanize milliseconds if interval is less than 1s
The intervals are configurable in milliseconds so humanize should be
able to display at that precision.
-rw-r--r--service.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/service.c b/service.c
index 5f817bf..4aaad54 100644
--- a/service.c
+++ b/service.c
@@ -127,18 +127,22 @@ void serviceDrop(size_t index) {
 	services.ptr[index] = services.ptr[--services.len];
 }
 
-static const char *humanize(struct timespec uptime) {
+static const char *humanize(struct timespec interval) {
 	static char buf[256];
-	int days = uptime.tv_sec / (24 * 60 * 60);
-	uptime.tv_sec %= (24 * 60 * 60);
-	int hours = uptime.tv_sec / (60 * 60);
-	uptime.tv_sec %= (60 * 60);
-	int mins = uptime.tv_sec / 60;
-	uptime.tv_sec %= 60;
+	if (!interval.tv_sec) {
+		snprintf(buf, sizeof(buf), "%dms", (int)(interval.tv_nsec / 1000000));
+		return buf;
+	}
+	int days = interval.tv_sec / (24 * 60 * 60);
+	interval.tv_sec %= (24 * 60 * 60);
+	int hours = interval.tv_sec / (60 * 60);
+	interval.tv_sec %= (60 * 60);
+	int mins = interval.tv_sec / 60;
+	interval.tv_sec %= 60;
 	int d, h, m, s;
 	snprintf(
 		buf, sizeof(buf), "%n%dd %n%dh %n%dm %n%ds",
-		&d, days, &h, hours, &m, mins, &s, (int)uptime.tv_sec
+		&d, days, &h, hours, &m, mins, &s, (int)interval.tv_sec
 	);
 	if (days) return &buf[d];
 	if (hours) return &buf[h];