From 9df084958e7d61b4405a609615ad4558796a03f6 Mon Sep 17 00:00:00 2001 From: Olof hagsand Date: Mon, 17 Feb 2025 09:05:37 +0100 Subject: [PATCH] Add debug trunc flags for parsing and message --- lib/clixon/clixon_debug.h | 5 +++++ lib/src/clixon_debug.c | 2 ++ lib/src/clixon_json.c | 7 +++++-- lib/src/clixon_log.c | 2 ++ lib/src/clixon_netconf_lib.c | 2 +- lib/src/clixon_path.c | 14 ++++++++++---- lib/src/clixon_proto.c | 13 ++++++------- lib/src/clixon_text_syntax.c | 7 +++++-- lib/src/clixon_xml_io.c | 7 +++++-- lib/src/clixon_xpath.c | 7 +++++-- lib/src/clixon_yang_parse_lib.c | 7 +++++-- lib/src/clixon_yang_sub_parse.c | 14 ++++++++++---- 12 files changed, 61 insertions(+), 26 deletions(-) diff --git a/lib/clixon/clixon_debug.h b/lib/clixon/clixon_debug.h index c392fa98..f83ec14a 100644 --- a/lib/clixon/clixon_debug.h +++ b/lib/clixon/clixon_debug.h @@ -85,6 +85,11 @@ #define CLIXON_DBG_APP3 0x00400000 /* External application 3 */ #define CLIXON_DBG_SMASK 0x00ffffff /* Subject mask */ +/* Misc */ +#define CLIXON_DBG_TRUNC 0x10000000 /* Explicit truncate debug message. + * Note Implicit: log_string_limit overrides + */ + /* * Macros */ diff --git a/lib/src/clixon_debug.c b/lib/src/clixon_debug.c index fb1a69f4..40f86c43 100644 --- a/lib/src/clixon_debug.c +++ b/lib/src/clixon_debug.c @@ -257,6 +257,8 @@ clixon_debug_fn(clixon_handle h, /* Truncate long debug strings */ if ((trunc = clixon_log_string_limit_get()) && trunc < cbuf_len(cb)) cbuf_trunc(cb, trunc); + else if ((dbglevel & CLIXON_DBG_TRUNC) && 80 < cbuf_len(cb)) + cbuf_trunc(cb, 80); clixon_log_str(LOG_DEBUG, cbuf_get(cb)); ok: retval = 0; diff --git a/lib/src/clixon_json.c b/lib/src/clixon_json.c index 46690cf8..e6ecd9f8 100644 --- a/lib/src/clixon_json.c +++ b/lib/src/clixon_json.c @@ -1455,7 +1455,10 @@ _json_parse(char *str, int i; int failed = 0; /* yang assignment */ - clixon_debug(CLIXON_DBG_PARSE, "%s", str); + if (clixon_debug_get() & CLIXON_DBG_DETAIL) + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "%s", str); + else + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_TRUNC, "%s", str); jy.jy_parse_string = str; jy.jy_linenum = 1; jy.jy_current = xt; @@ -1541,7 +1544,7 @@ _json_parse(char *str, goto done; retval = 1; done: - clixon_debug(CLIXON_DBG_PARSE, "retval:%d", retval); + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "retval:%d", retval); if (cberr) cbuf_free(cberr); json_parse_exit(&jy); diff --git a/lib/src/clixon_log.c b/lib/src/clixon_log.c index 3ebdd75a..e9d5aea1 100644 --- a/lib/src/clixon_log.c +++ b/lib/src/clixon_log.c @@ -240,6 +240,8 @@ clixon_logflags_set(uint16_t flags) } /*! Truncate log/debug string length + * + * @see CLICON_LOG_STRING_LIMIT option */ int clixon_log_string_limit_set(size_t sz) diff --git a/lib/src/clixon_netconf_lib.c b/lib/src/clixon_netconf_lib.c index 71f44a68..d7ebedff 100644 --- a/lib/src/clixon_netconf_lib.c +++ b/lib/src/clixon_netconf_lib.c @@ -2299,7 +2299,7 @@ netconf_output(int s, if (clixon_debug_detail()) clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_DETAIL, "Send ext: %s", cbuf_get(cb)); else - clixon_debug(CLIXON_DBG_MSG, "Send ext len: %lu", cbuf_len(cb)); + clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_TRUNC, "Send ext: %s", cbuf_get(cb)); #if 0 // Extra sanity check for debugging { cxobj *xt = NULL; diff --git a/lib/src/clixon_path.c b/lib/src/clixon_path.c index deb57a99..55765f7b 100644 --- a/lib/src/clixon_path.c +++ b/lib/src/clixon_path.c @@ -132,7 +132,10 @@ api_path_parse(char *api_path, int retval = -1; clixon_api_path_yacc ay = {0,}; - clixon_debug(CLIXON_DBG_PARSE, "%s", api_path); + if (clixon_debug_get() & CLIXON_DBG_DETAIL) + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "%s", api_path); + else + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_TRUNC, "%s", api_path); ay.ay_parse_string = api_path; ay.ay_name = "api-path parser"; ay.ay_linenum = 1; @@ -151,7 +154,7 @@ api_path_parse(char *api_path, *cplist = ay.ay_top; retval = 0; done: - clixon_debug(CLIXON_DBG_PARSE, "retval: %d", retval); + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "retval: %d", retval); return retval; } @@ -178,7 +181,10 @@ instance_id_parse(char *path, int retval = -1; clixon_instance_id_yacc iy = {0,}; - clixon_debug(CLIXON_DBG_PARSE, "%s", path); + if (clixon_debug_get() & CLIXON_DBG_DETAIL) + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "%s", path); + else + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_TRUNC, "%s", path); iy.iy_parse_string = path; iy.iy_name = "instance-id parser"; iy.iy_linenum = 1; @@ -197,7 +203,7 @@ instance_id_parse(char *path, *cplist = iy.iy_top; retval = 0; done: - clixon_debug(CLIXON_DBG_PARSE, "retval: %d", retval); + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "retval: %d", retval); return retval; } diff --git a/lib/src/clixon_proto.c b/lib/src/clixon_proto.c index 94de119d..9aa86c57 100644 --- a/lib/src/clixon_proto.c +++ b/lib/src/clixon_proto.c @@ -357,13 +357,13 @@ clixon_msg_send(int s, if (clixon_debug_detail()) clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_DETAIL, "Send [%s] %s", descr, cbuf_get(cb)); else - clixon_debug(CLIXON_DBG_MSG, "Send [%s] len: %lu", descr, cbuf_len(cb)); + clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_TRUNC, "Send [%s] %s", descr, cbuf_get(cb)); } else{ if (clixon_debug_detail()) clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_DETAIL, "Send %s", cbuf_get(cb)); else - clixon_debug(CLIXON_DBG_MSG, "Send len: %lu", cbuf_len(cb)); + clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_TRUNC, "Send %s", cbuf_get(cb)); } if (atomicio((ssize_t (*)(int, void *, size_t))write, @@ -440,13 +440,13 @@ clixon_msg_rcv10(int s, if (clixon_debug_detail()) clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_DETAIL, "Recv [%s]: %s", descr, cbuf_get(cb)); else - clixon_debug(CLIXON_DBG_MSG, "Recv [%s] len: %lu", descr, cbuf_len(cb)); + clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_TRUNC, "Recv [%s]: %s", descr, cbuf_get(cb)); } else{ if (clixon_debug_detail()) clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_DETAIL, "Recv: %s", cbuf_get(cb)); else - clixon_debug(CLIXON_DBG_MSG, "Recv len: %lu", cbuf_len(cb)); + clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_TRUNC, "Recv: %s", cbuf_get(cb)); } } @@ -622,14 +622,13 @@ clixon_msg_rcv11(int s, if (clixon_debug_detail()) clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_DETAIL, "Recv [%s]: %s", descr, cbuf_get(cbmsg)); else - clixon_debug(CLIXON_DBG_MSG, "Recv [%s] len: %lu", descr, cbuf_len(cbmsg)); + clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_TRUNC, "Recv [%s]: %s", descr, cbuf_get(cbmsg)); } else{ if (clixon_debug_detail()) clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_DETAIL, "Recv: %s", cbuf_get(cbmsg)); else - clixon_debug(CLIXON_DBG_MSG, "Recv len: %lu", cbuf_len(cbmsg)); - + clixon_debug(CLIXON_DBG_MSG | CLIXON_DBG_TRUNC, "Recv: %s", cbuf_get(cbmsg)); } } diff --git a/lib/src/clixon_text_syntax.c b/lib/src/clixon_text_syntax.c index 73bd6889..9ee24b82 100644 --- a/lib/src/clixon_text_syntax.c +++ b/lib/src/clixon_text_syntax.c @@ -1011,7 +1011,10 @@ _text_syntax_parse(char *str, int failed = 0; /* yang assignment */ cxobj *xc; - clixon_debug(CLIXON_DBG_PARSE, "%s", str); + if (clixon_debug_get() & CLIXON_DBG_DETAIL) + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "%s", str); + else + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_TRUNC, "%s", str); if (yb != YB_MODULE && yb != YB_MODULE_NEXT){ clixon_err(OE_YANG, EINVAL, "yb must be YB_MODULE or YB_MODULE_NEXT"); return -1; @@ -1068,7 +1071,7 @@ _text_syntax_parse(char *str, goto done; retval = 1; done: - clixon_debug(CLIXON_DBG_PARSE, "retval:%d", retval); + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "retval:%d", retval); if (cberr) cbuf_free(cberr); clixon_text_syntax_parsel_exit(&ts); diff --git a/lib/src/clixon_xml_io.c b/lib/src/clixon_xml_io.c index 0e6a3251..2919fd5d 100644 --- a/lib/src/clixon_xml_io.c +++ b/lib/src/clixon_xml_io.c @@ -873,7 +873,10 @@ _xml_parse(const char *str, int failed = 0; /* yang assignment */ int i; - clixon_debug(CLIXON_DBG_PARSE, "%s", str); + if (clixon_debug_get() & CLIXON_DBG_DETAIL) + clixon_debug(CLIXON_DBG_PARSE | CLIXON_DBG_DETAIL, "%s", str); + else + clixon_debug(CLIXON_DBG_PARSE & CLIXON_DBG_TRUNC, "%s", str); if (strlen(str) == 0){ return 1; /* OK */ } @@ -951,7 +954,7 @@ _xml_parse(const char *str, goto done; retval = 1; done: - clixon_debug(CLIXON_DBG_PARSE, "retval:%d", retval); + clixon_debug(CLIXON_DBG_PARSE | CLIXON_DBG_DETAIL, "retval:%d", retval); clixon_xml_parsel_exit(&xy); if (xy.xy_parse_string != NULL) free(xy.xy_parse_string); diff --git a/lib/src/clixon_xpath.c b/lib/src/clixon_xpath.c index 2fd13504..1f883ed4 100644 --- a/lib/src/clixon_xpath.c +++ b/lib/src/clixon_xpath.c @@ -561,7 +561,10 @@ xpath_parse(const char *xpath, clixon_xpath_yacc xpy = {0,}; cbuf *cb = NULL; - clixon_debug(CLIXON_DBG_PARSE, "%s", xpath); + if (clixon_debug_get() & CLIXON_DBG_DETAIL) + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "%s", xpath); + else + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_TRUNC, "%s", xpath); if (xpath == NULL){ clixon_err(OE_XML, EINVAL, "XPath is NULL"); goto done; @@ -596,7 +599,7 @@ xpath_parse(const char *xpath, } retval = 0; done: - clixon_debug(CLIXON_DBG_PARSE, "retval:%d", retval); + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "retval:%d", retval); if (cb) cbuf_free(cb); if (xpy.xpy_top) diff --git a/lib/src/clixon_yang_parse_lib.c b/lib/src/clixon_yang_parse_lib.c index 2aeba43b..fb17def4 100644 --- a/lib/src/clixon_yang_parse_lib.c +++ b/lib/src/clixon_yang_parse_lib.c @@ -866,7 +866,10 @@ yang_parse_str(char *str, clixon_yang_yacc yy = {0,}; yang_stmt *ymod = NULL; - clixon_debug(CLIXON_DBG_PARSE, "%s", str); + if (clixon_debug_get() & CLIXON_DBG_DETAIL) + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "%s", str); + else + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_TRUNC, "%s", str); if (yspec == NULL){ clixon_err(OE_YANG, 0, "Yang parse need top level yang spec"); goto done; @@ -907,7 +910,7 @@ yang_parse_str(char *str, yspec_nscache_clear(yspec); #endif done: - clixon_debug(CLIXON_DBG_PARSE, "retval:%p", ymod); + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "retval:%p", ymod); ystack_pop(&yy); if (yy.yy_stack) free (yy.yy_stack); diff --git a/lib/src/clixon_yang_sub_parse.c b/lib/src/clixon_yang_sub_parse.c index 2f4c2d02..f7f4a18b 100644 --- a/lib/src/clixon_yang_sub_parse.c +++ b/lib/src/clixon_yang_sub_parse.c @@ -83,7 +83,10 @@ yang_subparse(clixon_handle h, int retval = -1; clixon_yang_sub_parse_yacc ife = {0,}; - clixon_debug(CLIXON_DBG_PARSE, "%s", str); + if (clixon_debug_get() & CLIXON_DBG_DETAIL) + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "%s", str); + else + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_TRUNC, "%s", str); ife.if_parse_string = str; ife.if_linenum = linenum; if (enabled) @@ -102,7 +105,7 @@ yang_subparse(clixon_handle h, *enabled = ife.if_enabled; retval = 0; done: - clixon_debug(CLIXON_DBG_PARSE, "retval:%d", retval); + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "retval:%d", retval); clixon_yang_sub_parsel_exit(&ife); return retval; } @@ -126,7 +129,10 @@ yang_schema_nodeid_subparse(char *str, int retval = -1; clixon_yang_schemanode_yacc ife = {0,}; - clixon_debug(CLIXON_DBG_PARSE | CLIXON_DBG_DETAIL, "%s", str); + if (clixon_debug_get() & CLIXON_DBG_DETAIL) + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "%s", str); + else + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_TRUNC, "%s", str); ife.if_parse_string = str; ife.if_linenum = linenum; ife.if_mainfile = mainfile; @@ -140,7 +146,7 @@ yang_schema_nodeid_subparse(char *str, } retval = 0; done: - clixon_debug(CLIXON_DBG_PARSE | CLIXON_DBG_DETAIL, "retval:%d", retval); + clixon_debug(CLIXON_DBG_PARSE|CLIXON_DBG_DETAIL, "retval:%d", retval); clixon_yang_schemanode_parsel_exit(&ife); return retval; }