Report only failed services in the systemd listener 60/130260/2
authorŁukasz Stelmach <l.stelmach@samsung.com>
Wed, 17 May 2017 13:22:27 +0000 (15:22 +0200)
committerKrzysztof Opasiak <k.opasiak@samsung.com>
Fri, 19 May 2017 16:28:45 +0000 (18:28 +0200)
Change-Id: Iec50c0c94e8896eec07cd280bd0cf68c147f6815
Signed-off-by: Łukasz Stelmach <l.stelmach@samsung.com>
[Rebase onto current head]
Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
src/listeners/systemd.c

index d9370a7f0d8b807602a5982196df95b1f9408baa..3ddbf0304099a6f31c3563ef77e46739ed19857d 100644 (file)
@@ -19,6 +19,7 @@
 #define _GNU_SOURCE 1
 
 #include <poll.h>
+#include <stdbool.h>
 #include <stdio.h>
 #include <inttypes.h>
 #include <systemd/sd-bus.h>
@@ -46,6 +47,7 @@ static int on_unit_properties_changed(sd_bus_message *m, void *userdata,
        /* const char* path; */
        /* path = NULL; */
        uint8_t type;
+       bool has_failed = false;
        struct sf_event_data sf_ev_data = {};
        struct faultd_event *ev;
 
@@ -107,8 +109,9 @@ static int on_unit_properties_changed(sd_bus_message *m, void *userdata,
                        }
                        rc = sd_bus_message_exit_container(m);
                        log_debug("        %s:%s", key, value);
+
                        if (strcmp("failed", value) == 0) {
-                               ;       /* XXX */
+                               has_failed = true;
                        }
 
                } else if (strncmp("ConditionTimestamp", key, 18) == 0) {
@@ -154,19 +157,21 @@ static int on_unit_properties_changed(sd_bus_message *m, void *userdata,
                rc = 0;
        }
 
-       systemd_service_init(sd_bus_message_get_path(m), &sf_ev_data.service);
+       if (has_failed) {
+               systemd_service_init(sd_bus_message_get_path(m), &sf_ev_data.service);
 
-       rc = faultd_event_create(SERVICE_FAILED_EVENT_ID, &sf_ev_data, &ev);
-       if (rc) {
-               log_error_errno(rc, "Unable to allocate an event: %m.");
-               systemd_service_cleanup(&sf_ev_data.service);
-               goto finish;
-       }
+               rc = faultd_event_create(SERVICE_FAILED_EVENT_ID, &sf_ev_data, &ev);
+               if (rc) {
+                       log_error_errno(rc, "Unable to allocate an event: %m.");
+                       systemd_service_cleanup(&sf_ev_data.service);
+                       goto finish;
+               }
 
-       rc = event_processor_report_event(ev);
-       if (rc) {
-               log_error_errno(rc, "Unable to report event: %m");
-               faultd_event_unref(ev);
+               rc = event_processor_report_event(ev);
+               if (rc) {
+                       log_error_errno(rc, "Unable to report event: %m");
+                       faultd_event_unref(ev);
+               }
        }
 finish:
        return rc;