/* * Copyright (c) 2010-2012 Grid Dynamics Consulting Services, Inc, All Rights Reserved * http://www.griddynamics.com * * This library is free software; you can redistribute it and/or modify it under the terms of * the Apache License; either * version 2.0 of the License, or any later version. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.griddynamics.jagger.monitoring.reporting; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.griddynamics.jagger.agent.model.JmxMetric; import com.griddynamics.jagger.agent.model.JmxMetricGroup; import com.griddynamics.jagger.dbapi.parameter.MonitoringParameter; import com.griddynamics.jagger.dbapi.parameter.GroupKey; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @author Nikolay Musienko * Date: 11.07.13 */ public class DynamicPlotGroups { private Map<GroupKey, MonitoringParameter[]> plotGroups; private boolean inited = false; private ArrayList<JmxMetricGroup> jmxMetricGroups; private ArrayList<JmxMetric> jmxMetrics; public Map<GroupKey, MonitoringParameter[]> getPlotGroups() { if (!inited) { init(); } return plotGroups; } public void setPlotGroups(Map<GroupKey, MonitoringParameter[]> plotGroups) { this.plotGroups = plotGroups; } public void setJmxMetricGroups(ArrayList<JmxMetricGroup> jmxMetricGroups) { this.jmxMetricGroups = jmxMetricGroups; } public ArrayList<JmxMetric> getJmxMetrics() { if (jmxMetrics != null) { return jmxMetrics; } jmxMetrics = Lists.newArrayList(); if (jmxMetricGroups != null) { for (JmxMetricGroup metricGroup: jmxMetricGroups) { for (JmxMetric metric: metricGroup.getJmxMetrics()) { jmxMetrics.add(metric); } } } return jmxMetrics; } private void init () { if (jmxMetricGroups != null) { Map<String, GroupKey> additionalGroups = Maps.newHashMap(); Map<GroupKey, List<MonitoringParameter>> additionalParameters = Maps.newHashMap(); for (JmxMetricGroup metricGroup: jmxMetricGroups) { GroupKey key = additionalGroups.get(metricGroup.getGroupName()); if (key == null) { key = new GroupKey(metricGroup.getGroupName(), ""); additionalGroups.put(metricGroup.getGroupName(), key); } List<MonitoringParameter> params = additionalParameters.get(key); if (params == null) { params = Lists.newLinkedList(); additionalParameters.put(key, params); } for (JmxMetric metric: metricGroup.getJmxMetrics()) { params.add(metric.getParameter()); } } //adding to default monitoring parameters for (Map.Entry<GroupKey,List<MonitoringParameter>> paramsEntry: additionalParameters.entrySet()) { MonitoringParameter[] parameters = plotGroups.get(paramsEntry.getKey()); if (parameters != null) { for (MonitoringParameter parameter: parameters) { paramsEntry.getValue().add(parameter); } } parameters = paramsEntry.getValue().toArray(new MonitoringParameter[paramsEntry.getValue().size()]); plotGroups.put(paramsEntry.getKey(), parameters); } } inited = true; } }