AndroidAPS/app/src/main/java/com/squareup/otto/LoggingBus.java

88 lines
3.2 KiB
Java
Raw Normal View History

2017-10-14 17:24:01 +02:00
package com.squareup.otto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
2017-10-14 18:07:12 +02:00
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
2017-10-14 17:24:01 +02:00
import info.nightscout.androidaps.events.Event;
2017-10-14 18:07:12 +02:00
/** Logs events has they're being posted to and dispatched from the event bus.
*
2017-10-21 15:02:53 +02:00
* A summary of event-receiver calls that occurred so far is logged
2017-10-14 18:07:12 +02:00
* after 10s (after startup) and then again every 60s.
* */
2017-10-14 17:24:01 +02:00
public class LoggingBus extends Bus {
private static Logger log = LoggerFactory.getLogger(LoggingBus.class);
2017-10-14 18:07:12 +02:00
private static long everyMinute = System.currentTimeMillis() + 10 * 1000;
private Map<String, Set<String>> event2Receiver = new HashMap<>();
2017-10-14 17:24:01 +02:00
public LoggingBus(ThreadEnforcer enforcer) {
super(enforcer);
}
@Override
public void post(Object event) {
if (event instanceof DeadEvent) {
log.debug("Event has no receiver: " + ((DeadEvent) event).event + ", source: " + ((DeadEvent) event).source);
return;
}
if (!(event instanceof Event)) {
log.error("Posted event not an event class: " + event.getClass());
}
log.debug("<<< " + event);
try {
StackTraceElement caller = new Throwable().getStackTrace()[1];
String className = caller.getClassName();
className = className.substring(className.lastIndexOf(".") + 1);
log.debug(" source: " + className + "." + caller.getMethodName() + ":" + caller.getLineNumber());
} catch (RuntimeException e) {
log.debug(" source: <unknown>");
}
super.post(event);
}
@Override
protected void dispatch(Object event, EventHandler wrapper) {
try {
log.debug(">>> " + event);
Field methodField = wrapper.getClass().getDeclaredField("method");
methodField.setAccessible(true);
2017-10-21 15:02:53 +02:00
Method targetMethod = (Method) methodField.get(wrapper);
String className = targetMethod.getDeclaringClass().getSimpleName();
String methodName = targetMethod.getName();
2017-10-14 18:07:12 +02:00
String receiverMethod = className + "." + methodName;
log.debug(" receiver: " + receiverMethod);
String key = event.getClass().getSimpleName();
if (!event2Receiver.containsKey(key)) event2Receiver.put(key, new HashSet<String>());
event2Receiver.get(key).add(receiverMethod);
2017-10-14 17:24:01 +02:00
} catch (ReflectiveOperationException e) {
log.debug(" receiver: <unknown>");
}
2017-10-14 18:07:12 +02:00
if (everyMinute < System.currentTimeMillis()) {
2017-10-21 15:02:53 +02:00
log.debug("***************** Event -> receiver pairings seen so far ****************");
2017-10-14 18:07:12 +02:00
for (Map.Entry<String, Set<String>> stringSetEntry : event2Receiver.entrySet()) {
log.debug(" " + stringSetEntry.getKey());
for (String s : stringSetEntry.getValue()) {
log.debug(" -> " + s);
}
}
2017-10-21 15:02:53 +02:00
log.debug("*************************************************************************");
2017-10-14 18:07:12 +02:00
everyMinute = System.currentTimeMillis() + 60 * 1000;
}
2017-10-14 17:24:01 +02:00
super.dispatch(event, wrapper);
}
}