mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-24 21:34:08 +03:00
core: Added support for ERRNO NOTIFY_SOCKET message parsing, and added StatusErrno dbus property along StatusText to allow notification of numeric status condition while degraded service operation or any other special situation.
This commit is contained in:
parent
3250929b70
commit
4774e35726
@ -60,6 +60,7 @@ const sd_bus_vtable bus_service_vtable[] = {
|
|||||||
SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Service, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Service, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||||
SD_BUS_PROPERTY("BusName", "s", NULL, offsetof(Service, bus_name), SD_BUS_VTABLE_PROPERTY_CONST),
|
SD_BUS_PROPERTY("BusName", "s", NULL, offsetof(Service, bus_name), SD_BUS_VTABLE_PROPERTY_CONST),
|
||||||
SD_BUS_PROPERTY("StatusText", "s", NULL, offsetof(Service, status_text), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
SD_BUS_PROPERTY("StatusText", "s", NULL, offsetof(Service, status_text), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||||
|
SD_BUS_PROPERTY("StatusErrno", "i", NULL, offsetof(Service, status_errno), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||||
SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Service, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Service, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||||
BUS_EXEC_STATUS_VTABLE("ExecMain", offsetof(Service, main_exec_status), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
BUS_EXEC_STATUS_VTABLE("ExecMain", offsetof(Service, main_exec_status), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
|
||||||
BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPre", offsetof(Service, exec_command[SERVICE_EXEC_START_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
|
BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPre", offsetof(Service, exec_command[SERVICE_EXEC_START_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
|
||||||
|
@ -2637,6 +2637,23 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags) {
|
|||||||
free(t);
|
free(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Interpret ERRNO= */
|
||||||
|
e = strv_find_prefix(tags, "ERRNO=");
|
||||||
|
if (e) {
|
||||||
|
int status_errno;
|
||||||
|
|
||||||
|
if (safe_atoi(e + 6, &status_errno) < 0)
|
||||||
|
log_warning_unit(u->id, "Failed to parse ERRNO= field in notification message: %s", e);
|
||||||
|
else {
|
||||||
|
log_debug_unit(u->id, "%s: got %s", u->id, e);
|
||||||
|
|
||||||
|
if (s->status_errno != status_errno) {
|
||||||
|
s->status_errno = status_errno;
|
||||||
|
notify_dbus = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Interpret WATCHDOG= */
|
/* Interpret WATCHDOG= */
|
||||||
if (strv_find(tags, "WATCHDOG=1")) {
|
if (strv_find(tags, "WATCHDOG=1")) {
|
||||||
log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
|
log_debug_unit(u->id, "%s: got WATCHDOG=1", u->id);
|
||||||
|
@ -182,6 +182,7 @@ struct Service {
|
|||||||
char *bus_name;
|
char *bus_name;
|
||||||
|
|
||||||
char *status_text;
|
char *status_text;
|
||||||
|
int status_errno;
|
||||||
|
|
||||||
FailureAction failure_action;
|
FailureAction failure_action;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user