From 584be568b99633eb48c21ece92e241de011ecc9a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 25 Aug 2010 03:13:44 +0200 Subject: systemctl: show timestamps for state changes --- src/systemctl.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) (limited to 'src/systemctl.c') diff --git a/src/systemctl.c b/src/systemctl.c index f9317ad18f..0c33abb307 100644 --- a/src/systemctl.c +++ b/src/systemctl.c @@ -1489,6 +1489,11 @@ typedef struct UnitStatusInfo { const char *path; const char *default_control_group; + usec_t inactive_exit_timestamp; + usec_t active_enter_timestamp; + usec_t active_exit_timestamp; + usec_t inactive_enter_timestamp; + bool need_daemon_reload; /* Service */ @@ -1523,6 +1528,9 @@ typedef struct UnitStatusInfo { static void print_status_info(UnitStatusInfo *i) { ExecStatusInfo *p; const char *on, *off, *ss; + usec_t timestamp; + char since1[FORMAT_TIMESTAMP_PRETTY_MAX], *s1; + char since2[FORMAT_TIMESTAMP_MAX], *s2; assert(i); @@ -1559,17 +1567,34 @@ static void print_status_info(UnitStatusInfo *i) { on = off = ""; if (ss) - printf("\t Active: %s%s (%s)%s\n", + printf("\t Active: %s%s (%s)%s", on, strna(i->active_state), ss, off); else - printf("\t Active: %s%s%s\n", + printf("\t Active: %s%s%s", on, strna(i->active_state), off); + timestamp = (streq_ptr(i->active_state, "active") || + streq_ptr(i->active_state, "reloading")) ? i->active_enter_timestamp : + (streq_ptr(i->active_state, "inactive") || + streq_ptr(i->active_state, "maintenance")) ? i->inactive_enter_timestamp : + streq_ptr(i->active_state, "activating") ? i->inactive_exit_timestamp : + i->active_exit_timestamp; + + s1 = format_timestamp_pretty(since1, sizeof(since1), timestamp); + s2 = format_timestamp(since2, sizeof(since2), timestamp); + + if (s1) + printf(" since [%s; %s]\n", s2, s1); + else if (s2) + printf(" since [%s]\n", s2); + else + printf("\n"); + if (i->sysfs_path) printf("\t Device: %s\n", i->sysfs_path); else if (i->where) @@ -1782,6 +1807,14 @@ static int status_property(const char *name, DBusMessageIter *iter, UnitStatusIn i->start_timestamp = (usec_t) u; else if (streq(name, "ExecMainExitTimestamp")) i->exit_timestamp = (usec_t) u; + else if (streq(name, "ActiveEnterTimestamp")) + i->active_enter_timestamp = (usec_t) u; + else if (streq(name, "InactiveEnterTimestamp")) + i->inactive_enter_timestamp = (usec_t) u; + else if (streq(name, "InactiveExitTimestamp")) + i->inactive_exit_timestamp = (usec_t) u; + else if (streq(name, "ActiveExitTimestamp")) + i->active_exit_timestamp = (usec_t) u; break; } -- cgit v1.2.3-54-g00ecf