Message ID | 1463054944-6207-2-git-send-email-dnbugnar@ocedo.com |
---|---|
State | Changes Requested |
Headers | show |
Dan Bugnar <danutbug@gmail.com> wrote: > From: Dan Bugnar <danutbug@gmail.com> > > Add logd link to uci library, to read the system config file > and get the buffer size. Remove the -S option support and use > just the option from the config file. Why do you need this exactly? It's already being parsed from the config file by the init script, and that is much less code than adding all of uci parsing into logd? Cheers, Karl P
On Thu, May 12, 2016 at 5:30 PM, Karl Palsson <karlp@tweak.net.au> wrote: > > > Dan Bugnar <danutbug@gmail.com> wrote: > > From: Dan Bugnar <danutbug@gmail.com> > > > > Add logd link to uci library, to read the system config file > > and get the buffer size. Remove the -S option support and use > > just the option from the config file. > > > Why do you need this exactly? It's already being parsed from the > config file by the init script, and that is much less code than > adding all of uci parsing into logd? > > Cheers, > Karl P > _______________________________________________ > Lede-dev mailing list > Lede-dev@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/lede-dev > [ Forwarding to lede-dev too ; my GMail complained about HTML not being allowed ] Doing a reload on logd (to increase the buffer size), should not clear out the previous log info. By default logd's reload, is a logd restart. The end game is to do a proper reload, and keep whatever info was logged, before the reload (if doing a log buffer increase).
On 2016-05-12 14:09, Dan Bugnar wrote: > From: Dan Bugnar <danutbug@gmail.com> > > Add logd link to uci library, to read the system config file and get the buffer size. > Remove the -S option support and use just the option from the config file. > > Signed-off-by: Dan Bugnar <danutbug@gmail.com> I'd prefer a change where logd provides an ubus method to change the log size instead of introducing a dependency on libuci. This would be easy to hook into the init script as well for reload. Thanks, - Felix
On 12/05/2016 14:09, Dan Bugnar wrote: > From: Dan Bugnar <danutbug@gmail.com> > > Add logd link to uci library, to read the system config file and get the buffer size. > Remove the -S option support and use just the option from the config file. > > Signed-off-by: Dan Bugnar <danutbug@gmail.com> NAK, logd should not get a dependency on uci. if you want to change the buffer size there are 2 options 1) restart the log daemon with a bigger default buffer 2) add a ubus call that will realloc the buffer and copy the existing data John > --- > CMakeLists.txt | 2 +- > log/logd.c | 60 ++++++++++++++++++++++++++++++++++++++++++++-------------- > log/syslog.c | 8 +------- > log/syslog.h | 2 +- > 4 files changed, 49 insertions(+), 23 deletions(-) > > diff --git a/CMakeLists.txt b/CMakeLists.txt > index 834b5b6..b635c4a 100644 > --- a/CMakeLists.txt > +++ b/CMakeLists.txt > @@ -42,7 +42,7 @@ INSTALL(TARGETS validate_data > ) > > ADD_EXECUTABLE(logd log/logd.c log/syslog.c) > -TARGET_LINK_LIBRARIES(logd ubox ubus) > +TARGET_LINK_LIBRARIES(logd ubox ubus uci) > INSTALL(TARGETS logd > RUNTIME DESTINATION sbin > ) > diff --git a/log/logd.c b/log/logd.c > index 27d3cac..6e493d0 100644 > --- a/log/logd.c > +++ b/log/logd.c > @@ -23,9 +23,14 @@ > #include <libubox/list.h> > #include <libubox/ustream.h> > #include <libubus.h> > +#include <uci.h> > > #include "syslog.h" > > +#define SYSTEM_CONFIG_PATH "/etc/config" > +#define SYSTEM_CONFIG "system" > +#define LOG_DEFAULT_SIZE 16 > + > int debug = 0; > static struct blob_buf b; > static struct ubus_auto_conn conn; > @@ -124,9 +129,48 @@ write_log(struct ubus_context *ctx, struct ubus_object *obj, > return 0; > } > > +static void > +config_reload() > +{ > + struct uci_context *ctx; > + struct uci_package *p; > + struct uci_element *e; > + int size = LOG_DEFAULT_SIZE; > + > + ctx = uci_alloc_context(); > + if (!ctx) { > + fprintf(stderr, "Could not allocate memory for config\n"); > + exit(-1); > + } > + ctx->flags &= ~UCI_FLAG_STRICT; > + uci_set_confdir(ctx, SYSTEM_CONFIG_PATH); > + if (uci_load(ctx, SYSTEM_CONFIG, &p) == 0){ > + uci_foreach_element(&p->sections, e){ > + struct uci_section *s = uci_to_section(e); > + if (strcmp(s->type, "system") == 0){ > + const char *buffer_size = uci_lookup_option_string(ctx, s, "log_buffer_size"); > + if (buffer_size != NULL) > + size = atoi(buffer_size); > + break; > + } > + } > + } > + uci_free_context(ctx); > + log_buffer_reinit(size * 1024); > +} > + > +static int > +reload_log(struct ubus_context *ctx, struct ubus_object *obj, > + struct ubus_request_data *req, const char *method, > + struct blob_attr *msg) > +{ > + config_reload(); > + return 0; > +} > static const struct ubus_method log_methods[] = { > { .name = "read", .handler = read_log, .policy = &read_policy, .n_policy = 1 }, > { .name = "write", .handler = write_log, .policy = &write_policy, .n_policy = 1 }, > + { .name = "reload", .handler = reload_log }, > }; > > static struct ubus_object_type log_object_type = > @@ -176,22 +220,10 @@ ubus_connect_handler(struct ubus_context *ctx) > int > main(int argc, char **argv) > { > - int ch, log_size = 16; > - > signal(SIGPIPE, SIG_IGN); > - while ((ch = getopt(argc, argv, "S:")) != -1) { > - switch (ch) { > - case 'S': > - log_size = atoi(optarg); > - if (log_size < 1) > - log_size = 16; > - break; > - } > - } > - log_size *= 1024; > - > uloop_init(); > - log_init(log_size); > + config_reload(); > + log_init(); > conn.cb = ubus_connect_handler; > ubus_auto_connect(&conn); > uloop_run(); > diff --git a/log/syslog.c b/log/syslog.c > index d6cb868..683eeb8 100644 > --- a/log/syslog.c > +++ b/log/syslog.c > @@ -270,16 +270,10 @@ log_buffer_reinit(int size) > } > > void > -log_init(int _log_size) > +log_init() > { > regcomp(&pat_prio, "^<([0-9]*)>(.*)", REG_EXTENDED); > regcomp(&pat_tstamp, "^\[[ 0]*([0-9]*).([0-9]*)] (.*)", REG_EXTENDED); > - > - if (log_buffer_reinit(_log_size)) { > - fprintf(stderr, "Failed to allocate log memory\n"); > - exit(-1); > - } > - > syslog_open(); > klog_open(); > openlog("sysinit", LOG_CONS, LOG_DAEMON); > diff --git a/log/syslog.h b/log/syslog.h > index ed5a41b..fe815b9 100644 > --- a/log/syslog.h > +++ b/log/syslog.h > @@ -30,7 +30,7 @@ struct log_head { > char data[]; > }; > > -void log_init(int log_size); > +void log_init(); > void log_shutdown(void); > > typedef void (*log_list_cb)(struct log_head *h); >
diff --git a/CMakeLists.txt b/CMakeLists.txt index 834b5b6..b635c4a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,7 @@ INSTALL(TARGETS validate_data ) ADD_EXECUTABLE(logd log/logd.c log/syslog.c) -TARGET_LINK_LIBRARIES(logd ubox ubus) +TARGET_LINK_LIBRARIES(logd ubox ubus uci) INSTALL(TARGETS logd RUNTIME DESTINATION sbin ) diff --git a/log/logd.c b/log/logd.c index 27d3cac..6e493d0 100644 --- a/log/logd.c +++ b/log/logd.c @@ -23,9 +23,14 @@ #include <libubox/list.h> #include <libubox/ustream.h> #include <libubus.h> +#include <uci.h> #include "syslog.h" +#define SYSTEM_CONFIG_PATH "/etc/config" +#define SYSTEM_CONFIG "system" +#define LOG_DEFAULT_SIZE 16 + int debug = 0; static struct blob_buf b; static struct ubus_auto_conn conn; @@ -124,9 +129,48 @@ write_log(struct ubus_context *ctx, struct ubus_object *obj, return 0; } +static void +config_reload() +{ + struct uci_context *ctx; + struct uci_package *p; + struct uci_element *e; + int size = LOG_DEFAULT_SIZE; + + ctx = uci_alloc_context(); + if (!ctx) { + fprintf(stderr, "Could not allocate memory for config\n"); + exit(-1); + } + ctx->flags &= ~UCI_FLAG_STRICT; + uci_set_confdir(ctx, SYSTEM_CONFIG_PATH); + if (uci_load(ctx, SYSTEM_CONFIG, &p) == 0){ + uci_foreach_element(&p->sections, e){ + struct uci_section *s = uci_to_section(e); + if (strcmp(s->type, "system") == 0){ + const char *buffer_size = uci_lookup_option_string(ctx, s, "log_buffer_size"); + if (buffer_size != NULL) + size = atoi(buffer_size); + break; + } + } + } + uci_free_context(ctx); + log_buffer_reinit(size * 1024); +} + +static int +reload_log(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) +{ + config_reload(); + return 0; +} static const struct ubus_method log_methods[] = { { .name = "read", .handler = read_log, .policy = &read_policy, .n_policy = 1 }, { .name = "write", .handler = write_log, .policy = &write_policy, .n_policy = 1 }, + { .name = "reload", .handler = reload_log }, }; static struct ubus_object_type log_object_type = @@ -176,22 +220,10 @@ ubus_connect_handler(struct ubus_context *ctx) int main(int argc, char **argv) { - int ch, log_size = 16; - signal(SIGPIPE, SIG_IGN); - while ((ch = getopt(argc, argv, "S:")) != -1) { - switch (ch) { - case 'S': - log_size = atoi(optarg); - if (log_size < 1) - log_size = 16; - break; - } - } - log_size *= 1024; - uloop_init(); - log_init(log_size); + config_reload(); + log_init(); conn.cb = ubus_connect_handler; ubus_auto_connect(&conn); uloop_run(); diff --git a/log/syslog.c b/log/syslog.c index d6cb868..683eeb8 100644 --- a/log/syslog.c +++ b/log/syslog.c @@ -270,16 +270,10 @@ log_buffer_reinit(int size) } void -log_init(int _log_size) +log_init() { regcomp(&pat_prio, "^<([0-9]*)>(.*)", REG_EXTENDED); regcomp(&pat_tstamp, "^\[[ 0]*([0-9]*).([0-9]*)] (.*)", REG_EXTENDED); - - if (log_buffer_reinit(_log_size)) { - fprintf(stderr, "Failed to allocate log memory\n"); - exit(-1); - } - syslog_open(); klog_open(); openlog("sysinit", LOG_CONS, LOG_DAEMON); diff --git a/log/syslog.h b/log/syslog.h index ed5a41b..fe815b9 100644 --- a/log/syslog.h +++ b/log/syslog.h @@ -30,7 +30,7 @@ struct log_head { char data[]; }; -void log_init(int log_size); +void log_init(); void log_shutdown(void); typedef void (*log_list_cb)(struct log_head *h);