blob: ce7486204a5af2ebd500ff362473fe6c31c7aa37 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
package org.apache.camel.management;
import org.apache.camel.Exchange;
/**
* Delegates to another {@link org.apache.camel.management.PerformanceCounter}.
* <p/>
* This is used to allow Camel to pre initialize these delegate performance counters
* when Camel creates the actual route from the model. Then later as the various
* processors, routes etc. is created and registered in the {@link org.apache.camel.spi.LifecycleStrategy}
* then we link this to the real {@link org.apache.camel.management.mbean.ManagedPerformanceCounter} mbean
* so the mbean can gather statistics.
* <p/>
* This delegation is needed as how Camel is designed to register services in the
* {@link org.apache.camel.spi.LifecycleStrategy} in various stages.
*
* @version
*/
public class DelegatePerformanceCounter implements PerformanceCounter {
private PerformanceCounter counter;
private boolean statisticsEnabled;
public DelegatePerformanceCounter() {
}
public void setCounter(PerformanceCounter counter) {
this.counter = counter;
// init statistics based on the real counter based on how we got initialized
this.counter.setStatisticsEnabled(statisticsEnabled);
}
public void completedExchange(Exchange exchange, long time) {
counter.completedExchange(exchange, time);
}
public void failedExchange(Exchange exchange) {
counter.failedExchange(exchange);
}
public boolean isStatisticsEnabled() {
// statistics is only considered enabled if we have a counter to delegate to
// otherwise we do not want to gather statistics (we are just a delegate with none to delegate to)
return counter != null && counter.isStatisticsEnabled();
}
public void setStatisticsEnabled(boolean statisticsEnabled) {
if (counter != null) {
counter.setStatisticsEnabled(statisticsEnabled);
} else {
this.statisticsEnabled = statisticsEnabled;
}
}
}