/** * Copyright 2014 Comcast Cable Communications Management, LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.comcast.viper.flume2storm.connection.sender; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.google.common.base.Preconditions; /** * Statistics related to the {@link EventSender}. This class is thread-safe. */ public final class EventSenderStats implements EventSenderStatsMBean { protected final String eventSenderId; protected final AtomicInteger nbClients; protected final AtomicLong nbEventIn; protected final AtomicLong nbEventOut; protected final AtomicLong nbEventFailed; /** * Default constructor * * @param eventSenderId * The {@link EventSender} identifier */ public EventSenderStats(final String eventSenderId) { this.eventSenderId = eventSenderId; nbClients = new AtomicInteger(); nbEventIn = new AtomicLong(); nbEventOut = new AtomicLong(); nbEventFailed = new AtomicLong(); } /** * @see com.comcast.viper.flume2storm.connection.sender.EventSenderStatsMBean#getEventSenderId() */ @Override public String getEventSenderId() { return eventSenderId; } /** * @see com.comcast.viper.flume2storm.connection.sender.EventSenderStatsMBean#reset() */ @Override public final EventSenderStats reset() { nbClients.set(0); nbEventIn.set(0); nbEventOut.set(0); nbEventFailed.set(0); return this; } /** * @see com.comcast.viper.flume2storm.connection.sender.EventSenderStatsMBean#getNbClients() */ @Override public final int getNbClients() { return nbClients.get(); } /** * See {@link #getNbClients()} * * @return This object */ public final EventSenderStats incrClients() { nbClients.incrementAndGet(); return this; } /** * See {@link #getNbClients()} * * @return This object */ public final EventSenderStats decrClients() { nbClients.decrementAndGet(); return this; } /** * See {@link #getNbClients()} * * @return This object */ public final EventSenderStatsMBean resetClients() { nbClients.set(0); return this; } /** * @see com.comcast.viper.flume2storm.connection.sender.EventSenderStatsMBean#getNbEventsIn() */ @Override public final long getNbEventsIn() { return nbEventIn.get(); } /** * See {@link #getNbEventsIn()} * * @return This object */ public final EventSenderStats incrEventsIn() { return incrEventsIn(1); } /** * See {@link #getNbEventsIn()} * * @param i * The number of events to increment * * @return This object */ public final EventSenderStats incrEventsIn(final int i) { nbEventIn.addAndGet(i); return this; } /** * @see com.comcast.viper.flume2storm.connection.sender.EventSenderStatsMBean#getNbEventsOut() */ @Override public final long getNbEventsOut() { return nbEventOut.get(); } /** * See {@link #getNbEventsOut()} * * @return This object */ public final EventSenderStats incrEventsOut() { return incrEventsOut(1); } /** * See {@link #getNbEventsOut()} * * @param i * The number of events to increment * * @return This object */ public final EventSenderStats incrEventsOut(final int i) { nbEventOut.addAndGet(i); return this; } /** * @see com.comcast.viper.flume2storm.connection.sender.EventSenderStatsMBean#getNbEventsFailed() */ @Override public final long getNbEventsFailed() { return nbEventFailed.get(); } /** * See {@link #getNbEventsFailed()} * * @return This object */ public final EventSenderStatsMBean incrEventsFailed() { return incrEventsFailed(1); } /** * See {@link #getNbEventsFailed()} * * @param i * The number of events to increment * * @return This object */ public final EventSenderStatsMBean incrEventsFailed(final int i) { nbEventFailed.addAndGet(i); return this; } /** * @param other * Another KryoNet Event Sender statistics object * @return True if the stats are the same */ public boolean sameAs(EventSenderStats other) { Preconditions.checkNotNull(other); if (getNbClients() != other.getNbClients()) return false; if (getNbEventsIn() != other.getNbEventsIn()) return false; if (getNbEventsOut() != other.getNbEventsOut()) return false; if (getNbEventsFailed() != other.getNbEventsFailed()) return false; return true; } /** * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return new HashCodeBuilder().append(nbClients).append(nbEventIn).append(nbEventOut).append(nbEventFailed) .hashCode(); } /** * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; EventSenderStats other = (EventSenderStats) obj; return new EqualsBuilder().append(this.nbClients, other.nbClients).append(this.nbEventIn, other.nbEventIn) .append(this.nbEventOut, other.nbEventOut).append(this.nbEventFailed, other.nbEventFailed).isEquals(); } /** * @see java.lang.Object#toString() */ @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("NbClients", getNbClients()) .append("NbEventsIn", getNbEventsIn()).append("NbEventsOut", getNbEventsOut()) .append("NbEventsFailed", getNbEventsFailed()).toString(); } }