int writeExecuteEvent(WriteUserLog *log)
{
	ExecuteEvent execute;
	execute.setExecuteHost("<128.105.165.12:32779>");
	if ( !log->writeEvent(&execute) ) {
		printf("Bad execute write\n");
		exit(1);
	}
	return(0);
}
Example #2
0
int writeExecuteEvent()
{
	ExecuteEvent execute;
	execute.setExecuteHost("<128.105.165.12:32779>");
	if ( !logFile.writeEvent(&execute) ) {
		printf("Complain about bad execute write\n");
		exit(1);
	}
	return(0);
}
Example #3
0
ULogEvent *
EventInfo::GenEventExecute( void )
{
	SetName( "Execute" );
	SetNote( "<128.105.165.12:32779>" );

	ExecuteEvent	*e = new ExecuteEvent;
	e->setExecuteHost(GetNote());
	return SetEvent( e );
}
Example #4
0
extern "C" void
log_execute (char *host)
{
	if( WroteExecuteEvent ) {
		return;
	}
	// log execute event
	ExecuteEvent event;
	event.setExecuteHost(host);
	if( !ULog.writeEvent(&event) ) {
		dprintf (D_ALWAYS, "Unable to log ULOG_EXECUTE event\n");
	} else {
		WroteExecuteEvent = 1;
	}
}
Example #5
0
extern "C" void
log_execute (char *host)
{
	if( WroteExecuteEvent ) {
		return;
	}
	// log execute event
	ExecuteEvent event;
	event.setExecuteHost(host);
	WroteExecuteEvent = 1;
	for(std::vector<WriteUserLog*>::iterator p = ULog.begin(); p != ULog.end(); ++p) {
		if( !(*p)->writeEvent(&event) ) {
			dprintf (D_ALWAYS, "Unable to log ULOG_EXECUTE event\n");
			WroteExecuteEvent = 0;
		}
	}
}
Example #6
0
bool
LocalUserLog::logExecute( ClassAd*  ad  )
{
	if( ! is_initialized ) {
		EXCEPT( "LocalUserLog::logExecute() called before init()" );
	}
	if( ! should_log ) {
		return true;
	}

	ExecuteEvent event;
	event.setExecuteHost( daemonCore->InfoCommandSinfulString() ); 

	if( !u_log.writeEvent(&event,ad) ) {
        dprintf( D_ALWAYS, "Unable to log ULOG_EXECUTE event: "
                 "can't write to UserLog!\n" );
		return false;
    }
	return true;
}
Example #7
0
bool
WriteExecuteEventToUserLog( ClassAd *job_ad )
{
    int cluster, proc;
    char hostname[128];

    WriteUserLog *ulog = InitializeUserLog( job_ad );
    if ( ulog == NULL ) {
        // User doesn't want a log
        return true;
    }

    job_ad->LookupInteger( ATTR_CLUSTER_ID, cluster );
    job_ad->LookupInteger( ATTR_PROC_ID, proc );

    dprintf( D_FULLDEBUG,
             "(%d.%d) Writing execute record to user logfile\n",
             cluster, proc );

    hostname[0] = '\0';
    job_ad->LookupString( ATTR_GRID_RESOURCE, hostname,
                          sizeof(hostname) );

    ExecuteEvent event;
    event.setExecuteHost( hostname );
    int rc = ulog->writeEvent(&event,job_ad);
    delete ulog;

    if (!rc) {
        dprintf( D_ALWAYS,
                 "(%d.%d) Unable to log ULOG_EXECUTE event\n",
                 cluster, proc );
        return false;
    }

    return true;
}
Example #8
0
void
read_log(const char *filename, int select_cluster, int select_proc)
{
	ReadUserLog ulog;
	ULogEventOutcome result;
	ULogEvent *event=NULL;
	char hash[40];
	HashTable<HashKey, ExecuteEvent *> ExecRecs(1024, hashFunction);
	HashTable<HashKey, CheckpointedEvent *> CkptRecs(1024, hashFunction);
	
	if (ulog.initialize(filename,0,false,true)==false) {
		fprintf(stderr,
			"Error: unable to read log file.\n");
			exit(0);			
			}		
	
	while ((result = ulog.readEvent(event)) != ULOG_NO_EVENT) {
		if ((result == ULOG_OK) &&
			(select_cluster == -1 || select_cluster == event->cluster) &&
			(select_proc == -1 || select_proc == event->proc)) {
			switch (event->eventNumber) {
			case ULOG_SUBMIT:
				delete event;
				break;
			case ULOG_EXECUTE: {
				sprintf(hash, "%d.%d", event->cluster, event->proc);
				HashKey key(hash);
				// check if we already have an execute event for this job
				ExecuteEvent *execEvent;
				if (ExecRecs.lookup(key, execEvent) >= 0) {
					// This means we found two execute events for the
					// job not separated by an evict or terminate
					// event.  Which one should we throw out?  If the
					// executeHosts are the same, then we throw out
					// the later event, since the 6.1.15 and 6.1.16
					// shadows logged execute events before every
					// other event, so keeping the first execute event
					// gives correct results for those shadows.
					// Otherwise, we throw out the previous event.
					if (!strcmp(((ExecuteEvent *)event)->getExecuteHost(),
								execEvent->getExecuteHost())) {
						if (debug_mode) {
							fprintf(stderr,
									"warning: discarding execute event "
									"(job %s)\n  found before evict or "
									"termination event for previous execute "
									"event.\n", hash);
						}
						delete event;
						break;
					}
					if (ExecRecs.remove(key) < 0) {
						if (debug_mode) {
							fprintf(stderr, "internal error: hashtable remove "
									"failed for exec event %s!\n", hash);
						}
						delete event;
						break;
					}
					if (debug_mode) {
						fprintf(stderr, "warning: discarding execute event "
								"(job %s)\n  with no corresponding evict or "
								"termination event.\n", hash);
					}
					delete execEvent;
				}
				ExecRecs.insert(key, (ExecuteEvent *)event);
				break;
			}
			case ULOG_CHECKPOINTED: {
				sprintf(hash, "%d.%d", event->cluster, event->proc);
				HashKey key(hash);
				// remove any previous ckpt events for this job
				CheckpointedEvent *ckptEvent;
				if (CkptRecs.lookup(key, ckptEvent) >= 0) {
					if (CkptRecs.remove(key) < 0) {
						if (debug_mode) {
							fprintf(stderr, "internal error: hashtable remove "
									"failed for ckpt event %s!\n", hash);
						}
						delete event;
						break;
					}
					delete ckptEvent;
				}
				CkptRecs.insert(HashKey(hash), (CheckpointedEvent *)event);
				break;
			}
			case ULOG_JOB_EVICTED: {
				ExecuteEvent *execEvent;
				JobEvictedEvent *evictEvent = (JobEvictedEvent *)event;
				sprintf(hash, "%d.%d", event->cluster, event->proc);
				HashKey key(hash);
				if (ExecRecs.lookup(key, execEvent) < 0) {
					if (debug_mode) {
						fprintf(stderr,
								"internal error: can't find execute event for "
								"evicted job %s!\n", hash);
					}
					delete event;
					break;
				}
				if (ExecRecs.remove(key) < 0) {
					if (debug_mode) {
						fprintf(stderr,
								"internal error: hashtable remove failed for "
								"%s!\n", hash);
					}
					delete event;
					break;
				}
				time_t start_time, end_time, ckpt_time=0;
				start_time = mktime(&execEvent->eventTime);
				end_time = mktime(&event->eventTime);
				int cpu_usage = 0;
				if (evictEvent->checkpointed) {
					ckpt_time = end_time;
					cpu_usage = evictEvent->run_remote_rusage.ru_utime.tv_sec +
						evictEvent->run_remote_rusage.ru_stime.tv_sec;
				} else {
					CheckpointedEvent *ckptEvent;
					if (CkptRecs.lookup(key, ckptEvent) >= 0) {
						ckpt_time = mktime(&ckptEvent->eventTime);
						cpu_usage =
							ckptEvent->run_remote_rusage.ru_utime.tv_sec +
							ckptEvent->run_remote_rusage.ru_stime.tv_sec;
					}
					if (ckpt_time < start_time) {
						ckpt_time = start_time;
						cpu_usage = 0;
					}
				}
				new_record(event->cluster, event->proc, (int)start_time,
						   (int)end_time,
						   (int)ckpt_time-start_time, cpu_usage,
						   execEvent->getExecuteHost());
				delete execEvent;
				delete event;
				break;
			}
			case ULOG_JOB_TERMINATED: {
				ExecuteEvent *execEvent;
				JobTerminatedEvent *terminateEvent =
					(JobTerminatedEvent *)event;
				sprintf(hash, "%d.%d", event->cluster, event->proc);
				HashKey key(hash);
				if (ExecRecs.lookup(key, execEvent) < 0) {
					if (debug_mode) {
						fprintf(stderr,
								"internal error: can't find execute event for "
								"terminated job %s!\n", hash);
					}
					delete event;
					break;
				}
				if (ExecRecs.remove(key) < 0) {
					if (debug_mode) {
						fprintf(stderr,
								"internal error: hashtable remove failed "
								"for %s!\n", hash);
					}
					delete event;
					break;
				}
				time_t start_time, end_time;
				start_time = mktime(&execEvent->eventTime);
				end_time = mktime(&event->eventTime);
				if (!evict_only) {
					new_record(event->cluster, event->proc, (int)start_time,
							   (int)end_time,
							   (int)end_time-start_time,
							   terminateEvent->
							   run_remote_rusage.ru_utime.tv_sec +
							   terminateEvent->
							   run_remote_rusage.ru_stime.tv_sec,
							   execEvent->getExecuteHost());
				}
				delete execEvent;
				delete event;
				break;
			}
			case ULOG_IMAGE_SIZE:
				delete event;
				break;
			case ULOG_EXECUTABLE_ERROR:
			case ULOG_SHADOW_EXCEPTION: {
				ExecuteEvent *execEvent;
				sprintf(hash, "%d.%d", event->cluster, event->proc);
				HashKey key(hash);
				if (ExecRecs.lookup(key, execEvent) < 0) {
					if (debug_mode) {
						fprintf(stderr,
								"internal error: can't find execute event for "
								"job %s!\n", hash);
					}
					delete event;
					break;
				}
				if (ExecRecs.remove(key) < 0) {
					if (debug_mode) {
						fprintf(stderr,
								"internal error: hashtable remove failed for "
								"%s!\n", hash);
					}
					delete event;
					break;
				}
				time_t start_time, end_time, ckpt_time=0;
				start_time = mktime(&execEvent->eventTime);
				end_time = mktime(&event->eventTime);
				int cpu_usage = 0;
				CheckpointedEvent *ckptEvent;
				if (CkptRecs.lookup(key, ckptEvent) >= 0) {
					ckpt_time = mktime(&ckptEvent->eventTime);
					cpu_usage = ckptEvent->run_remote_rusage.ru_utime.tv_sec +
						ckptEvent->run_remote_rusage.ru_stime.tv_sec;
				}
				if (ckpt_time < start_time) {
					ckpt_time = start_time;
					cpu_usage = 0;
				}
				if (!evict_only) {
					new_record(event->cluster, event->proc, (int)start_time,
							   (int)end_time,
							   (int)ckpt_time-start_time, cpu_usage,
							   execEvent->getExecuteHost());
				}
				delete execEvent;
				delete event;
				break;
			}
			default:
				// ignore the rest of the eveats
				break;
			}
		} else {
			
			if (event!=NULL) delete event;
			if ((result==ULOG_RD_ERROR) || (result == ULOG_UNK_ERROR)) {
				fprintf(stderr,
						"Error: unable to read log file.\n");
				exit(0);
			
			}
		}
	}

	// delete any remaining items in the tables
	ExecuteEvent *execEvent;
	ExecRecs.startIterations();
	while (ExecRecs.iterate(execEvent) == 1) {
		delete execEvent;
	}
	CheckpointedEvent *ckptEvent;
	CkptRecs.startIterations();
	while (CkptRecs.iterate(ckptEvent) == 1) {
		delete ckptEvent;
	}
}