package com.eucalyptus.records; import org.apache.log4j.Logger; import org.mule.RequestContext; import org.mule.api.MuleEvent; import edu.ucsb.eucalyptus.msgs.EucalyptusMessage; public class EventRecord extends EucalyptusMessage { private static Logger LOG = Logger.getLogger( EventRecord.class ); private static Record create( final Class component, final EventClass eventClass, final EventType eventName, final String other, int dist ) { EucalyptusMessage msg = tryForMessage( ); StackTraceElement[] stack = Thread.currentThread( ).getStackTrace( ); StackTraceElement ste = stack[dist+3<stack.length?dist+3:stack.length-1]; return new LogFileRecord( eventClass, eventName, component, ste, msg.getUserId( ), msg.getCorrelationId( ), other ); } public static Record here( final Class component, final EventClass eventClass, final EventType eventName, final String... other ) { return create( component, eventClass, eventName, getMessageString( other ), 1 ); } public static Record caller( final Class component, final EventClass eventClass, final EventType eventName, final Object... other ) { return create( component, eventClass, eventName, getMessageString( other ), 2 ); } public static Record here( final Class component, final EventType eventName, final String... other ) { return create( component, EventClass.ORPHAN, eventName, getMessageString( other ), 1 ); } public static Record caller( final Class component, final EventType eventName, final Object... other ) { return create( component, EventClass.ORPHAN, eventName, getMessageString( other ), 2 ); } private static String getMessageString( final Object[] other ) { StringBuffer last = new StringBuffer( ); if( other != null ) { for ( Object x : other ) { last.append( ":" ).append( x ); } } return last.length( ) > 1 ? last.substring( 1 ) : last.toString( ); } private static EucalyptusMessage BOGUS = getBogusMessage( ); private static EucalyptusMessage getBogusMessage( ) { EucalyptusMessage hi = new EucalyptusMessage( ); hi.setUserId( null ); hi.setEffectiveUserId( null ); hi.setCorrelationId( null ); return hi; } private static EucalyptusMessage tryForMessage( ) { EucalyptusMessage msg = null; MuleEvent event = RequestContext.getEvent( ); if ( event != null ) { if ( event.getMessage( ) != null && event.getMessage( ).getPayload( ) != null && event.getMessage( ).getPayload( ) instanceof EucalyptusMessage ) { msg = ( ( EucalyptusMessage ) event.getMessage( ).getPayload( ) ); } } return msg == null ? BOGUS : msg; } public static void flush( ) { //RecordProcessor.flush( ); } }