package com.rayo.server.jmx;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;
import com.rayo.server.CallActor;
import com.rayo.server.CallRegistry;
import com.rayo.server.CallStatistics;
import com.rayo.server.CdrManager;
import com.rayo.server.verb.VerbHandler;
@ManagedResource(objectName="com.rayo:Type=Calls", description="Active Calls")
public class Calls implements Serializable, CallsMXBean {
private static final long serialVersionUID = 1L;
private CallRegistry callRegistry;
private CallStatistics callStatistics;
private CdrManager cdrManager;
@ManagedAttribute(description="Active Verbs Count")
public long getActiveVerbsCount() {
long size = 0;
Collection<CallActor<?>> actors = callRegistry.getActiveCalls();
for (CallActor<?> actor: actors) {
size+= actor.getVerbs().size();
}
return size;
}
@ManagedAttribute(description="Active Verbs")
public Map<String, Long> getActiveVerbs() {
Map<String,Long> verbsCount = new HashMap<String, Long>();
Collection<CallActor<?>> actors = callRegistry.getActiveCalls();
for (CallActor<?> actor: actors) {
Collection<VerbHandler<?,?>> handlers = actor.getVerbs();
for (VerbHandler<?,?> handler: handlers) {
String verbName = handler.getModel().getClass().getName();
verbName = verbName.substring(verbName.lastIndexOf('.') + 1);
Long count = verbsCount.get(verbName);
if (count == null) {
count = new Long(0);
}
verbsCount.put(verbName,new Long(count+1));
}
}
return verbsCount;
}
@ManagedAttribute(description="Active Calls Count")
public long getActiveCallsCount() {
return callRegistry.size();
}
@ManagedAttribute(description="Active Calls")
public List<Call> getActiveCalls() {
Collection<CallActor<?>> actors = callRegistry.getActiveCalls();
List<Call> calls = new ArrayList<Call>();
for (CallActor<?> actor: actors) {
calls.add(new Call(actor.getCall(), callRegistry, cdrManager));
}
return calls;
}
@ManagedAttribute(description="Total Calls")
public long getTotalCalls() {
return callStatistics.getTotalCalls();
}
@ManagedAttribute(description="Total Verbs")
public long getTotalVerbs() {
return callStatistics.getTotalVerbs();
}
public void setCallRegistry(CallRegistry callRegistry) {
this.callRegistry = callRegistry;
}
public void setCallStatistics(CallStatistics callStatistics) {
this.callStatistics = callStatistics;
}
public void setCdrManager(CdrManager cdrManager) {
this.cdrManager = cdrManager;
}
}