diff --git a/src/main/java/net/sharksystem/hub/hubside/metrics/HubLogger.java b/src/main/java/net/sharksystem/hub/hubside/metrics/HubLogger.java new file mode 100644 index 0000000..b41f747 --- /dev/null +++ b/src/main/java/net/sharksystem/hub/hubside/metrics/HubLogger.java @@ -0,0 +1,61 @@ +package net.sharksystem.hub.hubside.metrics; + +import net.sharksystem.utils.Log; + +public class HubLogger { + + public void logWrite(String logMessage){ + System.out.println(logMessage); + } + + public void writeRegister(CharSequence peerId, boolean canCreateTCPConnections) { + String logMessage = + "[REGISTER] peerId:" + peerId + + "; canCreateTCPConnections:" + canCreateTCPConnections + + " [/REGISTER]"; + logWrite(logMessage); + } + + public void writeUnregister(CharSequence peerId) { + String logMessage = + "[UNREGISTER] peerId:" + peerId + + " [/UNREGISTER]"; + logWrite(logMessage); + } + + public void writeStartDataSession(CharSequence source, CharSequence target, long timeStart, int timeout) { + String logMessage = + "[START_DATA_SESSION] source:" + source + + "; target:" + target + + "; timeStart:" + timeStart + + "; timeout:" + timeout + + " [/START_DATA_SESSION]"; + logWrite(logMessage); + } + + public void writeConnectionRequested(CharSequence source, CharSequence target, int timeout) { + String logMessage = + "[CONNECTION_REQUEST] source:" + source + + "; target:" + target + + "; timeout:" + timeout + + " [/CONNECTION_REQUEST]"; + logWrite(logMessage); + } + + public void writeConnectionEnded(CharSequence source, CharSequence target, long timeEnd) { + String logMessage = + "[NOTIFY_CONNECTION_ENDED] source:" + source + + "; target:" + target + + "; timeEnd:" + timeEnd + + " [/NOTIFY_CONNECTION_ENDED]"; + logWrite(logMessage); + } + + public void writeDisconnected(CharSequence source, CharSequence target) { + String logMessage = + "[DISCONNECT] source:" + source + + "; target:" + target + + " [/DISCONNECT]"; + logWrite(logMessage); + } +} diff --git a/src/main/java/net/sharksystem/hub/hubside/metrics/HubMetricsDecorator.java b/src/main/java/net/sharksystem/hub/hubside/metrics/HubMetricsDecorator.java new file mode 100644 index 0000000..73bdffe --- /dev/null +++ b/src/main/java/net/sharksystem/hub/hubside/metrics/HubMetricsDecorator.java @@ -0,0 +1,86 @@ +package net.sharksystem.hub.hubside.metrics; + +import net.sharksystem.hub.ASAPHubException; +import net.sharksystem.hub.hubside.ConnectorInternal; +import net.sharksystem.hub.hubside.HubInternal; +import net.sharksystem.utils.streams.StreamPair; + +import java.io.IOException; +import java.util.Set; + +/** + * HubMetricsDecorator is a class that can decorate + * any object that implements HubInternal. It acts + * as a man-in-the-middle and relays hub method calls + * without any changes and side effects. This decorator + * implements the same interface (HubInternal) as the class + * it decorates. + */ +public class HubMetricsDecorator implements HubInternal { + + /** + * hubDelegate is the concrete hub instance to be + * decorated. Incoming method calls to this decorator + * instance will be relayed to this delegate instance + * without changed parameters or interfering with the + * delegate in any way. + */ + private final HubInternal hubDelegate; + private final HubLogger logger = new HubLogger(); + + @Override + public void register(CharSequence peerId, ConnectorInternal hubConnectorSession) { + //logger.writeRegister(peerID); + hubDelegate.register(peerId, hubConnectorSession); + } + + @Override + public void register(CharSequence peerId, ConnectorInternal hubConnectorSession, boolean canCreateTCPConnections) { + logger.writeRegister(peerId, canCreateTCPConnections); + hubDelegate.register(peerId, hubConnectorSession, canCreateTCPConnections); + } + + @Override + public void unregister(CharSequence peerId) { + logger.writeUnregister(peerId); + hubDelegate.unregister(peerId); + } + + @Override + public Set getRegisteredPeers() { + return hubDelegate.getRegisteredPeers(); + } + + @Override + public boolean isRegistered(CharSequence peerID) { + return hubDelegate.isRegistered(peerID); + } + + @Override + public void connectionRequest(CharSequence sourcePeerID, CharSequence targetPeerID, int timeout) throws ASAPHubException, IOException { + logger.writeConnectionRequested(sourcePeerID, targetPeerID, timeout); + hubDelegate.connectionRequest(sourcePeerID, targetPeerID, timeout); + } + + @Override + public void disconnect(CharSequence sourcePeerID, CharSequence targetPeerID) throws ASAPHubException { + logger.writeDisconnected(sourcePeerID, targetPeerID); + hubDelegate.disconnect(sourcePeerID, targetPeerID); + } + + @Override + public void startDataSession(CharSequence sourcePeerID, CharSequence targetPeerID, StreamPair connection, int timeout) throws ASAPHubException, IOException { + logger.writeStartDataSession(sourcePeerID, targetPeerID, System.currentTimeMillis(), timeout); + hubDelegate.startDataSession(sourcePeerID, targetPeerID, connection, timeout); + } + + @Override + public void notifyConnectionEnded(CharSequence sourcePeerID, CharSequence targetPeerID, StreamPair connection) throws ASAPHubException { + logger.writeConnectionEnded(sourcePeerID, targetPeerID, System.currentTimeMillis()); + hubDelegate.notifyConnectionEnded(sourcePeerID, targetPeerID, connection); + } + + public HubMetricsDecorator(HubInternal hubDelegate) { + this.hubDelegate = hubDelegate; + } +}