/* * (C) Copyright 2011 Nuxeo SA (http://nuxeo.com/) and others. * * 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. * * Contributors: * matic */ package org.nuxeo.ecm.core.management.jtajca.internal; import org.nuxeo.ecm.core.management.jtajca.ConnectionPoolMonitor; import org.nuxeo.ecm.core.management.jtajca.internal.DefaultMonitorComponent.ServerInstance; import org.nuxeo.runtime.jtajca.NuxeoConnectionManager; import org.nuxeo.runtime.jtajca.NuxeoContainer; import org.nuxeo.runtime.metrics.MetricsService; import com.codahale.metrics.JmxAttributeGauge; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.SharedMetricRegistries; /** * @author matic */ public class DefaultConnectionPoolMonitor implements ConnectionPoolMonitor { // @since 5.7.2 protected final MetricRegistry registry = SharedMetricRegistries.getOrCreate(MetricsService.class.getName()); protected final String name; protected NuxeoConnectionManager cm; protected DefaultConnectionPoolMonitor(String mame, NuxeoConnectionManager cm) { name = mame; this.cm = cm; } protected ServerInstance self; public NuxeoConnectionManager getManager() { return cm; } @Override public void install() { self = DefaultMonitorComponent.bind(this, name); registry.register(MetricRegistry.name("nuxeo", "repositories", name, "connections", "count"), new JmxAttributeGauge(self.name, "ConnectionCount")); registry.register(MetricRegistry.name("nuxeo", "repositories", name, "connections", "idle"), new JmxAttributeGauge(self.name, "IdleConnectionCount")); registry.register(MetricRegistry.name("nuxeo", "repositories", name, "connections", "killed"), new JmxAttributeGauge(self.name, "KilledActiveConnectionCount")); } @Override public void uninstall() { DefaultMonitorComponent.unbind(self); registry.remove(MetricRegistry.name("nuxeo", "repositories", name, "connections", "count")); registry.remove(MetricRegistry.name("nuxeo", "repositories", name, "connections", "idle")); registry.remove(MetricRegistry.name("nuxeo", "repositories", name, "connections", "killed")); self = null; } @Override public String getName() { return name; } @Override public int getConnectionCount() { return cm.getConnectionCount(); } @Override public int getIdleConnectionCount() { return cm.getIdleConnectionCount(); } @Override public int getBlockingTimeoutMilliseconds() { return cm.getBlockingTimeoutMilliseconds(); } @Override public int getIdleTimeoutMinutes() { return cm.getIdleTimeoutMinutes(); } @Override public int getActiveTimeoutMinutes() { return cm.getActiveTimeoutMinutes(); } @Override public int getPartitionCount() { return cm.getPartitionCount(); } @Override public int getPartitionMaxSize() { return cm.getPartitionMaxSize(); } @Override public void setPartitionMaxSize(int maxSize) throws InterruptedException { cm.setPartitionMaxSize(maxSize); } @Override public int getPartitionMinSize() { return cm.getPartitionMinSize(); } @Override public void setPartitionMinSize(int minSize) { cm.setPartitionMinSize(minSize); } @Override public void setBlockingTimeoutMilliseconds(int timeoutMilliseconds) { cm.setBlockingTimeoutMilliseconds(timeoutMilliseconds); } @Override public void setIdleTimeoutMinutes(int idleTimeoutMinutes) { cm.setIdleTimeoutMinutes(idleTimeoutMinutes); } /** * @since 5.8 */ public void handleNewConnectionManager(NuxeoConnectionManager cm) { this.cm = cm; } @Override public void reset() { NuxeoContainer.resetConnectionManager(name); } @Override public long getKilledActiveConnectionCount() { return cm.getKilledConnectionCount(); } @Override public int killActiveTimedoutConnections() { return cm.killActiveTimedoutConnections(System.currentTimeMillis()).size(); } }