#include #include #include #include "common.h" #include "message.h" // console message buffer char message_buffer[MESSAGE_BUFFER_LENGTH]; // flags to determine messages levels logged (to message logger) and reported (to stdout) int msg_logging_level; int msg_reporting_level; extern pid_t mypid; void msg_init() { msg_logging_level = LOGGING_LEVEL; msg_reporting_level = REPORTING_LEVEL; InitLogging(); } void report_message(int level) { char buffer[MESSAGE_BUFFER_LENGTH+32]; if ( ((msg_reporting_level >> level) & 1) || ((msg_logging_level >> level) & 1) ) { #ifdef MASTER (void) sprintf(buffer, "MERGE Master (%d): %s", mypid, message_buffer); #endif #ifdef MERGE (void) sprintf(buffer, "MERGE Actor (%d): %s", mypid, message_buffer); #endif #ifdef LINK (void) sprintf(buffer, "MERGE Data Link (%d): %s", mypid, message_buffer); #endif #ifdef STATS (void) sprintf(buffer, "MERGE Statistics/Rates (%d): %s", mypid, message_buffer); #endif if ( (msg_reporting_level >> level) & 1 ) { fprintf(stdout,"%s\n", buffer); } } #ifndef NOLOGGING if ((msg_logging_level >> level) & 1 && (msg_reporting_level >> MSG_LOGGING) & 1) { msgDefineMessage (0, (int) MSG_MERGE1, level, (char *) NULL, buffer); } #endif fflush(stdout); sprintf(message_buffer, "Messages done\n"); } void trace(const char * msg) { (void) sprintf(message_buffer, "%s", msg); report_message(MSG_TRACE); } void debug(const char * msg) { (void) sprintf(message_buffer, "%s", msg); report_message(MSG_DEBUG); } void InitLogging() { int Logging; int rc; Logging = FALSE; #ifndef NOLOGGING /* Initialise message logging to the default logger */ if ((msg_reporting_level >> MSG_LOGGING) & 1 ) { rc = msgInitialise (NULL); if (rc == OK) { Logging = TRUE; } else { (void) sprintf(message_buffer, "%s.", "Message Initialisation failed"); report_message(MSG_INFORMATION); } } #endif if (Logging == TRUE) { (void) sprintf(message_buffer, "%s.", "Message logger contacted"); report_message(MSG_INFORMATION); } else { (void) sprintf(message_buffer, "%s.", "Message logger not contacted"); report_message(MSG_WARNING); } } void LogMessage(int level) { report_message(level); } void MergeReportError () { sprintf(message_buffer,"Error %d - %s", errno, strerror(errno)); errno = 0; report_message(MSG_FAILURE); } void MergeReportErrorMsg (char *s) { sprintf(message_buffer,"%s (System Error Message: %s)", s, strerror(errno)); errno = 0; report_message(MSG_FAILURE); }