Implementation of config file loading.

This commit is contained in:
didfet
2015-03-08 21:24:32 +01:00
parent d8bcb4cdca
commit 4b4b27b5e2
6 changed files with 314 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
package info.fetter.logstashforwarder.config;
import java.util.List;
import org.apache.commons.lang.builder.ToStringBuilder;
public class Configuration {
private NetworkSection network;
private List<FilesSection> files;
/**
* @return the network
*/
public NetworkSection getNetwork() {
return network;
}
/**
* @param network the network to set
*/
public void setNetwork(NetworkSection network) {
this.network = network;
}
/**
* @return the files
*/
public List<FilesSection> getFiles() {
return files;
}
/**
* @param files the files to set
*/
public void setFiles(List<FilesSection> files) {
this.files = files;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return new ToStringBuilder(this).
append("network", network).
append("files", files).
toString();
}
}

View File

@@ -0,0 +1,41 @@
package info.fetter.logstashforwarder.config;
import java.io.File;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ConfigurationManager {
private File configFile;
private Configuration config;
private ObjectMapper mapper;
public ConfigurationManager(String configFilePath) {
this(new File(configFilePath));
}
public ConfigurationManager(File file) {
configFile = file;
mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
}
public void readConfiguration() throws JsonParseException, JsonMappingException, IOException {
config = mapper.readValue(configFile, Configuration.class);
}
public void writeConfiguration() {
}
/**
* @return the config
*/
public Configuration getConfig() {
return config;
}
}

View File

@@ -0,0 +1,46 @@
package info.fetter.logstashforwarder.config;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.builder.ToStringBuilder;
public class FilesSection {
private List<String> paths;
private Map<String,String> fields;
/**
* @return the paths
*/
public List<String> getPaths() {
return paths;
}
/**
* @param paths the paths to set
*/
public void setPaths(List<String> paths) {
this.paths = paths;
}
/**
* @return the fields
*/
public Map<String, String> getFields() {
return fields;
}
/**
* @param fields the fields to set
*/
public void setFields(Map<String, String> fields) {
this.fields = fields;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return new ToStringBuilder(this).
append("paths", paths).
append("fields", fields).
toString();
}
}

View File

@@ -0,0 +1,91 @@
package info.fetter.logstashforwarder.config;
import java.util.List;
import org.apache.commons.lang.builder.ToStringBuilder;
import com.fasterxml.jackson.annotation.JsonProperty;
public class NetworkSection {
private List<String> servers;
@JsonProperty("ssl certificate")
private String sslCertificate;
@JsonProperty("ssl ca")
private String sslCA;
@JsonProperty("ssl key")
private String sslKey;
private int timeout;
/**
* @return the servers
*/
public List<String> getServers() {
return servers;
}
/**
* @param servers the servers to set
*/
public void setServers(List<String> servers) {
this.servers = servers;
}
/**
* @return the sslCertificate
*/
public String getSslCertificate() {
return sslCertificate;
}
/**
* @param sslCertificate the sslCertificate to set
*/
public void setSslCertificate(String sslCertificate) {
this.sslCertificate = sslCertificate;
}
/**
* @return the sslCA
*/
public String getSslCA() {
return sslCA;
}
/**
* @param sslCA the sslCA to set
*/
public void setSslCA(String sslCA) {
this.sslCA = sslCA;
}
/**
* @return the timeout
*/
public int getTimeout() {
return timeout;
}
/**
* @param timeout the timeout to set
*/
public void setTimeout(int timeout) {
this.timeout = timeout;
}
/**
* @return the sslKey
*/
public String getSslKey() {
return sslKey;
}
/**
* @param sslKey the sslKey to set
*/
public void setSslKey(String sslKey) {
this.sslKey = sslKey;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return new ToStringBuilder(this).
append("servers", servers).
append("sslCertificate", sslCertificate).
append("sslCA", sslCA).
append("timeout", timeout).
toString();
}
}

View File

@@ -0,0 +1,38 @@
package info.fetter.logstashforwarder.config;
import static org.apache.log4j.Level.DEBUG;
import java.io.File;
import java.io.IOException;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.RootLogger;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
public class ConfigurationManagerTest {
Logger logger = Logger.getLogger(ConfigurationManagerTest.class);
@BeforeClass
public static void setUpBeforeClass() throws Exception {
BasicConfigurator.configure();
RootLogger.getRootLogger().setLevel(DEBUG);
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
BasicConfigurator.resetConfiguration();
}
@Test
public void testReadConfig1() throws JsonParseException, JsonMappingException, IOException {
ConfigurationManager manager = new ConfigurationManager(new File(ConfigurationManagerTest.class.getClassLoader().getResource("config1.json").getFile()));
manager.readConfiguration();
logger.debug(manager.getConfig().toString());
}
}

View File

@@ -0,0 +1,52 @@
{
// The network section covers network configuration :)
"network": {
// A list of downstream servers listening for our messages.
// logstash-forwarder will pick one at random and only switch if
// the selected one appears to be dead or unresponsive
"servers": [ "localhost:5043" ],
// The path to your client ssl certificate (optional)
"ssl certificate": "./logstash-forwarder.crt",
// The path to your client ssl key (optional)
"ssl key": "./logstash-forwarder.key",
// The path to your trusted ssl CA file. This is used
// to authenticate your downstream server.
"ssl ca": "./logstash-forwarder.crt",
// Network timeout in seconds. This is most important for
// logstash-forwarder determining whether to stop waiting for an
// acknowledgement from the downstream server. If an timeout is reached,
// logstash-forwarder will assume the connection or server is bad and
// will connect to a server chosen at random from the servers list.
"timeout": 15
},
// The list of files configurations
"files": [
// An array of hashes. Each hash tells what paths to watch and
// what fields to annotate on events from those paths.
{
"paths": [
// single paths are fine
"/var/log/messages",
// globs are fine too, they will be periodically evaluated
// to see if any new files match the wildcard.
"/var/log/*.log"
],
// A dictionary of fields to annotate on each event.
"fields": { "type": "syslog" }
}, {
// A path of "-" means stdin.
"paths": [ "-" ],
"fields": { "type": "stdin" }
}, {
"paths": [
"/var/log/apache/httpd-*.log"
],
"fields": { "type": "apache" }
}
]
}