001/*
002 * (C) Copyright 2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 *
016 * Contributors:
017 *     matic
018 */
019package org.nuxeo.ecm.core.management.jtajca.internal;
020
021import org.nuxeo.ecm.core.management.jtajca.ConnectionPoolMonitor;
022import org.nuxeo.ecm.core.management.jtajca.internal.DefaultMonitorComponent.ServerInstance;
023import org.nuxeo.runtime.jtajca.NuxeoConnectionManager;
024import org.nuxeo.runtime.jtajca.NuxeoContainer;
025import org.nuxeo.runtime.metrics.MetricsService;
026
027import com.codahale.metrics.MetricRegistry;
028import com.codahale.metrics.SharedMetricRegistries;
029import com.codahale.metrics.jvm.JmxAttributeGauge;
030
031/**
032 * @author matic
033 */
034public class DefaultConnectionPoolMonitor implements ConnectionPoolMonitor {
035
036    // @since 5.7.2
037    protected final MetricRegistry registry = SharedMetricRegistries.getOrCreate(MetricsService.class.getName());
038
039    protected final String name;
040
041    protected NuxeoConnectionManager cm;
042
043    protected DefaultConnectionPoolMonitor(String mame, NuxeoConnectionManager cm) {
044        name = mame;
045        this.cm = cm;
046    }
047
048    protected ServerInstance self;
049
050    public NuxeoConnectionManager getManager() {
051        return cm;
052    }
053
054    @Override
055    public void install() {
056        self = DefaultMonitorComponent.bind(this, name);
057        registry.register(MetricRegistry.name("nuxeo", "repositories", name, "connections", "count"),
058                new JmxAttributeGauge(self.name, "ConnectionCount"));
059        registry.register(MetricRegistry.name("nuxeo", "repositories", name, "connections", "idle"),
060                new JmxAttributeGauge(self.name, "IdleConnectionCount"));
061        registry.register(MetricRegistry.name("nuxeo", "repositories", name, "connections", "killed"),
062                new JmxAttributeGauge(self.name, "KilledActiveConnectionCount"));
063    }
064
065    @Override
066    public void uninstall() {
067        DefaultMonitorComponent.unbind(self);
068        registry.remove(MetricRegistry.name("nuxeo", "repositories", name, "connections", "count"));
069        registry.remove(MetricRegistry.name("nuxeo", "repositories", name, "connections", "idle"));
070        registry.remove(MetricRegistry.name("nuxeo", "repositories", name, "connections", "killed"));
071        self = null;
072    }
073
074    @Override
075    public String getName() {
076        return name;
077    }
078
079    @Override
080    public int getConnectionCount() {
081        return cm.getConnectionCount();
082    }
083
084    @Override
085    public int getIdleConnectionCount() {
086        return cm.getIdleConnectionCount();
087    }
088
089    @Override
090    public int getBlockingTimeoutMilliseconds() {
091        return cm.getBlockingTimeoutMilliseconds();
092    }
093
094    @Override
095    public int getIdleTimeoutMinutes() {
096        return cm.getIdleTimeoutMinutes();
097    }
098
099    @Override
100    public int getActiveTimeoutMinutes() {
101        return cm.getActiveTimeoutMinutes();
102    }
103
104    @Override
105    public int getPartitionCount() {
106        return cm.getPartitionCount();
107    }
108
109    @Override
110    public int getPartitionMaxSize() {
111        return cm.getPartitionMaxSize();
112    }
113
114    @Override
115    public void setPartitionMaxSize(int maxSize) throws InterruptedException {
116        cm.setPartitionMaxSize(maxSize);
117    }
118
119    @Override
120    public int getPartitionMinSize() {
121        return cm.getPartitionMinSize();
122    }
123
124    @Override
125    public void setPartitionMinSize(int minSize) {
126        cm.setPartitionMinSize(minSize);
127    }
128
129    @Override
130    public void setBlockingTimeoutMilliseconds(int timeoutMilliseconds) {
131        cm.setBlockingTimeoutMilliseconds(timeoutMilliseconds);
132    }
133
134    @Override
135    public void setIdleTimeoutMinutes(int idleTimeoutMinutes) {
136        cm.setIdleTimeoutMinutes(idleTimeoutMinutes);
137    }
138
139    /**
140     * @since 5.8
141     */
142    public void handleNewConnectionManager(NuxeoConnectionManager cm) {
143        this.cm = cm;
144    }
145
146    @Override
147    public void reset() {
148        NuxeoContainer.resetConnectionManager(name);
149    }
150
151    @Override
152    public long getKilledActiveConnectionCount() {
153        return cm.getKilledConnectionCount();
154    }
155
156    @Override
157    public int killActiveTimedoutConnections() {
158        return cm.killActiveTimedoutConnections(System.currentTimeMillis()).size();
159    }
160
161}