Просмотр исходного кода

qnetd: Improve logging

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Jan Friesse 10 лет назад
Родитель
Сommit
bdce67516f

+ 25 - 10
qdevices/corosync-qnetd.c

@@ -1395,21 +1395,31 @@ signal_handlers_register(void)
 static void
 usage(void)
 {
-	printf("usage: %s [-h listen_addr] [-p listen_port]\n", QNETD_PROGRAM_NAME);
+
+	printf("usage: %s [-df] [-l listen_addr] [-p listen_port]\n", QNETD_PROGRAM_NAME);
 }
 
 static void
-cli_parse(int argc, char * const argv[], char **host_addr, uint16_t *host_port)
+cli_parse(int argc, char * const argv[], char **host_addr, uint16_t *host_port, int *foreground,
+    int *debug_log)
 {
 	int ch;
 	char *ep;
 
 	*host_addr = NULL;
 	*host_port = QNETD_DEFAULT_HOST_PORT;
+	*foreground = 0;
+	*debug_log = 0;
 
-	while ((ch = getopt(argc, argv, "h:p:")) != -1) {
+	while ((ch = getopt(argc, argv, "fdl:p:")) != -1) {
 		switch (ch) {
-		case 'h':
+		case 'f':
+			*foreground = 1;
+			break;
+		case 'd':
+			*debug_log = 1;
+			break;
+		case 'l':
 			*host_addr = strdup(optarg);
 			break;
 		case 'p':
@@ -1432,12 +1442,18 @@ main(int argc, char *argv[])
 	struct qnetd_instance instance;
 	char *host_addr;
 	uint16_t host_port;
+	int foreground;
+	int debug_log;
 
-	/*
-	 * INIT
-	 */
-	qnetd_log_init(QNETD_LOG_TARGET_STDERR);
-	qnetd_log_set_debug(1);
+	cli_parse(argc, argv, &host_addr, &host_port, &foreground, &debug_log);
+
+	if (foreground) {
+		qnetd_log_init(QNETD_LOG_TARGET_STDERR);
+	} else {
+		qnetd_log_init(QNETD_LOG_TARGET_SYSLOG);
+	}
+
+	qnetd_log_set_debug(debug_log);
 
 	if (nss_sock_init_nss((char *)QNETD_NSS_DB_DIR) != 0) {
 		qnetd_err_nss();
@@ -1447,7 +1463,6 @@ main(int argc, char *argv[])
 		qnetd_err_nss();
 	}
 
-	cli_parse(argc, argv, &host_addr, &host_port);
 
 	if (qnetd_instance_init(&instance, QNETD_MAX_CLIENT_RECEIVE_SIZE,
 	    QNETD_MAX_CLIENT_SEND_BUFFERS, QNETD_MAX_CLIENT_SEND_SIZE,

+ 7 - 3
qdevices/qdevice-net-cast-vote-timer.c

@@ -67,10 +67,14 @@ qdevice_net_cast_vote_timer_callback(void *data1, void *data2)
 	    instance->last_received_votequorum_ring_id);
 
 	if (res != CS_OK && res != CS_ERR_TRY_AGAIN) {
-		qdevice_net_log(LOG_CRIT, "Can't call votequorum_qdevice_poll. Error %u", res);
+		if (res == CS_ERR_MESSAGE_ERROR) {
+			qdevice_net_log(LOG_INFO, "votequorum_qdevice_poll called with old ring id, rescheduling timer");
+		} else {
+			qdevice_net_log(LOG_CRIT, "Can't call votequorum_qdevice_poll. Error %u", res);
 
-		instance->schedule_disconnect = 1;
-		return (0);
+			instance->schedule_disconnect = 1;
+			return (0);
+		}
 	}
 
 	/*

+ 46 - 43
qdevices/qdevice-net-votequorum.c

@@ -74,48 +74,48 @@ qdevice_net_votequorum_ring_id_to_tlv(struct tlv_ring_id *tlv_rid,
 	tlv_rid->seq = votequorum_rid->seq;
 }
 
-static void
-qdevice_net_votequorum_notify_callback(votequorum_handle_t votequorum_handle,
-    uint64_t context, uint32_t quorate,
-    votequorum_ring_id_t votequorum_ring_id,
-    uint32_t node_list_entries, votequorum_node_t node_list[])
-{
-	struct qdevice_net_instance *instance;
-	struct tlv_ring_id tlv_rid;
-	uint32_t u32;
-
-	if (votequorum_context_get(votequorum_handle, (void **)&instance) != CS_OK) {
-		errx(1, "Fatal error. Can't get votequorum context");
-	}
-
-	qdevice_net_votequorum_ring_id_to_tlv(&tlv_rid, &votequorum_ring_id);
-
-	if (qdevice_net_send_membership_node_list(instance,
-	    (quorate ? TLV_QUORATE_QUORATE : TLV_QUORATE_INQUORATE),
-	    &tlv_rid, node_list_entries, node_list) != 0) {
-		/*
-		 * Fatal error -> schedule disconnect
-		 */
-		instance->schedule_disconnect = 1;
-	}
-
-	memcpy(&instance->last_received_votequorum_ring_id, &votequorum_ring_id, sizeof(votequorum_ring_id));
-
-	if (qdevice_net_cast_vote_timer_update(instance, TLV_VOTE_WAIT_FOR_REPLY) != 0) {
-		errx(1, "qdevice_net_votequorum_notify_callback fatal error. "
-		    "Can't update cast vote timer vote");
-	}
-
-	qdevice_net_log(LOG_DEBUG, "Votequorum notify callback:");
-	qdevice_net_log(LOG_DEBUG, "  Quorate = %u, ring_id = (%"PRIx32".%"PRIx64")",
-	    quorate, votequorum_ring_id.nodeid, votequorum_ring_id.seq);
-
-	qdevice_net_log(LOG_DEBUG, "  Node list (size = %"PRIu32"):", node_list_entries);
-	for (u32 = 0; u32 < node_list_entries; u32++) {
-		qdevice_net_log(LOG_DEBUG, "    %"PRIu32" nodeid = %"PRIu32", state = %"PRIu32,
-		    u32, node_list[u32].nodeid, node_list[u32].state);
-	}
-}
+//static void
+//qdevice_net_votequorum_notify_callback(votequorum_handle_t votequorum_handle,
+//    uint64_t context, uint32_t quorate,
+//    votequorum_ring_id_t votequorum_ring_id,
+//    uint32_t node_list_entries, votequorum_node_t node_list[])
+//{
+//	struct qdevice_net_instance *instance;
+//	struct tlv_ring_id tlv_rid;
+//	uint32_t u32;
+//
+//	if (votequorum_context_get(votequorum_handle, (void **)&instance) != CS_OK) {
+//		errx(1, "Fatal error. Can't get votequorum context");
+//	}
+//
+//	qdevice_net_votequorum_ring_id_to_tlv(&tlv_rid, &votequorum_ring_id);
+//
+//	if (qdevice_net_send_membership_node_list(instance,
+//	    (quorate ? TLV_QUORATE_QUORATE : TLV_QUORATE_INQUORATE),
+//	    &tlv_rid, node_list_entries, node_list) != 0) {
+//		/*
+//		 * Fatal error -> schedule disconnect
+//		 */
+//		instance->schedule_disconnect = 1;
+//	}
+//
+//	memcpy(&instance->last_received_votequorum_ring_id, &votequorum_ring_id, sizeof(votequorum_ring_id));
+//
+//	if (qdevice_net_cast_vote_timer_update(instance, TLV_VOTE_WAIT_FOR_REPLY) != 0) {
+//		errx(1, "qdevice_net_votequorum_notify_callback fatal error. "
+//		    "Can't update cast vote timer vote");
+//	}
+//
+//	qdevice_net_log(LOG_DEBUG, "Votequorum notify callback:");
+//	qdevice_net_log(LOG_DEBUG, "  Quorate = %u, ring_id = (%"PRIx32".%"PRIx64")",
+//	    quorate, votequorum_ring_id.nodeid, votequorum_ring_id.seq);
+//
+//	qdevice_net_log(LOG_DEBUG, "  Node list (size = %"PRIu32"):", node_list_entries);
+//	for (u32 = 0; u32 < node_list_entries; u32++) {
+//		qdevice_net_log(LOG_DEBUG, "    %"PRIu32" nodeid = %"PRIu32", state = %"PRIu32,
+//		    u32, node_list[u32].nodeid, node_list[u32].state);
+//	}
+//}
 
 void
 qdevice_net_votequorum_init(struct qdevice_net_instance *instance)
@@ -127,7 +127,10 @@ qdevice_net_votequorum_init(struct qdevice_net_instance *instance)
 	int fd;
 
 	memset(&votequorum_callbacks, 0, sizeof(votequorum_callbacks));
-	votequorum_callbacks.votequorum_notify_fn = qdevice_net_votequorum_notify_callback;
+/*
+ *	TODO:
+ *	votequorum_callbacks.votequorum_notify_fn = qdevice_net_votequorum_notify_callback;
+ */
 
 	no_retries = 0;
 

+ 44 - 0
qdevices/qnetd-log.c

@@ -35,6 +35,7 @@
 #include <syslog.h>
 #include <stdarg.h>
 #include <stdio.h>
+#include <time.h>
 
 #include "qnet-config.h"
 #include "qnetd-log.h"
@@ -42,6 +43,27 @@
 static int qnetd_log_config_target = 0;
 static int qnetd_log_config_debug = 0;
 
+static const char qnetd_log_month_str[][4] = {
+    "Jan", "Feb", "Mar", "Apr", "May", "Jun",
+    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
+};
+
+struct qnetd_log_syslog_prio_to_str_item {
+	int priority;
+	const char *priority_str;
+};
+
+static struct qnetd_log_syslog_prio_to_str_item qnetd_syslog_prio_to_str_array[] = {
+    {LOG_EMERG,		"emerg"},
+    {LOG_ALERT,		"alert"},
+    {LOG_CRIT,		"crit"},
+    {LOG_ERR,		"error"},
+    {LOG_WARNING,	"warning"},
+    {LOG_NOTICE,	"notice"},
+    {LOG_INFO,		"info"},
+    {LOG_DEBUG,		"debug"},
+    {-1, NULL}};
+
 void
 qnetd_log_init(int target)
 {
@@ -53,13 +75,35 @@ qnetd_log_init(int target)
 	}
 }
 
+static const char *
+qnetd_log_syslog_prio_to_str(int priority)
+{
+
+	if (priority >= LOG_EMERG && priority <= LOG_DEBUG) {
+		return (qnetd_syslog_prio_to_str_array[priority].priority_str);
+	} else {
+		return ("none");
+	}
+}
+
 void
 qnetd_log_printf(int priority, const char *format, ...)
 {
 	va_list ap;
+	time_t current_time;
+	struct tm tm_res;
 
 	if (priority != LOG_DEBUG || (qnetd_log_config_debug)) {
 		if (qnetd_log_config_target & QNETD_LOG_TARGET_STDERR) {
+			current_time = time(NULL);
+			localtime_r(&current_time, &tm_res);
+
+			fprintf(stderr, "%s %02d %02d:%02d:%02d ",
+			    qnetd_log_month_str[tm_res.tm_mon], tm_res.tm_mday, tm_res.tm_hour,
+			    tm_res.tm_min, tm_res.tm_sec);
+
+			fprintf(stderr, "%-7s ", qnetd_log_syslog_prio_to_str(priority));
+
 			va_start(ap, format);
 			vfprintf(stderr, format, ap);
 			fprintf(stderr, "\n");