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 java.util.Collection; 020 021import javax.management.openmbean.CompositeData; 022import javax.management.openmbean.CompositeDataSupport; 023import javax.management.openmbean.CompositeType; 024import javax.management.openmbean.TabularData; 025import javax.management.openmbean.TabularDataSupport; 026 027import org.apache.camel.CamelContext; 028import org.apache.camel.RuntimeCamelException; 029import org.apache.camel.api.management.ManagedResource; 030import org.apache.camel.api.management.mbean.CamelOpenMBeanTypes; 031import org.apache.camel.api.management.mbean.ManagedExchangeFactoryManagerMBean; 032import org.apache.camel.spi.ExchangeFactory; 033import org.apache.camel.spi.ExchangeFactoryManager; 034import org.apache.camel.spi.ManagementStrategy; 035import org.apache.camel.util.URISupport; 036 037@ManagedResource(description = "Managed ExchangeFactory") 038public class ManagedExchangeFactoryManager extends ManagedService implements ManagedExchangeFactoryManagerMBean { 039 040 private ExchangeFactoryManager exchangeFactoryManager; 041 private boolean sanitize; 042 043 public ManagedExchangeFactoryManager(CamelContext context, ExchangeFactoryManager exchangeFactoryManager) { 044 super(context, exchangeFactoryManager); 045 this.exchangeFactoryManager = exchangeFactoryManager; 046 } 047 048 @Override 049 public void init(ManagementStrategy strategy) { 050 super.init(strategy); 051 sanitize = strategy.getManagementAgent().getMask() != null ? strategy.getManagementAgent().getMask() : false; 052 } 053 054 @Override 055 public Integer getConsumerCounter() { 056 return exchangeFactoryManager.getConsumerCounter(); 057 } 058 059 @Override 060 public Integer getTotalPooled() { 061 return exchangeFactoryManager.getPooledCounter(); 062 } 063 064 @Override 065 public Integer getCapacity() { 066 return exchangeFactoryManager.getCapacity(); 067 } 068 069 @Override 070 public Boolean getStatisticsEnabled() { 071 return exchangeFactoryManager.isStatisticsEnabled(); 072 } 073 074 @Override 075 public void setStatisticsEnabled(Boolean statisticsEnabled) { 076 exchangeFactoryManager.setStatisticsEnabled(statisticsEnabled); 077 } 078 079 @Override 080 public void resetStatistics() { 081 exchangeFactoryManager.resetStatistics(); 082 } 083 084 @Override 085 public void purge() { 086 exchangeFactoryManager.purge(); 087 } 088 089 @Override 090 public Long getTotalCreated() { 091 return exchangeFactoryManager.getStatistics().getCreatedCounter(); 092 } 093 094 @Override 095 public Long getTotalAcquired() { 096 return exchangeFactoryManager.getStatistics().getAcquiredCounter(); 097 } 098 099 @Override 100 public Long getTotalReleased() { 101 return exchangeFactoryManager.getStatistics().getReleasedCounter(); 102 } 103 104 @Override 105 public Long getTotalDiscarded() { 106 return exchangeFactoryManager.getStatistics().getDiscardedCounter(); 107 } 108 109 @Override 110 public TabularData listStatistics() { 111 try { 112 TabularData answer = new TabularDataSupport(CamelOpenMBeanTypes.listExchangeFactoryTabularType()); 113 Collection<ExchangeFactory> factories = exchangeFactoryManager.getExchangeFactories(); 114 for (ExchangeFactory ef : factories) { 115 CompositeType ct = CamelOpenMBeanTypes.listExchangeFactoryCompositeType(); 116 String routeId = ef.getRouteId(); 117 String url = ef.getConsumer().getEndpoint().getEndpointUri(); 118 if (sanitize) { 119 url = URISupport.sanitizeUri(url); 120 } 121 122 int capacity = ef.getCapacity(); 123 int size = ef.getSize(); 124 long created = 0; 125 long acquired = 0; 126 long released = 0; 127 long discarded = 0; 128 if (ef.isStatisticsEnabled()) { 129 created = ef.getStatistics().getCreatedCounter(); 130 acquired = ef.getStatistics().getAcquiredCounter(); 131 released = ef.getStatistics().getReleasedCounter(); 132 discarded = ef.getStatistics().getDiscardedCounter(); 133 } 134 135 CompositeData data = new CompositeDataSupport( 136 ct, 137 new String[] { "url", "routeId", "capacity", "pooled", "created", "acquired", "released", "discarded" }, 138 new Object[] { url, routeId, capacity, size, created, acquired, released, discarded }); 139 answer.put(data); 140 } 141 return answer; 142 } catch (Exception e) { 143 throw RuntimeCamelException.wrapRuntimeCamelException(e); 144 } 145 } 146}