/** * */ package vnet.sms.gateway.nettysupport; import static org.apache.commons.lang.Validate.notNull; import java.net.SocketAddress; import java.util.Date; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandler; import vnet.sms.gateway.nettysupport.monitor.ChannelInfoChannelHandler; import vnet.sms.gateway.nettysupport.monitor.incoming.IncomingBytesCountingChannelHandler; import vnet.sms.gateway.nettysupport.monitor.incoming.IncomingMessagesMonitoringChannelHandler; import vnet.sms.gateway.nettysupport.monitor.incoming.IncomingPdusCountingChannelHandler; import vnet.sms.gateway.nettysupport.monitor.outgoing.OutgoingBytesCountingChannelHandler; import vnet.sms.gateway.nettysupport.monitor.outgoing.OutgoingMessagesMonitoringChannelHandler; import vnet.sms.gateway.nettysupport.monitor.outgoing.OutgoingPdusCountingChannelHandler; import com.yammer.metrics.core.Counter; import com.yammer.metrics.core.Gauge; import com.yammer.metrics.core.Histogram; import com.yammer.metrics.core.Meter; /** * @author obergner * */ class ChannelPipelineBackedChannelStatistics implements ChannelStatistics { private final Channel channel; ChannelPipelineBackedChannelStatistics(final Channel channel) { notNull(channel, "Argument 'channel' must not be null"); this.channel = channel; } @Override public Gauge<Integer> getId() { return channelHandler(ChannelInfoChannelHandler.class).getId(); } @Override public Gauge<Date> getConnectedSince() { return channelHandler(ChannelInfoChannelHandler.class) .getConnectedSince(); } @Override public Gauge<SocketAddress> getLocalAddress() { return channelHandler(ChannelInfoChannelHandler.class) .getLocalAddress(); } @Override public Gauge<SocketAddress> getRemoteAddress() { return channelHandler(ChannelInfoChannelHandler.class) .getRemoteAddress(); } @Override public Gauge<Integer> getConnectTimeoutMillis() { return channelHandler(ChannelInfoChannelHandler.class) .getConnectTimeoutMillis(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfReceivedBytes() */ @Override public final Histogram getNumberOfReceivedBytes() { return channelHandler(IncomingBytesCountingChannelHandler.class) .getNumberOfReceivedBytes(); } private <T extends ChannelHandler> T channelHandler( final Class<T> handlerType) { return this.channel.getPipeline().get(handlerType); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getTotalNumberOfReceivedBytes() */ @Override public final Counter getTotalNumberOfReceivedBytes() { return channelHandler(IncomingBytesCountingChannelHandler.class) .getTotalNumberOfReceivedBytes(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfReceivedPdus() */ @Override public final Meter getNumberOfReceivedPdus() { return channelHandler(IncomingPdusCountingChannelHandler.class) .getNumberOfReceivedPdus(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfReceivedLoginRequests() */ @Override public final Meter getNumberOfReceivedLoginRequests() { return channelHandler(IncomingMessagesMonitoringChannelHandler.class) .getNumberOfReceivedLoginRequests(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfReceivedLoginResponses() */ @Override public final Meter getNumberOfReceivedLoginResponses() { return channelHandler(IncomingMessagesMonitoringChannelHandler.class) .getNumberOfReceivedLoginResponses(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfReceivedPingRequests() */ @Override public final Meter getNumberOfReceivedPingRequests() { return channelHandler(IncomingMessagesMonitoringChannelHandler.class) .getNumberOfReceivedPingRequests(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfReceivedPingResponses() */ @Override public final Meter getNumberOfReceivedPingResponses() { return channelHandler(IncomingMessagesMonitoringChannelHandler.class) .getNumberOfReceivedPingResponses(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfReceivedSms() */ @Override public final Meter getNumberOfReceivedSms() { return channelHandler(IncomingMessagesMonitoringChannelHandler.class) .getNumberOfReceivedSms(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfAcceptedLoginRequests() */ @Override public final Meter getNumberOfAcceptedLoginRequests() { return channelHandler(OutgoingMessagesMonitoringChannelHandler.class) .getNumberOfAcceptedLoginRequests(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfRejectedLoginRequests() */ @Override public final Meter getNumberOfRejectedLoginRequests() { return channelHandler(OutgoingMessagesMonitoringChannelHandler.class) .getNumberOfRejectedLoginRequests(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfSentBytes() */ @Override public final Histogram getNumberOfSentBytes() { return channelHandler(OutgoingBytesCountingChannelHandler.class) .getNumberOfSentBytes(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getTotalNumberOfSentBytes() */ @Override public final Counter getTotalNumberOfSentBytes() { return channelHandler(OutgoingBytesCountingChannelHandler.class) .getTotalNumberOfSentBytes(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfSentPdus() */ @Override public final Meter getNumberOfSentPdus() { return channelHandler(OutgoingPdusCountingChannelHandler.class) .getNumberOfSentPdus(); } /** * @see vnet.sms.gateway.nettysupport.ChannelStatistics#getNumberOfSentPingRequests() */ @Override public final Meter getNumberOfSentPingRequests() { return channelHandler(OutgoingMessagesMonitoringChannelHandler.class) .getNumberOfSentPingRequests(); } @Override public String toString() { return "ChannelPipelineBackedChannelStatistics@" + this.hashCode() + "[channel: " + this.channel + "]"; } }