--- source-trees/gt2-cvs/gram/jobmanager/source/globus_gram_job_manager_request.c 17 May 2007 16:31:59 -0000 1.10.4.3 +++ source-trees/gt2-cvs/gram/jobmanager/source/globus_gram_job_manager_request.c 30 Jan 2008 20:12:26 -0000 @@ -29,6 +29,7 @@ #include "globus_gram_job_manager.h" #include +#include /** * Allocate and initialize a request. @@ -344,6 +345,7 @@ /** * Write data to the job manager accounting file. + * Also use syslog() to allow for easy central collection. * * This function writes data to the passed file descriptor, if any, * using a printf format string. @@ -362,6 +364,10 @@ const char * format, ... ) { + static const char *jm_syslog_id = "gridinfo"; + static int jm_syslog_fac = LOG_DAEMON; + static int jm_syslog_lvl = LOG_NOTICE; + static int jm_syslog_init; struct tm *curr_tm; time_t curr_time; va_list ap; @@ -373,6 +379,68 @@ int t; char buf[1024 * 128]; + time( &curr_time ); + curr_tm = localtime( &curr_time ); + + n = t = sprintf( buf, "JMA %04d/%02d/%02d %02d:%02d:%02d ", + curr_tm->tm_year + 1900, + curr_tm->tm_mon + 1, curr_tm->tm_mday, + curr_tm->tm_hour, curr_tm->tm_min, + curr_tm->tm_sec ); + + va_start( ap, format ); + + /* + * FIXME: we should use vsnprintf() here... + */ + + n += vsprintf( buf + t, format, ap ); + + if (!jm_syslog_init) { + const char *s; + + if ((s = globus_libc_getenv( "JOBMANAGER_SYSLOG_ID" )) != 0) { + jm_syslog_id = *s ? s : 0; + } + + if ((s = globus_libc_getenv( "JOBMANAGER_SYSLOG_FAC" )) != 0) { + if (sscanf( s, "%u", &jm_syslog_fac ) != 1) { + jm_syslog_id = 0; + } + } + + if ((s = globus_libc_getenv( "JOBMANAGER_SYSLOG_LVL" )) != 0) { + if (sscanf( s, "%u", &jm_syslog_lvl ) != 1) { + jm_syslog_id = 0; + } + } + + if (jm_syslog_id) { + openlog( jm_syslog_id, LOG_PID, jm_syslog_fac ); + } + + jm_syslog_init = 1; + } + + if (jm_syslog_id) + { + char *p, *q = buf; + + while ((p = q) < buf + n) { + char c; + + while ((c = *q) != 0 && c != '\n') { + q++; + } + + *q = 0; + + syslog( jm_syslog_lvl, "%s", p ); + + *q++ = c; + } + } + if (!(gk_acct_fd = globus_libc_getenv( gk_acct_fd_var ))) { return -1; @@ -391,23 +459,6 @@ "ERROR: cannot set FD_CLOEXEC on %s '%s': %s\n", gk_acct_fd_var, gk_acct_fd, strerror( errno ) ); } - - time( &curr_time ); - curr_tm = localtime( &curr_time ); - - n = t = sprintf( buf, "JMA %04d/%02d/%02d %02d:%02d:%02d ", - curr_tm->tm_year + 1900, - curr_tm->tm_mon + 1, curr_tm->tm_mday, - curr_tm->tm_hour, curr_tm->tm_min, - curr_tm->tm_sec ); - - va_start( ap, format ); - - /* - * FIXME: we should use vsnprintf() here... - */ - - n += vsprintf( buf + t, format, ap ); if ((rc = write( fd, buf, n )) != n) { --- source-trees/gt2-cvs/gram/jobmanager/source/globus_gram_job_manager_script.c 12 Mar 2007 14:03:17 -0000 1.13.4.3 +++ source-trees/gt2-cvs/gram/jobmanager/source/globus_gram_job_manager_script.c 30 Jan 2008 20:16:40 -0000 @@ -14,6 +14,8 @@ #include #include #include +#include +#include /* Module Specific Types */ typedef void (*globus_gram_job_manager_script_callback_t)( @@ -304,12 +306,22 @@ const char * gk_jm_id = globus_libc_getenv(gk_jm_id_var); const char * gk_peer = globus_libc_getenv("GATEKEEPER_PEER"); const char * globus_id = globus_libc_getenv("GLOBUS_ID"); + uid_t uid = getuid(); + gid_t gid = getgid(); + const struct passwd *pw = getpwuid(uid); + const char *user = pw && pw->pw_name && *pw->pw_name ? + pw->pw_name : "unknown"; globus_gram_job_manager_request_acct( request, "%s %s for %s on %s\n", gk_jm_id_var, gk_jm_id ? gk_jm_id : "none", globus_id ? globus_id : "unknown", gk_peer ? gk_peer : "unknown"); + + globus_gram_job_manager_request_acct( + request, "%s %s mapped to %s (%u, %u)\n", gk_jm_id_var, + gk_jm_id ? gk_jm_id : "none", + user, uid, gid); globus_gram_job_manager_request_acct( request, "%s %s has %s %s manager type %s\n", gk_jm_id_var,