/* * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. 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.wso2.carbon.event.statistics.internal.jmx; import org.wso2.carbon.event.statistics.EventStatisticsObserver; import org.wso2.carbon.event.statistics.internal.data.CollectionDTO; import org.wso2.carbon.event.statistics.internal.data.StatsDTO; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class JMXObserver implements EventStatisticsObserver { private ConcurrentHashMap<String, List<String>> registeredMbeanIds = new ConcurrentHashMap<String, List<String>>(); private ConcurrentHashMap<String, Map<String, StatisticsView>> data; public JMXObserver() { data = new ConcurrentHashMap<String, Map<String, StatisticsView>>(); } public void destroy() { for (Map.Entry<String, List<String>> entry : registeredMbeanIds.entrySet()) { for (String value : entry.getValue()) { MBeanRegistrar.getInstance().unRegisterMBean(entry.getKey(), value); } } } @Override public void updateStatistics(CollectionDTO collectionDTO) { String id = collectionDTO.getStatsDTO().getName(); updateView(collectionDTO.getStatsDTO(), id);//tenant if (collectionDTO.getChildCollectionDTOs() != null) { for (CollectionDTO collectionDTO1 : collectionDTO.getChildCollectionDTOs()) { String id1 = id + "." + collectionDTO1.getStatsDTO().getName(); updateView(collectionDTO1.getStatsDTO(), id1); //category if (collectionDTO1.getChildCollectionDTOs() != null) { for (CollectionDTO collectionDTO2 : collectionDTO1.getChildCollectionDTOs()) { String id2 = id1 + "." + collectionDTO2.getStatsDTO().getName(); updateView(collectionDTO2.getStatsDTO(), id2); //deployment if (collectionDTO2.getChildCollectionDTOs() != null) { for (CollectionDTO collectionDTO3 : collectionDTO2.getChildCollectionDTOs()) { String id3 = id2 + "." + collectionDTO3.getStatsDTO().getName(); updateView(collectionDTO3.getStatsDTO(), id3); //element } } } } } } } private void updateView(StatsDTO statsDTO, String id) { Map<String, StatisticsView> map = data.get(statsDTO.getType()); if (map == null) { data.putIfAbsent(statsDTO.getType(), new HashMap<String, StatisticsView>()); map = data.get(statsDTO.getType()); } StatisticsView view; if (!map.containsKey(id)) { view = new StatisticsView(); MBeanRegistrar.getInstance().registerMBean(view, statsDTO.getType(), id); // store this information to unregister the MBeans later List<String> ids = registeredMbeanIds.get(statsDTO.getType()); if (ids == null) { registeredMbeanIds.putIfAbsent(statsDTO.getType(), new ArrayList<String>()); ids = registeredMbeanIds.get(statsDTO.getType()); } ids.add(id); map.put(id, view); } else { view = map.get(id); } updateView(view, statsDTO); } private void updateView(StatisticsView view, StatsDTO statsDTO) { view.setRequestCount(view.getRequestCount() + (statsDTO.getRequestTotalCount() - view.getRequestTotalCount())); view.setResponseCount(view.getResponseCount() + (statsDTO.getResponseTotalCount() - view.getResponseTotalCount())); view.setRequestTotalCount(statsDTO.getRequestTotalCount()); view.setRequestAvgCountPerSec(statsDTO.getRequestAvgCountPerSec()); view.setRequestMaxCountPerSec(statsDTO.getRequestMaxCountPerSec()); view.setRequestLastUpdatedTime(statsDTO.getRequestLastUpdatedTime()); view.setRequestLastSecCount(statsDTO.getRequestLastSecCount()); view.setRequestLastMinCount(statsDTO.getRequestLastMinCount()); view.setRequestLast15MinCount(statsDTO.getRequestLast15MinCount()); view.setRequestLastHourCount(statsDTO.getRequestLastHourCount()); view.setRequestLast6HourCount(statsDTO.getRequestLast6HourCount()); view.setRequestLastDayCount(statsDTO.getRequestLastDayCount()); view.setResponseTotalCount(statsDTO.getResponseTotalCount()); view.setResponseAvgCountPerSec(statsDTO.getResponseAvgCountPerSec()); view.setResponseMaxCountPerSec(statsDTO.getResponseMaxCountPerSec()); view.setResponseLastUpdatedTime(statsDTO.getResponseLastUpdatedTime()); view.setResponseLastSecCount(statsDTO.getResponseLastSecCount()); view.setResponseLastMinCount(statsDTO.getResponseLastMinCount()); view.setResponseLast15MinCount(statsDTO.getResponseLast15MinCount()); view.setResponseLastHourCount(statsDTO.getResponseLastHourCount()); view.setResponseLast6HourCount(statsDTO.getResponseLast6HourCount()); view.setResponseLastDayCount(statsDTO.getResponseLastDayCount()); } }