chiark / gitweb /
unit: serialize condition test results
authorLennart Poettering <lennart@poettering.net>
Thu, 17 Mar 2011 03:36:19 +0000 (04:36 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 17 Mar 2011 03:36:19 +0000 (04:36 +0100)
TODO
src/unit.c

diff --git a/TODO b/TODO
index 1a373cc10b68cee768fab58cf2fe2091a5aaf85a..17cf53a18cbfc7b69ed4496f69f6c7fc783de02a 100644 (file)
--- a/TODO
+++ b/TODO
@@ -22,19 +22,13 @@ F15:
 
 * 0595f9a1c182a84581749823ef47c5f292e545f9 is borked, freezes shutdown
 
-* capability_bounding_set_drop not used.
-
-* recreate private socket on SIGUSR2
-
-* serialize condition execution information
+* capability_bounding_set_drop not used
 
 * rework syslog.service being up logic in PID 1
 
 * rsyslog.service should hook itself into syslog.target?
 
-* syslog.target should be pulled in by multi-user.target
-
-* don't strip facility from kmsg log messages as soon as that is possible.
+* syslog.target should be pulled in by multi-user.target?
 
 * pull in .service from meta .targers AND vice versa too. i.e. syslog.target ←→ rsyslog.service, rpcbind similarly
 
@@ -42,6 +36,10 @@ F15:
 
 Features:
 
+* don't strip facility from kmsg log messages as soon as that is possible.
+
+* recreate private socket on SIGUSR2
+
 * optionally create watched directories in .path units
 
 * Support --test based on current system state
index 117af4df4477700d06c4a88c2732a5236d4c6e67..10de40affc40fb3ba3fdd184d00c0a7b7a818845 100644 (file)
@@ -647,6 +647,13 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) {
 
         condition_dump_list(u->meta.conditions, f, prefix);
 
+        if (dual_timestamp_is_set(&u->meta.condition_timestamp))
+                fprintf(f,
+                        "%s\tCondition Timestamp: %s\n"
+                        "%s\tCondition Result: %s\n",
+                        prefix, strna(format_timestamp(timestamp1, sizeof(timestamp1), u->meta.condition_timestamp.realtime)),
+                        prefix, yes_no(u->meta.condition_result));
+
         for (d = 0; d < _UNIT_DEPENDENCY_MAX; d++) {
                 Unit *other;
 
@@ -2080,6 +2087,10 @@ int unit_serialize(Unit *u, FILE *f, FDSet *fds) {
         dual_timestamp_serialize(f, "active-enter-timestamp", &u->meta.active_enter_timestamp);
         dual_timestamp_serialize(f, "active-exit-timestamp", &u->meta.active_exit_timestamp);
         dual_timestamp_serialize(f, "inactive-enter-timestamp", &u->meta.inactive_enter_timestamp);
+        dual_timestamp_serialize(f, "condition-timestamp", &u->meta.condition_timestamp);
+
+        if (dual_timestamp_is_set(&u->meta.condition_timestamp))
+                unit_serialize_item(u, f, "condition-result", yes_no(u->meta.condition_result));
 
         /* End marker */
         fputc('\n', f);
@@ -2169,6 +2180,16 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) {
                 } else if (streq(l, "inactive-enter-timestamp")) {
                         dual_timestamp_deserialize(v, &u->meta.inactive_enter_timestamp);
                         continue;
+                } else if (streq(l, "condition-timestamp")) {
+                        dual_timestamp_deserialize(v, &u->meta.condition_timestamp);
+                        continue;
+                } else if (streq(l, "condition-result")) {
+                        int b;
+
+                        if ((b = parse_boolean(v)) < 0)
+                                log_debug("Failed to parse condition result value %s", v);
+                        else
+                                u->meta.condition_result = b;
                 }
 
                 if ((r = UNIT_VTABLE(u)->deserialize_item(u, l, v, fds)) < 0)