/*******************************************************************************
* ===========================================================
* Ankush : Big Data Cluster Management Solution
* ===========================================================
*
* (C) Copyright 2014, by Impetus Technologies
*
* This is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License (LGPL v3) as
* published by the Free Software Foundation;
*
* This software 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
******************************************************************************/
/**
*
*/
package com.impetus.ankush.agent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import com.impetus.ankush.agent.utils.AgentLogger;
/**
* The Class AgentConf.
*
* @author Hokam Chauhan
*/
public class AgentConf {
/** The log. */
private static final AgentLogger LOGGER = new AgentLogger(AgentConf.class);
/** The properties. */
private Properties properties = new Properties();
/** The file name. */
private String fileName = "";
/**
* Gets the string value.
*
* @param key
* the key
* @return String value for key
*/
public String getStringValue(String key) {
return this.properties.getProperty(key);
}
/**
* Gets the boolean value.
*
* @param key
* the key
* @return Boolean value for key
*/
public boolean getBooleanValue(String key) {
return Boolean.parseBoolean(this.properties.getProperty(key));
}
/**
* Gets the int value.
*
* @param key
* the key
* @return Integer value for key
*/
public int getIntValue(String key) {
if (this.properties.getProperty(key) == null) {
return 0;
}
return Integer.parseInt(this.properties.getProperty(key));
}
/**
* Instantiates a new agent conf.
*/
public AgentConf() {
try {
this.fileName = System.getProperty(Constant.AGENT_INSTALL_DIR)
+ "/.ankush/agent/conf/agent.properties";
load();
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
/**
* Gets the log upload file url.
*
* @return the log upload file url
*/
public String getLogUploadFileUrl() {
StringBuilder url = new StringBuilder("http://");
url.append(properties.getProperty(Constant.PROP_SERVER_IP)).append(":");
url.append(properties.getProperty(Constant.PROP_NAME_PORT));
url.append(properties.getProperty(Constant.PROP_NAME_UPLOAD_FILE_URL));
url.append("?category=log");
return url.toString();
}
/**
* Gets the jar path.
*
* @return the jar path
*/
public List<String> getJarPath() {
List<String> jars = new ArrayList<String>();
String jarString = properties.getProperty(Constant.PROP_JARPATH);
if (jarString != null) {
jars.addAll(Arrays.asList(jarString.split(",")));
}
return jars;
}
/**
* Load the Properties from the given file.
*
* @param fileName
* the file name
* @return Properties
* @throws IOException
* * @throws FileNotFoundException
*/
public Properties load(String fileName) throws IOException {
Properties properties = new Properties();
InputStream inStream = new FileInputStream(fileName);
try {
properties.load(inStream);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
} finally {
inStream.close();
}
return properties;
}
/**
* Load the properties from the default file.
*
* @throws IOException
* * @throws FileNotFoundException
*/
public void load() throws IOException {
File file = new File(fileName);
if (!file.exists()) {
String confPath = FilenameUtils.getFullPathNoEndSeparator(fileName);
FileUtils.forceMkdir(new File(confPath));
FileUtils.touch(file);
}
this.properties = load(fileName);
}
/**
* Save the specified properties values in given file.
*
* @param properties
* Properties
* @param fileName
* String
* @throws IOException
* * @throws FileNotFoundException
*/
public void save(Properties properties, String fileName) throws IOException {
OutputStream outputStream = new FileOutputStream(fileName);
properties.store(outputStream,
"Updated at" + System.currentTimeMillis());
outputStream.close();
}
/**
* Method save.
*
* @param fileName
* String
* @throws IOException
* Signals that an I/O exception has occurred.
*/
public void save(String fileName) throws IOException {
this.fileName = fileName;
save(this.properties, fileName);
}
/**
* Save the own properties values.
*
*
* @throws IOException
* * @throws FileNotFoundException
*/
public void save() throws IOException {
save(this.properties, this.fileName);
}
/**
* Gets the properties.
*
* @return the properties
*/
public Properties getProperties() {
return properties;
}
/**
* Sets the properties.
*
* @param props
* the new properties
*/
public void setProperties(Properties props) {
this.properties = props;
}
/**
* Gets the node info send URL.
*
* @param propertyName
* the property name
* @return The URL to update the Node information
*/
public String getURL(String propertyName) {
StringBuilder url = new StringBuilder("http://");
url.append(properties.getProperty(Constant.PROP_SERVER_IP)).append(":");
url.append(properties.getProperty(Constant.PROP_NAME_PORT));
url.append(properties.getProperty(Constant.PROP_NAME_URL_PART));
url.append(properties.getProperty(Constant.PROP_NAME_NODE_ID)).append("/");
url.append(properties.getProperty(propertyName));
return url.toString();
}
/**
* Gets the node info send URL.
*
* @param action
* the property name
* @return The URL to update the Node information
*/
public String getClusterMonitoringURL(String action) {
StringBuilder url = new StringBuilder("http://");
url.append(properties.getProperty(Constant.PROP_SERVER_IP)).append(":");
url.append(properties.getProperty(Constant.PROP_NAME_PORT));
url.append(properties
.getProperty(Constant.PROP_NAME_CLUSTER_MONITORING_URL));
url.append(properties.getProperty(Constant.PROP_NAME_CLUSTER_ID))
.append("/").append(action);
return url.toString();
}
/**
* Gets the jPS services.
*
* @return the jPS services
*/
public List<String> getJPSServices() {
return getDataList(Constant.PROP_NAME_JPS_PROCESS_LIST, ",");
}
/**
* Gets the ganglia services.
*
* @return the ganglia services
*/
public List<String> getGangliaServices() {
return getDataList(Constant.PROP_NAME_GANGLIA_PROCESS_LIST, ",");
}
/**
* Gets the Process Port List.
*
* @return the Process Port List
*/
public List<String> getProcessPortList() {
return getDataList(Constant.PROP_NAME_PROCESS_PORT_MAP, ",");
}
/**
* Gets the jPS services.
*
* @return the jPS services
*/
public List<String> getDataList(String propertyName, String spliter) {
List<String> procs = new ArrayList<String>();
try {
load();
String processStr = properties.getProperty(propertyName);
if (processStr != null) {
LOGGER.info(" Process String " + processStr);
return Arrays.asList(processStr.split(spliter));
}
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
return procs;
}
public String getServiceManageURL() {
StringBuilder url = new StringBuilder("http://");
url.append(properties.getProperty(Constant.PROP_SERVER_IP)).append(":");
url.append(properties.getProperty(Constant.PROP_NAME_PORT));
url.append(properties
.getProperty(Constant.PROP_NAME_URL_SERVICE_PART_1));
url.append(properties.getProperty(Constant.PROP_NAME_CLUSTER_ID))
.append("/");
url.append(properties
.getProperty(Constant.PROP_NAME_URL_SERVICE_PART_2));
return url.toString();
}
}