001package org.nuxeo.ecm.core.management.jtajca.internal; 002 003import java.util.Arrays; 004import java.util.Collection; 005import java.util.Comparator; 006 007import javax.management.ObjectInstance; 008 009import org.nuxeo.ecm.core.api.CoreInstance; 010import org.nuxeo.ecm.core.api.CoreInstance.RegistrationInfo; 011import org.nuxeo.ecm.core.management.jtajca.CoreSessionMonitor; 012import org.nuxeo.ecm.core.management.jtajca.Defaults; 013import org.nuxeo.runtime.metrics.MetricsService; 014 015import com.codahale.metrics.JmxAttributeGauge; 016import com.codahale.metrics.MetricRegistry; 017import com.codahale.metrics.SharedMetricRegistries; 018 019public class DefaultCoreSessionMonitor implements CoreSessionMonitor { 020 021 // @since 5.7.2 022 protected final MetricRegistry registry = SharedMetricRegistries.getOrCreate(MetricsService.class.getName()); 023 024 @Override 025 public int getCount() { 026 return CoreInstance.getInstance().getNumberOfSessions(); 027 } 028 029 @Override 030 public String[] getInfos() { 031 return toInfos(toSortedRegistration(CoreInstance.getInstance().getRegistrationInfos())); 032 } 033 034 public RegistrationInfo[] toSortedRegistration(Collection<RegistrationInfo> infos) { 035 RegistrationInfo[] sortedInfos = infos.toArray(new RegistrationInfo[infos.size()]); 036 Arrays.sort(sortedInfos, new Comparator<RegistrationInfo>() { 037 038 @Override 039 public int compare(RegistrationInfo o1, RegistrationInfo o2) { 040 return o2.session.getSessionId().compareTo(o1.session.getSessionId()); 041 } 042 043 }); 044 return sortedInfos; 045 } 046 047 public String[] toInfos(RegistrationInfo[] infos) { 048 String[] values = new String[infos.length]; 049 for (int i = 0; i < infos.length; ++i) { 050 values[i] = Defaults.instance.printStackTrace(infos[i]); 051 } 052 return values; 053 } 054 055 protected ObjectInstance self; 056 057 @Override 058 public void install() { 059 self = DefaultMonitorComponent.bind(CoreSessionMonitor.class, this); 060 registry.register(MetricRegistry.name("nuxeo.repositories", "sessions"), 061 new JmxAttributeGauge(self.getObjectName(), "Count")); 062 } 063 064 @Override 065 public void uninstall() { 066 DefaultMonitorComponent.unbind(self); 067 registry.remove(MetricRegistry.name("nuxeo.repositories", "sessions")); 068 self = null; 069 } 070 071}