/* * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana * University Research and Technology * Corporation. All rights reserved. * Copyright (c) 2004-2005 The University of Tennessee and The University * of Tennessee Research Foundation. All rights * reserved. * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, * University of Stuttgart. All rights reserved. * Copyright (c) 2004-2005 The Regents of the University of California. * All rights reserved. * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * Copyright (c) 2014-2015 Intel, Inc. All rights reserved. * $COPYRIGHT$ * * Additional copyrights may follow * * $HEADER$ */ #include "orte_config.h" #include "orte/constants.h" #include #ifdef HAVE_SYS_TIME_H #include #endif /* HAVE_SYS_TIME_H */ #ifdef HAVE_SYSLOG_H #include #endif #include #include "opal/util/show_help.h" #include "orte/util/error_strings.h" #include "orte/util/name_fns.h" #include "orte/mca/notifier/base/base.h" #include "notifier_syslog.h" /* Static API's */ static int init(void); static void finalize(void); static void mylog(orte_notifier_request_t *req); static void myevent(orte_notifier_request_t *req); static void myreport(orte_notifier_request_t *req); /* Module def */ orte_notifier_base_module_t orte_notifier_syslog_module = { init, finalize, mylog, myevent, myreport }; static int init(void) { int opts; opts = LOG_CONS | LOG_PID; openlog("OpenRTE Error Report:", opts, LOG_USER); return ORTE_SUCCESS; } static void finalize(void) { closelog(); } static void mylog(orte_notifier_request_t *req) { char tod[48]; opal_output_verbose(5, orte_notifier_base_framework.framework_output, "notifier:syslog:mylog function called with severity %d errcode %d and messg %s", (int)req->severity, req->errcode, req->msg); /* If there was a message, output it */ (void)ctime_r(&req->t, tod); /* trim the newline */ tod[strlen(tod)] = '\0'; syslog(req->severity, "[%s]%s %s: JOBID %s REPORTS ERROR %s: %s", tod, ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), orte_notifier_base_sev2str(req->severity), ORTE_JOBID_PRINT((NULL == req->jdata) ? ORTE_JOBID_INVALID : req->jdata->jobid), orte_job_state_to_str(req->state), (NULL == req->msg) ? "" : req->msg); } static void myevent(orte_notifier_request_t *req) { char tod[48]; opal_output_verbose(5, orte_notifier_base_framework.framework_output, "notifier:syslog:myevent function called with severity %d and messg %s", (int)req->severity, req->msg); /* If there was a message, output it */ (void)ctime_r(&req->t, tod); /* trim the newline */ tod[strlen(tod)] = '\0'; syslog(req->severity, "[%s]%s %s SYSTEM EVENT : %s", tod, ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), orte_notifier_base_sev2str(req->severity), (NULL == req->msg) ? "" : req->msg); } static void myreport(orte_notifier_request_t *req) { char tod[48]; opal_output_verbose(5, orte_notifier_base_framework.framework_output, "notifier:syslog:myreport function called with severity %d state %s and messg %s", (int)req->severity, orte_job_state_to_str(req->state), req->msg); /* If there was a message, output it */ (void)ctime_r(&req->t, tod); /* trim the newline */ tod[strlen(tod)] = '\0'; syslog(req->severity, "[%s]%s JOBID %s REPORTS STATE %s: %s", tod, ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), ORTE_JOBID_PRINT((NULL == req->jdata) ? ORTE_JOBID_INVALID : req->jdata->jobid), orte_job_state_to_str(req->state), (NULL == req->msg) ? "" : req->msg); }