--- p13/gram/jobmanager/source/globus_gram_job_manager_request.c Mon Jan 5 20:48:10 2004 +++ p41/gram/jobmanager/source/globus_gram_job_manager_request.c Mon Feb 9 01:39:09 2004 @@ -18,6 +18,7 @@ #include "globus_gram_job_manager.h" #include +#include /** * Allocate and initialize a request. @@ -327,6 +328,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. @@ -345,6 +347,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; @@ -356,6 +362,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; @@ -375,23 +443,6 @@ 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) { globus_gram_job_manager_request_log( request, --- p13/gram/jobmanager/source/globus_gram_job_manager_script.c Mon Jan 5 20:48:11 2004 +++ p41/gram/jobmanager/source/globus_gram_job_manager_script.c Fri Feb 6 00:19:07 2004 @@ -2,6 +2,8 @@ #include #include #include +#include +#include /* Module Specific Types */ typedef void (*globus_gram_job_manager_script_callback_t)( @@ -298,6 +300,11 @@ 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, @@ -306,6 +313,11 @@ 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, gk_jm_id ? gk_jm_id : "none", script_variable, script_value, request->jobmanager_type);