package org.nuxeo.ecm.core.management.jtajca.internal;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import javax.management.ObjectInstance;
import org.nuxeo.ecm.core.api.CoreInstance;
import org.nuxeo.ecm.core.api.CoreInstance.RegistrationInfo;
import org.nuxeo.ecm.core.management.jtajca.CoreSessionMonitor;
import org.nuxeo.ecm.core.management.jtajca.Defaults;
import org.nuxeo.runtime.metrics.MetricsService;
import com.codahale.metrics.JmxAttributeGauge;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.SharedMetricRegistries;
public class DefaultCoreSessionMonitor implements CoreSessionMonitor {
// @since 5.7.2
protected final MetricRegistry registry = SharedMetricRegistries.getOrCreate(MetricsService.class.getName());
@Override
public int getCount() {
return CoreInstance.getInstance().getNumberOfSessions();
}
@Override
public String[] getInfos() {
return toInfos(toSortedRegistration(CoreInstance.getInstance().getRegistrationInfos()));
}
public RegistrationInfo[] toSortedRegistration(
Collection<RegistrationInfo> infos) {
RegistrationInfo[] sortedInfos = infos.toArray(new RegistrationInfo[infos.size()]);
Arrays.sort(sortedInfos, new Comparator<RegistrationInfo>() {
@Override
public int compare(RegistrationInfo o1, RegistrationInfo o2) {
return o2.session.getSessionId().compareTo(
o1.session.getSessionId());
}
});
return sortedInfos;
}
public String[] toInfos(RegistrationInfo[] infos) {
String[] values = new String[infos.length];
for (int i = 0; i < infos.length; ++i) {
values[i] = Defaults.instance.printStackTrace(infos[i]);
}
return values;
}
protected ObjectInstance self;
@Override
public void install() {
self = DefaultMonitorComponent.bind(CoreSessionMonitor.class, this);
registry.register(MetricRegistry.name("nuxeo.repositories", "sessions"),
new JmxAttributeGauge(self.getObjectName(), "Count"));
}
@Override
public void uninstall() {
DefaultMonitorComponent.unbind(self);
registry.remove(MetricRegistry.name("nuxeo.repositories", "sessions"));
self = null;
}
}