001/*
002 * (C) Copyright 2010 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 *     Nuxeo - initial API and implementation
018 */
019
020package org.nuxeo.runtime.management.metrics;
021
022import org.javasimon.SimonManager;
023import org.nuxeo.runtime.model.ComponentContext;
024import org.nuxeo.runtime.model.DefaultComponent;
025import org.osgi.framework.BundleContext;
026
027// @deprecated since 11.4: use dropwizard metrics instead
028@Deprecated(since = "11.4")
029public class MetricComponent extends DefaultComponent {
030
031    protected final MetricSerializer serializer = new MetricSerializer();
032
033    protected final MetricEnabler enabler = new MetricEnabler();
034
035    @Override
036    public <T> T getAdapter(Class<T> adapter) {
037        if (MetricSerializerMXBean.class.isAssignableFrom(adapter)) {
038            return adapter.cast(serializer);
039        }
040        if (MetricEnabler.class.isAssignableFrom(adapter)) {
041            return adapter.cast(enabler);
042        }
043        if (MetricSerializer.class.isAssignableFrom(adapter)) {
044            return adapter.cast(serializer);
045        }
046        return super.getAdapter(adapter);
047    }
048
049    protected final MetricRegister register = new MetricRegister();
050
051    protected final MetricRegisteringCallback registeringCB = new MetricRegisteringCallback(register);
052
053    @Override
054    public void activate(ComponentContext context) {
055        super.activate(context);
056        doStart();
057    }
058
059    @Override
060    public void deactivate(ComponentContext context) {
061        doStop();
062        super.deactivate(context);
063    }
064
065    public void start(BundleContext context) {
066        doStart();
067    }
068
069    public void stop(BundleContext context) {
070        doStop();
071    }
072
073    protected void doStart() {
074        enabler.setSerializer(serializer);
075        SimonManager.enable();
076        SimonManager.callback().addCallback(registeringCB);
077        register.registerMXBean(enabler, "enabler", MetricEnablerMXBean.class, "Feature");
078        register.registerMXBean(serializer, "serializer", MetricSerializerMXBean.class, "Feature");
079    }
080
081    protected void doStop() {
082        SimonManager.disable();
083        if (SimonManager.callback() != null) {
084            SimonManager.callback().removeCallback(registeringCB);
085        }
086        register.unregisterAll();
087    }
088
089}