package io.hummer.prefetch.sim.util;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
/**
* Simple notification service for monitoring/auditing purposes.
*
* @author Waldemar Hummer
*/
public class AuditEvent {
public static final String E_INV_SUCCESS = "inv.success";
public static final String E_INV_FAILED = "inv.failed";
public static final String E_PREFETCH_HIT = "prefetch.hit";
public static final String E_PREFETCH_MISS = "prefetch.miss";
public static final String E_UNUSED_RESULT = "prefetch.result.unused";
//private static final List<AuditEvent> events = new LinkedList<>();
private static final Map<EventListener,String> listeners = new HashMap<EventListener,String>();
public long systemTime;
public double time;
public String type;
public Object data;
public static interface EventListener {
void notify(AuditEvent e);
}
public static AuditEvent addEvent(double time, String eventType) {
return addEvent(time, eventType, null);
}
public static AuditEvent addEvent(double time, String eventType, Object data) {
AuditEvent e = new AuditEvent();
e.systemTime = System.currentTimeMillis();
e.type = eventType;
e.time = time;
e.data = data;
//events.add(e);
for(Entry<EventListener,String> entry : listeners.entrySet()) {
if(eventType.matches(entry.getValue())) {
entry.getKey().notify(e);
}
}
return e;
}
// public static List<AuditEvent> getEvents(String typeRegex) {
// List<AuditEvent> result = new LinkedList<AuditEvent>();
// for(AuditEvent e : events) {
// if(e.type.matches(typeRegex)) {
// result.add(e);
// }
// }
// return result;
// }
@Override
public String toString() {
return "Event[" + type + ",time=" + time + "]";
}
public static void addListener(String typeRegex, EventListener eventListener) {
listeners.put(eventListener, typeRegex);
}
}