#!/bin/sh # BLAHP log entry: # "timestamp=2013-03-27 22:04:11" # "userDN=/C=GR/O=HellasGrid/OU=auth.gr/CN=Pavlos Daoglou" # "userFQAN=/ops/Role=NULL/Capability=NULL" ... (multiple) # "ceID=glite.univ.kiev.ua:8443/cream-pbs-grid_rt" # "jobID=CREAM965436291" # "lrmsID=913429.a4.cluster.univ.kiev.ua" # "localUser=107048" # "clientID=cream_965436291" # APEL parser takes into account these attributes: # timestamp # userDN # userFQAN # ceID # jobID # Parameters to this script: # (mandatory) log filename prefix - like "/var/log/arc/accounting/arcblahp.log-" # (mandatory) %W - ARC location # (mandatory) %C - control dir # (mandatory) %I - jobID # (optional) %u - UID for localUser # (optional) ceID prefix, queue names base published in GLUE schema "arc.univ.kiev.ua:2811/nordugrid-torque" # arc.conf invocation: # authplugin="FINISHED timeout=10,onfailure=pass /usr/libexec/arc/arc-blahp-logger /var/log/arc/accounting/blahp.log- %W %C %I %u arc.univ.kiev.ua:2811/nordugrid-torque" # # from script parameters # %I -> jobID # %u -> localUser # from .local file # queue -> for ceID # localid -> lrmsID # subject -> userDN # from .proxy file # -> userFQAN (...) if [ $# -lt 4 ] then echo "Usage: $0 [uid] [ceID prefix]" exit 1 fi LOGFILE="$1" shift ARC_LOCATION="$1" ARCPROXY="$ARC_LOCATION/bin/arcproxy" if [ ! -e "$ARCPROXY" ]; then echo "There is no arcproxy found: arc-blahp-logger is unable to generate all required fields." >&2 exit 1 fi shift CONTROLDIR="$1" shift JOBID="$1" shift LUID= [ -n "$1" ] && LUID="$1" shift CEID="`hostname -f`:2811/nordugrid-torque" [ -n "$1" ] && CEID="$1" grep -q '^failedstate=' "$CONTROLDIR/job.$JOBID.local" && exit 1 TS=`date -u +"%Y-%m-%d %H:%M:%S"` LOGSUF=${TS% *} LOGSUF=${LOGSUF//-/} LOGFILE="${LOGFILE}${LOGSUF}" eval $( awk -F= '/^localid=/{print "LOCALID=" $2}/^globalid=/{print "GLOBALID=" $2}/^lrms=/{print "LRMS=" $2}/^queue=/{print "QUEUE=" $2}/^subject=/{gsub("\"", "\\\\\\\""); print "SUBJECT=\"" substr($0,9) "\"" }' "$CONTROLDIR/job.$JOBID.local" ) CEID="$CEID-$QUEUE" RECORD="\"timestamp=$TS\" \"userDN=$SUBJECT\"" RECORD="$RECORD "$( $ARCPROXY -I -P "$CONTROLDIR/job.$JOBID.proxy" | grep "^attribute : " | sed 's/^attribute : /"userFQAN=/;s/$/"/' | tr '\n' ' ' | sed 's/ $//' ) RECORD="$RECORD \"ceID=$CEID\" \"jobID=$JOBID\" \"lrmsID=$LOCALID\"" [ -n "$LUID" ] && RECORD="$RECORD \"localUser=$LUID\"" RECORD="$RECORD \"clientID=$GLOBALID\"" # LOCKING! exec 200>>$LOGFILE flock 200 echo "$RECORD" >&200 exec 200>&-