#ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #define CHAR_BUF 256 void log_msg(const char* address, const char *suffix, const char *fmt, ...) { FILE * fd; char path[CHAR_BUF] = ""; char text[CHAR_BUF] = ""; int n; if( snprintf(path,CHAR_BUF, "%s.%s", address, suffix) < 28 ) /* /tmp/drmaa_socket_XXXXXXX.err */ { fprintf(stderr,"Can't create err file address"); /* nobody will see it... */ assert(0); } if((fd = fopen(path,"a")) != NULL) { va_list args; va_start (args,fmt); n = vsnprintf(text,CHAR_BUF, fmt, args); va_end( args ); if( 0 <= n && (size_t)n < CHAR_BUF ) { fprintf(fd,"%d - %s", time(NULL), text); fclose(fd); } else { fprintf(stderr,"Can't parse error text"); /* nobody will see it... */ assert(0); } } } int main(int argc, char **argv) { /*LL_DRMAA_BIN_DIR is defined in config.h that was generated during ./configure process */ if(argc == 5) { struct sockaddr_un address; size_t address_length; int socket_fd = -1; int nbytes; char buffer[CHAR_BUF]; socket_fd = socket(PF_UNIX, SOCK_STREAM, 0); if(socket_fd < 0) { log_msg(argv[2], "err", "socket() failed\n"); return 1; } address.sun_family = AF_UNIX; address_length = sizeof(address.sun_family) + sprintf(address.sun_path, argv[2]) + 1; if(connect(socket_fd, (struct sockaddr *) &address, address_length) != 0) { log_msg(argv[2], "err", "connect() failed. Address: %s (%d)\n", address.sun_path, errno); return 1; } nbytes = snprintf(buffer,CHAR_BUF, "%s %s %s\n", argv[3], argv[1], argv[4]); /* JOB_xxxxxx job_id status*/ #ifdef DEBUGGING log_msg(argv[2], "debug", "Sending message: %s", buffer); #endif if(write(socket_fd, buffer, nbytes) <= 0) { log_msg(argv[2], "err", "Can't write data to socket: %s",buffer); } close(socket_fd); } else { log_msg(argv[2],"err", "Not enough arguments\n"); return 1; } return 0; }