1
package edu.ucsb.eucalyptus.msgs;
3
import org.mule.RequestContext;
4
import org.mule.api.MuleEvent;
6
import com.eucalyptus.bootstrap.Component;
7
import com.eucalyptus.util.DebugUtil;
9
import edu.ucsb.eucalyptus.constants.EventType;
11
public class EventRecord extends EucalyptusMessage {
13
private static EucalyptusMessage BOGUS = getBogusMessage();
19
String eventCorrelationId;
23
private EventRecord(final String component, final String eventUserId, final String eventCorrelationId, final String eventId, final String other, int distance ) {
24
this.timestamp = System.currentTimeMillis();
25
this.component = component;
26
this.eventUserId = eventUserId;
27
this.eventCorrelationId = eventCorrelationId;
28
this.eventId = eventId;
29
this.other = ":" + other;
30
if( DebugUtil.DEBUG ) {
31
StackTraceElement ste = Thread.currentThread().getStackTrace( )[distance];
32
if( ste != null && ste.getFileName( ) != null ) {
33
this.caller = String.format( "%s.%s.%s", ste.getFileName( ).replaceAll( "\\.\\w*\\b", "" ), ste.getMethodName( ), ste.getLineNumber( ) );
35
this.caller = "unknown";
42
private static EucalyptusMessage getBogusMessage( ) {
43
EucalyptusMessage hi = new EucalyptusMessage( );
44
hi.setUserId( "eucalyptus" );
45
hi.setCorrelationId( "eucalyptus" );
49
public EventRecord() {
52
public String toString() {
53
return String.format(":%10d:%s:uid:%s:%s:%s%s:",
57
this.eventCorrelationId,
59
this.other != null ? this.other : "",
61
).replaceAll("::*",":");
64
public static EventRecord create( final String component, final String eventUserId, final String eventCorrelationId, final Object eventName, final String other, int dist ) {
65
return new EventRecord( component, eventUserId, eventCorrelationId, eventName.toString( ), getMessageString(other), 3 + dist );
67
public static EventRecord here( final Class component, final Object eventName, final String... other) {
68
EucalyptusMessage msg = tryForMessage( );
69
return create( component.getSimpleName( ), msg.getUserId( ), msg.getCorrelationId( ), eventName.toString( ), getMessageString( other ), 1 );
71
public static EventRecord here( final String component, final Object eventName, final String... other) {
72
EucalyptusMessage msg = tryForMessage( );
73
return create( component, msg.getUserId( ), msg.getCorrelationId( ), eventName.toString( ), getMessageString( other ), 1 );
75
public static EventRecord here( final Component component, final Object eventName, final String... other) {
76
EucalyptusMessage msg = tryForMessage( );
77
return create( component.name( ), msg.getUserId( ), msg.getCorrelationId( ), eventName.toString( ), getMessageString( other ), 1 );
79
public static EventRecord caller( final Class component, final Object eventName, final String... other) {
80
EucalyptusMessage msg = tryForMessage( );
81
return create( component.getSimpleName( ), msg.getUserId( ), msg.getCorrelationId( ), eventName.toString( ), getMessageString( other ), 2 );
83
private static String getMessageString( final String... other ) {
84
StringBuffer last = new StringBuffer();
85
for(String x : other) {
86
last.append( ":" ).append(x);
88
return last.length()>1?last.substring( 1 ):last.toString( );
90
private static EucalyptusMessage tryForMessage( ) {
91
EucalyptusMessage msg = null;
92
MuleEvent event = RequestContext.getEvent( );
94
if( event.getMessage( ) != null && event.getMessage( ).getPayload( ) != null && event.getMessage( ).getPayload( ) instanceof EucalyptusMessage ) {
95
msg = ((EucalyptusMessage) event.getMessage( ).getPayload( ) );
98
return msg==null?BOGUS:msg;