/**
* 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.receptor;
import java.util.concurrent.atomic.AtomicBoolean;
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.comcast.viper.flume2storm.connection.sender.EventSender;
/**
* Statistics related to the {@link EventReceptor}. This class is thread-safe.
*/
public final class EventReceptorStats implements EventReceptorStatsMBean {
protected final String eventSenderId;
protected final AtomicBoolean isConnected;
protected final AtomicLong nbEventsIn;
protected final AtomicLong nbEventsQueued;
/**
* Default constructor
*
* @param eventSenderId
* The {@link EventSender} identifier
*/
public EventReceptorStats(String eventSenderId) {
this.eventSenderId = eventSenderId;
isConnected = new AtomicBoolean(false);
nbEventsIn = new AtomicLong();
nbEventsQueued = new AtomicLong();
}
/**
* @see com.comcast.viper.flume2storm.connection.receptor.EventReceptorStatsMBean#getEventSenderId()
*/
@Override
public String getEventSenderId() {
return eventSenderId;
}
/**
* @see com.comcast.viper.flume2storm.connection.receptor.EventReceptorStatsMBean#reset()
*/
@Override
public final EventReceptorStats reset() {
isConnected.set(false);
nbEventsIn.set(0);
nbEventsQueued.set(0);
return this;
}
/**
* @see com.comcast.viper.flume2storm.connection.receptor.EventReceptorStatsMBean#isConnected()
*/
@Override
public final boolean isConnected() {
return isConnected.get();
}
/**
* See {@link #isConnected()}
*
* @return This object
*/
public final EventReceptorStats setConnected() {
isConnected.set(true);
return this;
}
/**
* See {@link #isConnected()}
*
* @return This object
*/
public final EventReceptorStats setDisconnected() {
isConnected.set(false);
return this;
}
/**
* @see com.comcast.viper.flume2storm.connection.receptor.EventReceptorStatsMBean#getNbEventsIn()
*/
@Override
public final long getNbEventsIn() {
return nbEventsIn.get();
}
/**
* See {@link #getNbEventsIn()}
*
* @return This object
*/
public final EventReceptorStats incrEventsIn() {
return incrEventsIn(1);
}
/**
* See {@link #getNbEventsIn()}
*
* @param i
* The number of events to increment
*
* @return This object
*/
public final EventReceptorStats incrEventsIn(final int i) {
nbEventsIn.addAndGet(i);
return this;
}
/**
* @see com.comcast.viper.flume2storm.connection.receptor.EventReceptorStatsMBean#getNbEventsQueued()
*/
@Override
public final long getNbEventsQueued() {
return nbEventsQueued.get();
}
/**
* See {@link #getNbEventsQueued()}
*
* @param i
* The number of events to set the queue to
* @return This object
*/
public final EventReceptorStats setEventsQueued(final int i) {
nbEventsQueued.set(i);
return this;
}
/**
* See {@link #getNbEventsQueued()}
*
* @return This object
*/
public final EventReceptorStats incrEventsQueued() {
return incrEventsQueued(1);
}
/**
* See {@link #getNbEventsQueued()}
*
* @return This object
*/
public final EventReceptorStats decrEventsQueued() {
return incrEventsQueued(-1);
}
/**
* See {@link #getNbEventsQueued()}
*
* @param i
* The number of events to increment
*
* @return This object
*/
public final EventReceptorStats incrEventsQueued(final int i) {
nbEventsQueued.addAndGet(i);
return this;
}
/**
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return new HashCodeBuilder().append(isConnected).append(nbEventsIn).append(nbEventsQueued).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;
EventReceptorStats other = (EventReceptorStats) obj;
return new EqualsBuilder().append(this.isConnected(), other.isConnected())
.append(this.getNbEventsIn(), other.getNbEventsIn())
.append(this.getNbEventsQueued(), other.getNbEventsQueued()).isEquals();
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).append("isConnected", isConnected())
.append("NbEventsIn", getNbEventsIn()).append("NbEventsQueued", getNbEventsQueued()).toString();
}
}