org.rhq.plugins.agent.AgentSnapshotReport Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rhq-agent-plugin Show documentation
Show all versions of rhq-agent-plugin Show documentation
a plugin for monitoring RHQ agents
/*
* RHQ Management Platform
* Copyright (C) 2005-2008 Red Hat, Inc.
* All rights reserved.
*
* This program 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 version 2 of the License.
*
* This program 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 this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.plugins.agent;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.pluginapi.util.SnapshotReport;
import org.rhq.core.util.stream.StreamUtil;
/**
* Performs some slight customizations of the snapshot report utility such as taking a snapshot of the live
* configuration. It also takes the agent plugin configuration and builds the report configuration out of it.
*
* @author John Mazzitelli
*
*/
public class AgentSnapshotReport extends SnapshotReport {
private static final Log log = LogFactory.getLog(AgentSnapshotReport.class);
private final String agentInstallDir;
private final Properties agentConfiguration;
/**
* Constructor used to build this agent snapshot report object.
*
* @param name the name of the snapshot report
* @param description the description of this report
* @param agentPluginConfiguration the plugin configuration for the agent resource whose snapshot report is to be generated
* @param agentInstallDir the agent's root installation directory
* @param agentConfiguration the agent's live configuration
* @param tmpDirectory a tmp location where we can store the snapshot
*/
public AgentSnapshotReport(String name, String description, Configuration agentPluginConfiguration,
String agentInstallDir, Properties agentConfiguration, String tmpDirectory) {
super(name, description, buildConfiguration(agentPluginConfiguration, agentInstallDir, tmpDirectory));
this.agentInstallDir = agentInstallDir;
this.agentConfiguration = agentConfiguration;
}
/**
* We want to snapshot the live configuration taken from the Java Preferences so this will write a temporary
* conf file with that live data so it gets placed in the snapshot report.
*/
@Override
public File generate() throws Exception {
File liveConfigFile = writeLiveConfigurationFile();
try {
return super.generate();
} finally {
if (liveConfigFile != null) {
liveConfigFile.delete();
}
}
}
private File writeLiveConfigurationFile() {
try {
File configDir = new File(this.agentInstallDir, "conf");
File liveConfigFile = new File(configDir, "live-agent-configuration.properties");
OutputStream fos = null;
try {
fos = new BufferedOutputStream(new FileOutputStream(liveConfigFile));
this.agentConfiguration.store(fos, null);
} finally {
StreamUtil.safeClose(fos);
}
return liveConfigFile;
} catch (Exception e) {
log.warn("Cannot store live agent config - will not snapshot it. Cause: " + e);
return null; // we can't snapshot it but just keep going so we can snapshot everything else
}
}
private static Configuration buildConfiguration(Configuration pluginConfiguration, String installDir, String tmpDir) {
Configuration config = new Configuration();
config.put(new PropertySimple(SnapshotReport.PROP_REPORT_OUTPUT_DIRECTORY, tmpDir));
config.put(new PropertySimple(SnapshotReport.PROP_BASE_DIRECTORY, installDir));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, pluginConfiguration.getSimpleValue(
SnapshotReport.PROP_SNAPSHOT_CONFIG_FILES, null)));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_LOG_FILES, pluginConfiguration.getSimpleValue(
SnapshotReport.PROP_SNAPSHOT_LOG_FILES, null)));
config.put(new PropertySimple(SnapshotReport.PROP_SNAPSHOT_DATA_FILES, pluginConfiguration.getSimpleValue(
SnapshotReport.PROP_SNAPSHOT_DATA_FILES, null)));
config.put(new PropertySimple(SnapshotReport.PROP_CONFIG_DIRECTORY, "conf"));
config.put(new PropertySimple(SnapshotReport.PROP_LOG_DIRECTORY, "logs"));
config.put(new PropertySimple(SnapshotReport.PROP_DATA_DIRECTORY, "data"));
config.put(new PropertySimple(SnapshotReport.PROP_DATA_REGEX, ".*\\.dat"));
return config;
}
}