Serialise events to bson format 64/130264/9
authorŁukasz Stelmach <l.stelmach@samsung.com>
Fri, 19 May 2017 15:00:16 +0000 (17:00 +0200)
committerŁukasz Stelmach <l.stelmach@samsung.com>
Wed, 31 May 2017 10:46:07 +0000 (12:46 +0200)
Change-Id: Iebe856156ce6e65e3edcaf79952a633d25a1ea6d
Signed-off-by: Łukasz Stelmach <l.stelmach@samsung.com>
12 files changed:
src/core/event.c
src/core/event.h
src/core/event_processor.c
src/core/service.c
src/core/service.h
src/event_types/decision_made_event.c
src/event_types/decision_made_event.h
src/event_types/resource_violation_event.c
src/event_types/resource_violation_event.h
src/event_types/service_failed_event.c
src/event_types/service_failed_event.h
src/util/common.h

index 424e8011f2dda754bcefb2b0d1e41421eab5be4f..5864eddf242eb2637fa5da3a3ba106ffeb056f2b 100644 (file)
@@ -130,6 +130,9 @@ int faultd_event_init_internal(struct faultd_event_type *ev_type,
 
 void faultd_event_serialize_internal(struct faultd_event *ev, bson *out)
 {
-       /* call from e.g. .serialize in service_failed_event */
-       /* serialize faultd_event structure */
+       /* FIXME: check return values of bson_append_XXX */
+       bson_append_binary(out, EV_BOOT_ID, BSON_BIN_UUID, (char *)&ev->boot_id, sizeof(ev->boot_id));
+       /* FIXME: serialise event_type structure (?) */
+       bson_append_string(out, EV_TYPE_NAME, ev->type->name);
+       faultd_bson_append_timespec(out, EV_TIMESTAMP, &ev->timestamp);
 }
index a8ced0ef93bdc083dc7e51f503bf9a99b7c80586..963bb90ee39b604f344db2064b47e698a59ca33e 100644 (file)
 #include "notify_queue.h"
 #include "module.h"
 
+#define EV_BOOT_ID "bid"
+#define EV_TIMESTAMP "ts"
+#define EV_TYPE_NAME "tn"
+
 struct faultd_event;
 
 struct faultd_event_ops {
@@ -66,6 +70,7 @@ struct faultd_event {
        struct list_head node;
        /* To be used by event processig FW */
        struct nqueue_node nq_node;
+       bson_oid_t oid;
 };
 
 int faultd_event_type_register(struct faultd_event_type *type);
index 0abc387f1a531af31802bb4e73504c7c6aaee11f..8c437afdff7fcfb66bae635894b95ffac9b1def8 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <errno.h>
 
+#include "database.h"
 #include "event_processor.h"
 #include "log.h"
 
@@ -132,6 +133,19 @@ FAULTD_MODULE_REGISTER(&event_processor.module);
 
 int event_processor_report_event(struct faultd_event *ev)
 {
+       bson b;
+       bson_oid_t oid;
+
+       bson_init(&b);
+       database_new_oid(&oid);
+       bson_append_oid(&b, JDBIDKEYNAME, &oid);
+       faultd_event_serialize(ev, &b);
+       bson_finish(&b);
+
+       database_store(&b, &ev->oid);
+
+       bson_destroy(&b);
+
        return nqueue_append(&event_processor.pending_events,
                                                 &ev->nq_node);
 }
index cf91b5156703fec3350703b44a0dd5cf2fef919d..fe5e318aafb00f2ca63de3d28cf3a538d990f7f3 100644 (file)
@@ -227,3 +227,10 @@ int systemd_get_unit_by_pid(pid_t pid, const char **name)
 
        return 0;
 }
+
+void systemd_service_serialize(struct systemd_service *s, bson* out)
+{
+       bson_append_start_object(out, SYSD_SERVICE);
+       bson_append_string(out, SYSD_SERVICE_DBUS_PATH, s->dbus_path);
+       bson_append_finish_object(out);
+}
index 3bd409c5c7de9a7f52f0d0c5f0e7d2adc04ff379..a527ad353b927bd3d8340075e9270920eb897ec2 100644 (file)
 #ifndef FAULTD_SERVICE_H
 #define FAULTD_SERVICE_H
 
+#include <ejdb/bson.h>
 #include <sys/types.h>
 #include <unistd.h>
 
+#include "common.h"
+
+#define SYSD_SERVICE "sd_sv"
+#define SYSD_SERVICE_DBUS_PATH "db_p"
+
 struct systemd_service {
        char *dbus_path;
        char *service_type;
@@ -32,5 +38,6 @@ int systemd_service_init_by_pid(pid_t pid, struct systemd_service *s);
 int systemd_service_init(const char *dbus_path, struct systemd_service *s);
 void systemd_service_cleanup(struct systemd_service *s);
 int systemd_get_unit_by_pid(pid_t pid, const char **name);
+void systemd_service_serialize(struct systemd_service *s, bson *out);
 
 #endif /* FAULTD_SERVICE_H */
index 0ee82b332c0f50c61af3b974c58dd6419abd8c8c..04933689a174e0889a86e88fad604b2ac521a5a4 100644 (file)
@@ -21,6 +21,7 @@
 #include <errno.h>
 #include <malloc.h>
 
+#include "common.h"
 #include "decision_made_event.h"
 
 static int allocate_dm_event(struct faultd_event_type *type,
@@ -100,7 +101,14 @@ static void dm_event_serialize(struct faultd_event *ev, bson *out)
 {
        struct decision_made_event *dm_ev =
                to_decision_made_event(ev);
+
+       assert(!BSON_OID_IS_ZERO(dm_ev->reason->oid));
+
        faultd_event_serialize_internal(ev, out);
+       bson_append_string(out, DM_EV_WHO, dm_ev->who_made);
+       bson_append_string(out, DM_EV_ACTION, dm_ev->action);
+       if (dm_ev->action_data != NULL)
+               bson_append_string(out, DM_EV_ACTION_DATA, (char*)dm_ev->action_data); /* FIXME */
 }
 
 static struct faultd_event_type decision_made_event_type = {
index 16f6a975e9fb87e18d55484f27c47dea53d71c01..e32e8f327b629691422fd43eae44f6ac3bf0831c 100644 (file)
@@ -26,6 +26,9 @@
 #include "common.h"
 
 #define DECISION_MADE_EVENT_ID "decision_made"
+#define DM_EV_WHO "who"
+#define DM_EV_ACTION "act"
+#define DM_EV_ACTION_DATA "actd"
 
 struct decision_made_event {
        struct faultd_event event;
index 9a97fed53b5ea127db479c7f50a094986692ae38..c09f542925a193bcc479cb2232d6b8cf62940c8d 100644 (file)
@@ -86,6 +86,9 @@ static void rv_event_serialize(struct faultd_event *ev, bson *out)
        struct resource_violation_event *rv_ev =
                to_resource_violation_event(ev);
        faultd_event_serialize_internal(ev, out);
+       systemd_service_serialize(&rv_ev->service, out);
+       bson_append_time_t(out, RV_EV_DTIME, rv_ev->detection_time);
+       bson_append_int(out, RV_EV_PID, rv_ev->pid);
 }
 
 static struct faultd_event_type resource_violation_event_type = {
index 32654b520d31ccb6ba6377fc54bf0b784e23efb5..870f486e7e834ba783e64ef2dd114533ab3036a1 100644 (file)
@@ -26,6 +26,8 @@
 #include "service.h"
 
 #define RESOURCE_VIOLATION_EVENT_ID "resource_violation"
+#define RV_EV_DTIME "dt"
+#define RV_EV_PID "pid"
 
 enum resource_type {
        FAULTD_RESOURCE_FD,
index f989b0a0336925c77f5bb0f8b4a12735e87670c2..b05facce6243215377e81638ab6a134803575323 100644 (file)
@@ -84,6 +84,8 @@ static void sf_event_serialize(struct faultd_event *ev, bson *out)
        struct service_failed_event *sf_ev =
                to_service_failed_event(ev);
        faultd_event_serialize_internal(ev, out);
+       systemd_service_serialize(&sf_ev->service, out);
+       bson_append_time_t(out, SF_EV_DTIME, sf_ev->detection_time);
 }
 
 static struct faultd_event_type service_failed_event_type = {
index 6a53a44290084462473974e6546398cf2f133af7..19595bae17379b89b90b94d737e0a7daaca1f8d6 100644 (file)
@@ -26,6 +26,7 @@
 #include "service.h"
 
 #define SERVICE_FAILED_EVENT_ID "service_failed"
+#define SF_EV_DTIME "dt"
 
 struct service_failed_event {
        struct faultd_event event;
index 719f00761b74ac98c9e3863e54e043a6d2be4bb4..b874a43995a3ffa50eaa18395ce1bc7016cd7b52 100644 (file)
 
 #define ARRAY_SIZE(a) (sizeof(a)/sizeof(*a))
 
+#define BSON_OID_IS_ZERO(o) (o.ints[0] == 0 && \
+                                                        o.ints[1] == 0 && \
+                                                        o.ints[2] == 0)
+
 #ifndef offsetof
 #define offsetof(type, member)  __builtin_offsetof(type, member)
 #endif /* offsetof */