From 8c9ef6745167959855cf6671a9540cef04492e9e Mon Sep 17 00:00:00 2001
From: Maciej Lipinski <maciej.lipinski@cern.ch>
Date: Tue, 18 Jun 2019 18:48:19 +0200
Subject: [PATCH] [issue #194] add facility to wrs_msg and
 <facility*8+priority> to output msgs

Logger can interpret get log facility & level (error, info, etc) from
log message if such info is provided properly. I.e. it needs to be
enclosed in <> and the first thing in the message. The wrs-msg.c file
in the libwr was changed such that the log facility & level ares properly
printed in log messages, and thus later properly interpreted by the syslog
elastic search on the server. For this, wrs_msg lib needs to know the
faciltiy of the application that uses it. Thus, the wrs_msg_init()
function was updated (in the library and all its calls in applications)
---
 userspace/libwr/include/libwr/wrs-msg.h |  4 +++-
 userspace/libwr/wrs-msg.c               | 17 ++++++++++-------
 userspace/tools/wr_mon.c                |  2 +-
 userspace/tools/wr_phytool.c            |  2 +-
 userspace/tools/wrs_checkcfg.c          |  2 +-
 userspace/tools/wrs_leapsec.c           |  2 +-
 userspace/tools/wrs_sfp_dump.c          |  2 +-
 userspace/tools/wrs_status_led.c        |  2 +-
 userspace/tools/wrs_throttling.c        |  2 +-
 userspace/tools/wrs_version.c           |  2 +-
 userspace/tools/wrs_vlans.c             |  2 +-
 userspace/wrs_watchdog/wrs_watchdog.c   |  2 +-
 userspace/wrsw_hal/hal_main.c           |  2 +-
 userspace/wrsw_rtud/rtud.c              |  2 +-
 14 files changed, 25 insertions(+), 20 deletions(-)

diff --git a/userspace/libwr/include/libwr/wrs-msg.h b/userspace/libwr/include/libwr/wrs-msg.h
index 4b04ede1c..5ea28726e 100644
--- a/userspace/libwr/include/libwr/wrs-msg.h
+++ b/userspace/libwr/include/libwr/wrs-msg.h
@@ -28,7 +28,7 @@ extern void wrs_msg_filename(char *name);
 extern int wrs_msg_level; /* user can set it in main() or whatever */
 
 /* Optional: prepare all defaults. Like argv[0] to be prefixed, signals... */
-extern void wrs_msg_init(int argc, char **argv);
+extern void wrs_msg_init(int argc, char **argv, int facility);
 
 #ifdef DEBUG /* We had it, so let's keep this build-time thing */
 #  define WRS_MSG_DEFAULT_LEVEL    LOG_DEBUG
@@ -36,6 +36,8 @@ extern void wrs_msg_init(int argc, char **argv);
 #  define WRS_MSG_DEFAULT_LEVEL    LOG_INFO
 #endif
 
+#define WRS_MSG_DEFAULT_FACILITY LOG_USER /* User facility by default */
+
 #define WRS_MSG_DETAILS_AT  LOG_DEBUG /* >= for debug use __LINE__ */
 
 /* This is the external function for it all */
diff --git a/userspace/libwr/wrs-msg.c b/userspace/libwr/wrs-msg.c
index 44a3e53de..7208650ca 100644
--- a/userspace/libwr/wrs-msg.c
+++ b/userspace/libwr/wrs-msg.c
@@ -14,6 +14,7 @@
 #endif
 
 int wrs_msg_level = WRS_MSG_DEFAULT_LEVEL;
+int wrs_msg_facility = WRS_MSG_DEFAULT_FACILITY;
 
 /* We use debug, info, warning, error and "silent" */
 static int wrs_msg_used_levels[] = {
@@ -40,7 +41,7 @@ static FILE *wrs_msg_f = (FILE *)-1; /* Means "not yet set" */
 static char *prgname; /* always print argv[0], or we get lost */
 
 /* This function is optional, up to the user whether to call it or not */
-void wrs_msg_init(int argc, char **argv)
+void wrs_msg_init(int argc, char **argv, int facility)
 {
 	int i;
 	int max = ARRAY_SIZE(wrs_msg_used_levels) - 1;
@@ -116,6 +117,7 @@ void wrs_msg_init(int argc, char **argv)
 	}
 
 	wrs_msg_level = wrs_msg_used_levels[wrs_msg_pos];
+	wrs_msg_facility = facility;
 
 	/* Prepare for run-time changes */
 	signal(SIGUSR1, wrs_msg_sighandler);
@@ -139,11 +141,11 @@ void __wrs_msg(int level, const char *func, int line, const char *fmt, ...)
 {
 	va_list args;
 	static char *header_string[] = {
-		[LOG_ALERT] = "",
-		[LOG_ERR] = "Error: ",
-		[LOG_WARNING] = "Warning: ",
-		[LOG_INFO] = "",
-		[LOG_DEBUG] = ""
+		[LOG_ALERT]   = "Alert  ",
+		[LOG_ERR]     = "Error  ",
+		[LOG_WARNING] = "Warning",
+		[LOG_INFO]    = "Info   ",
+		[LOG_DEBUG]   = "Debug  "
 	};
 
 	/* If the user didn't set the file, nor init, enforce default now */
@@ -158,7 +160,8 @@ void __wrs_msg(int level, const char *func, int line, const char *fmt, ...)
 		asprintf(&prgname, "<pid-%i>", getpid());
 
 	/* Program name and header, and possibly function and line too */
-	fprintf(wrs_msg_f, "%s: %s", prgname, header_string[level]);
+	fprintf(wrs_msg_f, "<%d>%s (%s):", (wrs_msg_facility | level),
+		header_string[level], prgname);
 	if (level >= WRS_MSG_DETAILS_AT)
 		fprintf(wrs_msg_f, "%s:%i: ", func, line);
 
diff --git a/userspace/tools/wr_mon.c b/userspace/tools/wr_mon.c
index 73566beae..a2b590bbb 100644
--- a/userspace/tools/wr_mon.c
+++ b/userspace/tools/wr_mon.c
@@ -1137,7 +1137,7 @@ int main(int argc, char *argv[])
 	/* try a pps_gen based approach */
 	uint64_t last_seconds = 0;
 
-	wrs_msg_init(argc, argv);
+	wrs_msg_init(argc, argv, LOG_USER);
 
 	while ((opt = getopt(argc, argv, "himsoetabwqvH:")) != -1) {
 		switch(opt)
diff --git a/userspace/tools/wr_phytool.c b/userspace/tools/wr_phytool.c
index aeafe24d1..5ef6510bf 100644
--- a/userspace/tools/wr_phytool.c
+++ b/userspace/tools/wr_phytool.c
@@ -591,7 +591,7 @@ int main(int argc, char **argv)
 	int i;
 	int ep;
 
-	wrs_msg_init(1, argv); /* only use argv[0]: no cmdline */
+	wrs_msg_init(1, argv, LOG_USER); /* only use argv[0]: no cmdline */
 
 	if(argc<3)
 	{
diff --git a/userspace/tools/wrs_checkcfg.c b/userspace/tools/wrs_checkcfg.c
index 111332f09..cc283f150 100644
--- a/userspace/tools/wrs_checkcfg.c
+++ b/userspace/tools/wrs_checkcfg.c
@@ -12,7 +12,7 @@ int main(int argc, char **argv)
 {
 	int err, verbose = 0;
 
-	wrs_msg_init(argc, argv);
+	wrs_msg_init(argc, argv, LOG_USER);
 
 me_lazy:
 	if (argc < 2 || !strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) {
diff --git a/userspace/tools/wrs_leapsec.c b/userspace/tools/wrs_leapsec.c
index c64d2a7fb..3df8fb6b7 100644
--- a/userspace/tools/wrs_leapsec.c
+++ b/userspace/tools/wrs_leapsec.c
@@ -266,7 +266,7 @@ int main(int argc, char *argv[])
 {
 	int ret;
 
-	wrs_msg_init(argc,argv);
+	wrs_msg_init(argc,argv, LOG_DAEMON);
 
 	prgName=argv[0];
 
diff --git a/userspace/tools/wrs_sfp_dump.c b/userspace/tools/wrs_sfp_dump.c
index 6bdf8711b..545542b7d 100644
--- a/userspace/tools/wrs_sfp_dump.c
+++ b/userspace/tools/wrs_sfp_dump.c
@@ -303,7 +303,7 @@ int main(int argc, char **argv)
 	struct shw_sfp_dom hal_sfp_raw_dom_lc[HAL_MAX_PORTS];
 
 
-	wrs_msg_init(argc, argv);
+	wrs_msg_init(argc, argv, LOG_USER);
 	nports = 18;
 	dump_port = 1;
 
diff --git a/userspace/tools/wrs_status_led.c b/userspace/tools/wrs_status_led.c
index 3d4c58715..9c7dae159 100644
--- a/userspace/tools/wrs_status_led.c
+++ b/userspace/tools/wrs_status_led.c
@@ -55,7 +55,7 @@ int main(int argc, char **argv)
 	int opt;
 
 	/* argc forced to 1: -q and -v are not "quiet" and "verbose" */
-	wrs_msg_init(argc, argv);
+	wrs_msg_init(argc, argv, LOG_USER);
 
 	assert_init(shw_pio_mmap_init());
 	shw_io_init();
diff --git a/userspace/tools/wrs_throttling.c b/userspace/tools/wrs_throttling.c
index 230a53691..2e2ed08a0 100644
--- a/userspace/tools/wrs_throttling.c
+++ b/userspace/tools/wrs_throttling.c
@@ -115,7 +115,7 @@ int main(int argc, char *argv[])
 	prgname = argv[0];
 
 
-	wrs_msg_init(argc, argv);
+	wrs_msg_init(argc, argv, LOG_USER);
 
 	if (shw_fpga_mmap_init() < 0) {
 		pr_error("%s: Can't access device memory\n", prgname);
diff --git a/userspace/tools/wrs_version.c b/userspace/tools/wrs_version.c
index 0c1d342e8..a592f8e94 100644
--- a/userspace/tools/wrs_version.c
+++ b/userspace/tools/wrs_version.c
@@ -208,7 +208,7 @@ int main(int argc, char **argv)
 	char func='a';
 
 	/* argc forced to 1: -t and -v are not "terse" and "verbose" */
-	wrs_msg_init(1, argv);
+	wrs_msg_init(1, argv, LOG_USER);
 
 	if(argc>=2 && argv[1][0]=='-')
 	{
diff --git a/userspace/tools/wrs_vlans.c b/userspace/tools/wrs_vlans.c
index 59ae6f2b3..8a4aedc27 100644
--- a/userspace/tools/wrs_vlans.c
+++ b/userspace/tools/wrs_vlans.c
@@ -161,7 +161,7 @@ int main(int argc, char *argv[])
 	char *prgname;
 
 	wrs_msg_level = LOG_WARNING;
-	wrs_msg_init(argc, argv);
+	wrs_msg_init(argc, argv, LOG_USER);
 	prgname = argv[0];
 
 	if (NPORTS > 8 * sizeof(portmask)) {
diff --git a/userspace/wrs_watchdog/wrs_watchdog.c b/userspace/wrs_watchdog/wrs_watchdog.c
index 32ddad7d1..0aea35292 100644
--- a/userspace/wrs_watchdog/wrs_watchdog.c
+++ b/userspace/wrs_watchdog/wrs_watchdog.c
@@ -275,7 +275,7 @@ int main(int argc, char *argv[])
 		return 0;
 	}
 
-	wrs_msg_init(argc, argv);
+	wrs_msg_init(argc, argv, LOG_DAEMON);
 
 	if (shw_fpga_mmap_init() < 0) {
 		pr_error("%s: Can't access device memory\n", prgname);
diff --git a/userspace/wrsw_hal/hal_main.c b/userspace/wrsw_hal/hal_main.c
index 161465bfe..a1695be49 100644
--- a/userspace/wrsw_hal/hal_main.c
+++ b/userspace/wrsw_hal/hal_main.c
@@ -229,7 +229,7 @@ int main(int argc, char *argv[])
 	static timeout_t update_fan_tmo;
 	static timeout_t update_all_tmo;
 
-	wrs_msg_init(argc, argv);
+	wrs_msg_init(argc, argv, LOG_DAEMON);
 
 	/* Print HAL's version */
 	pr_info("wrsw_hal. Commit %s, built on " __DATE__ "\n", __GIT_VER__);
diff --git a/userspace/wrsw_rtud/rtud.c b/userspace/wrsw_rtud/rtud.c
index f96d85414..4a3782534 100644
--- a/userspace/wrsw_rtud/rtud.c
+++ b/userspace/wrsw_rtud/rtud.c
@@ -375,7 +375,7 @@ int main(int argc, char **argv)
 	unsigned long aging_res = DEFAULT_AGING_RES;	// Aging resolution [sec.]
 	unsigned long aging_time = DEFAULT_AGING_TIME;	// Aging time       [sec.]
 
-	wrs_msg_init(argc, argv);
+	wrs_msg_init(argc, argv, LOG_DAEMON);
 
 	/* Print RTUd's version */
 	pr_info("wrsw_rtud. Commit %s, built on " __DATE__ "\n", __GIT_VER__);
-- 
GitLab