mirror of
https://github.com/systemd/systemd.git
synced 2025-03-22 06:50:18 +03:00
udev-varlink: allow to enable/disable trace logging through varlink
This introduces io.systemd.Udev.SetTrace varlink method. With the method, trace logging by udev worker can be dynamically controlled.
This commit is contained in:
parent
695c592a03
commit
993b481ad1
@ -2,6 +2,11 @@
|
||||
|
||||
#include "varlink-io.systemd.Udev.h"
|
||||
|
||||
static SD_VARLINK_DEFINE_METHOD(
|
||||
SetTrace,
|
||||
SD_VARLINK_FIELD_COMMENT("Enable/disable."),
|
||||
SD_VARLINK_DEFINE_INPUT(enable, SD_VARLINK_BOOL, 0));
|
||||
|
||||
static SD_VARLINK_DEFINE_METHOD(
|
||||
SetChildrenMax,
|
||||
SD_VARLINK_FIELD_COMMENT("The maximum number of child processes. When 0 is specified, the maximum is determined based on the system resources."),
|
||||
@ -22,6 +27,8 @@ SD_VARLINK_DEFINE_INTERFACE(
|
||||
io_systemd_Udev,
|
||||
"io.systemd.Udev",
|
||||
SD_VARLINK_INTERFACE_COMMENT("An interface for controlling systemd-udevd."),
|
||||
SD_VARLINK_SYMBOL_COMMENT("Enable/disable trace logging."),
|
||||
&vl_method_SetTrace,
|
||||
SD_VARLINK_SYMBOL_COMMENT("Sets the maximum number of child processes."),
|
||||
&vl_method_SetChildrenMax,
|
||||
SD_VARLINK_SYMBOL_COMMENT("Sets the global udev properties."),
|
||||
|
@ -345,6 +345,21 @@ void manager_set_log_level(Manager *manager, int log_level) {
|
||||
manager_kill_workers(manager, /* force = */ false);
|
||||
}
|
||||
|
||||
void manager_set_trace(Manager *manager, bool enable) {
|
||||
assert(manager);
|
||||
|
||||
bool old = manager->config.trace;
|
||||
|
||||
manager->config_by_control.trace = enable;
|
||||
manager_merge_config_log_level(manager);
|
||||
|
||||
if (manager->config.trace == old)
|
||||
return;
|
||||
|
||||
log_set_max_level(manager->config.log_level);
|
||||
manager_kill_workers(manager, /* force = */ false);
|
||||
}
|
||||
|
||||
static void manager_adjust_config(UdevConfig *config) {
|
||||
assert(config);
|
||||
|
||||
|
@ -29,6 +29,7 @@ typedef struct UdevConfig {
|
||||
|
||||
void manager_set_children_max(Manager *manager, unsigned n);
|
||||
void manager_set_log_level(Manager *manager, int log_level);
|
||||
void manager_set_trace(Manager *manager, bool enable);
|
||||
void manager_set_environment(Manager *manager, char * const *v);
|
||||
|
||||
int manager_load(Manager *manager, int argc, char *argv[]);
|
||||
|
@ -43,6 +43,26 @@ static int vl_method_set_log_level(sd_varlink *link, sd_json_variant *parameters
|
||||
return sd_varlink_reply(link, NULL);
|
||||
}
|
||||
|
||||
static int vl_method_set_trace(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
|
||||
bool enable;
|
||||
int r;
|
||||
|
||||
static const sd_json_dispatch_field dispatch_table[] = {
|
||||
{ "enable", SD_JSON_VARIANT_BOOLEAN, sd_json_dispatch_stdbool, 0, SD_JSON_MANDATORY },
|
||||
{}
|
||||
};
|
||||
|
||||
assert(link);
|
||||
|
||||
r = sd_varlink_dispatch(link, parameters, dispatch_table, &enable);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
log_debug("Received io.systemd.service.SetTrace(%s)", yes_no(enable));
|
||||
manager_set_trace(userdata, enable);
|
||||
return sd_varlink_reply(link, NULL);
|
||||
}
|
||||
|
||||
static int vl_method_set_children_max(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
|
||||
unsigned n;
|
||||
int r;
|
||||
@ -160,6 +180,7 @@ int manager_start_varlink_server(Manager *manager) {
|
||||
"io.systemd.service.Reload", vl_method_reload,
|
||||
"io.systemd.service.SetLogLevel", vl_method_set_log_level,
|
||||
"io.systemd.service.GetEnvironment", varlink_method_get_environment,
|
||||
"io.systemd.Udev.SetTrace", vl_method_set_trace,
|
||||
"io.systemd.Udev.SetChildrenMax", vl_method_set_children_max,
|
||||
"io.systemd.Udev.SetEnvironment", vl_method_set_environment,
|
||||
"io.systemd.Udev.StartExecQueue", vl_method_start_stop_exec_queue,
|
||||
|
Loading…
x
Reference in New Issue
Block a user