/** * ***************************************************************************** * This file is part of OpenNMS(R). * * Copyright (C) 2007-2011 The OpenNMS Group, Inc. OpenNMS(R) is Copyright (C) * 1999-2011 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * * OpenNMS(R) is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * OpenNMS(R) is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * OpenNMS(R). If not, see: http://www.gnu.org/licenses/ * * For more information contact: OpenNMS(R) Licensing <license@opennms.org> * http://www.opennms.org/ http://www.opennms.com/ * ***************************************************************************** */ package org.opennms.tools.jmxconfiggenerator.graphs; import java.io.File; import java.util.ArrayList; import java.util.Collection; import javax.xml.bind.JAXB; import org.apache.commons.lang.StringUtils; import org.opennms.tools.jmxconfiggenerator.helper.Colors; import org.opennms.xmlns.xsd.config.jmx_datacollection.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Simon Walter <simon.walter@hp-factory.de> * @author Markus Neumann <markus@opennms.com> */ public class JmxConfigReader { private Logger logger = LoggerFactory.getLogger(JmxConfigReader.class); private final String ATTRIBUTEREPORT = "AttributeReport"; private final String MBEANREPORT = "MBeanReport"; private final String COMPOSITEREPORT = "CompositeReport"; private final String COMPOSITATTRIBEREPORT = "CompositeAttributeReport"; public Collection<Report> generateReportsByJmxDatacollectionConfig(String jmxDatacollectionConfig) { Collection<Report> reports = new ArrayList<Report>(); JmxDatacollectionConfig inputConfig = JAXB.unmarshal(new File(jmxDatacollectionConfig), JmxDatacollectionConfig.class); for (JmxCollection jmxCollection : inputConfig.getJmxCollection()) { logger.debug("jmxCollection: '{}'", jmxCollection.getName()); Mbeans mbeans = jmxCollection.getMbeans(); for (Mbean mbean : mbeans.getMbean()) { reports.addAll(generateMbeanReportsByMBean(mbean)); reports.addAll(generateAttributeReporsByMBean(mbean)); reports.addAll(generateCompositeReportsByMBean(mbean)); reports.addAll(generateCompositeMemberReportsByMBean(mbean)); } } return reports; } private Collection<Report> generateAttributeReporsByMBean(Mbean mbean) { Collection<Report> reports = new ArrayList<Report>(); for (Attrib attrib : mbean.getAttrib()) { String reportId = StringUtils.deleteWhitespace(mbean.getName()) + "." + attrib.getAlias() + "." + ATTRIBUTEREPORT; Report report = new Report(reportId, attrib.getName(), attrib.getName(), "verticalLabel"); report.addGraph(new Graph(attrib.getAlias(), attrib.getName(), attrib.getAlias(), Colors.getNextColor(), Colors.getNextColor(), Colors.getNextColor())); reports.add(report); Colors.restetColor(); } return reports; } private Collection<Report> generateMbeanReportsByMBean(Mbean mbean) { Collection<Report> reports = new ArrayList<Report>(); if (!mbean.getAttrib().isEmpty()) { String reportId = StringUtils.deleteWhitespace(mbean.getName()) + "." + MBEANREPORT; Report report = new Report(reportId, mbean.getName(), mbean.getName(), "verticalLabel"); for (Attrib attrib : mbean.getAttrib()) { report.addGraph(new Graph(attrib.getAlias(), attrib.getName(), attrib.getAlias(), Colors.getNextColor(), Colors.getNextColor(), Colors.getNextColor())); } reports.add(report); Colors.restetColor(); } return reports; } private Collection<Report> generateCompositeReportsByMBean(Mbean mbean) { Collection<Report> reports = new ArrayList<Report>(); for (CompAttrib compAttrib : mbean.getCompAttrib()) { String reportId = StringUtils.deleteWhitespace(mbean.getName()) + "." + compAttrib.getName() + "." + COMPOSITEREPORT; Report report = new Report(reportId, reportId, reportId, "verticalLabel"); for (CompMember compMember : compAttrib.getCompMember()) { report.addGraph(new Graph(compMember.getAlias(), compMember.getName(), compMember.getAlias(), Colors.getNextColor(), Colors.getNextColor(), Colors.getNextColor())); } reports.add(report); Colors.restetColor(); } return reports; } private Collection<Report> generateCompositeMemberReportsByMBean(Mbean mbean) { Collection<Report> reports = new ArrayList<Report>(); for (CompAttrib compAttrib : mbean.getCompAttrib()) { for (CompMember compMember : compAttrib.getCompMember()) { String reportId = StringUtils.deleteWhitespace(mbean.getName()) + "." + compAttrib.getName() + "." + compMember.getName() + "." + COMPOSITATTRIBEREPORT; Report report = new Report(reportId, reportId, reportId, "verticalLabel"); report.addGraph(new Graph(compMember.getAlias(), compMember.getName(), compMember.getAlias(), Colors.getNextColor(), Colors.getNextColor(), Colors.getNextColor())); reports.add(report); Colors.restetColor(); } } return reports; } }