From: John Crispin Date: Wed, 4 Jun 2014 19:50:00 +0000 (+0100) Subject: send ubus_notify events when servers and instances change state X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=1fd4e60e9d03c0e3aa79f5f0bac87f07c63081f5;p=oweals%2Fprocd.git send ubus_notify events when servers and instances change state Signed-off-by: John Crispin --- diff --git a/service/instance.c b/service/instance.c index fa3594b..e410bc4 100644 --- a/service/instance.c +++ b/service/instance.c @@ -188,6 +188,7 @@ instance_start(struct service_instance *in) in->proc.pid = pid; clock_gettime(CLOCK_MONOTONIC, &in->start); uloop_process_add(&in->proc); + service_event("instance.start", in->srv->name, in->name); } static void @@ -236,6 +237,7 @@ instance_exit(struct uloop_process *p, int ret) uloop_timeout_set(&in->timeout, in->respawn_timeout * 1000); } } + service_event("instance.stop", in->srv->name, in->name); } void diff --git a/service/service.c b/service/service.c index 8d1217f..6426929 100644 --- a/service/service.c +++ b/service/service.c @@ -24,6 +24,7 @@ struct avl_tree services; static struct blob_buf b; +static struct ubus_context *ctx; static void service_instance_add(struct service *s, struct blob_attr *attr) @@ -146,6 +147,7 @@ service_update(struct service *s, struct blob_attr **tb, bool add) static void service_delete(struct service *s) { + service_event("service.stop", s->name, NULL); vlist_flush_all(&s->instances); avl_delete(&services, &s->avl); trigger_del(s); @@ -242,6 +244,8 @@ service_handle_set(struct ubus_context *ctx, struct ubus_object *obj, avl_insert(&services, &s->avl); + service_event("service.start", s->name, NULL); + return 0; } @@ -447,8 +451,18 @@ service_start_early(char *name, char *cmdline) return service_handle_set(NULL, NULL, NULL, "add", b.head); } -void ubus_init_service(struct ubus_context *ctx) +void service_event(const char *type, const char *service, const char *instance) +{ + blob_buf_init(&b, 0); + blobmsg_add_string(&b, "service", service); + if (instance) + blobmsg_add_string(&b, "instance", instance); + ubus_notify(ctx, &main_object, type, b.head, -1); +} + +void ubus_init_service(struct ubus_context *_ctx) { + ctx = _ctx; ubus_add_object(ctx, &main_object); } diff --git a/service/service.h b/service/service.h index 46ba746..892a147 100644 --- a/service/service.h +++ b/service/service.h @@ -53,5 +53,6 @@ int service_start_early(char *name, char *cmdline); void service_validate_del(struct service *s); void service_validate_init(void); void service_init(void); +void service_event(const char *type, const char *service, const char *instance); #endif