001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.camel.management.mbean;
018
019import org.apache.camel.CamelContext;
020import org.apache.camel.api.management.ManagedResource;
021import org.apache.camel.api.management.mbean.ManagedThrottlerMBean;
022import org.apache.camel.model.ProcessorDefinition;
023import org.apache.camel.processor.Throttler;
024import org.apache.camel.processor.TotalRequestsThrottler;
025
026import static org.apache.camel.builder.Builder.constant;
027
028@ManagedResource(description = "Managed Concurrent Requests Throttler")
029public class ManagedThrottler extends ManagedProcessor implements ManagedThrottlerMBean {
030    private final Throttler throttler;
031
032    public ManagedThrottler(CamelContext context, Throttler throttler,
033                            ProcessorDefinition<?> definition) {
034        super(context, throttler, definition);
035        this.throttler = throttler;
036    }
037
038    public Throttler getThrottler() {
039        return throttler;
040    }
041
042    @Override
043    public long getMaximumRequests() {
044        return throttler.getCurrentMaximumRequests();
045    }
046
047    @Override
048    public void setMaximumRequests(long maximumConcurrentRequests) {
049        throttler.setMaximumRequestsExpression(constant(maximumConcurrentRequests));
050    }
051
052    @Override
053    public long getTimePeriodMillis() {
054        if (throttler instanceof TotalRequestsThrottler t) {
055            return t.getTimePeriodMillis();
056        }
057
058        return 0;
059    }
060
061    @Override
062    public void setTimePeriodMillis(long timePeriodMillis) {
063        if (throttler instanceof TotalRequestsThrottler t) {
064            t.setTimePeriodMillis(timePeriodMillis);
065        }
066    }
067
068    @Override
069    public String getMode() {
070        return throttler.getMode();
071    }
072
073    @Override
074    public Boolean isAsyncDelayed() {
075        return throttler.isAsyncDelayed();
076    }
077
078    @Override
079    public Boolean isCallerRunsWhenRejected() {
080        return throttler.isCallerRunsWhenRejected();
081    }
082
083    @Override
084    public Boolean isRejectExecution() {
085        return throttler.isRejectExecution();
086    }
087}