Przeglądaj źródła

Implementation of config file loading.

didfet 10 lat temu
rodzic
commit
4b4b27b5e2

+ 46 - 0
src/main/java/info/fetter/logstashforwarder/config/Configuration.java

@@ -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();
+	}
+	
+}

+ 41 - 0
src/main/java/info/fetter/logstashforwarder/config/ConfigurationManager.java

@@ -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;
+	}
+	
+}

+ 46 - 0
src/main/java/info/fetter/logstashforwarder/config/FilesSection.java

@@ -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();
+	}
+}

+ 91 - 0
src/main/java/info/fetter/logstashforwarder/config/NetworkSection.java

@@ -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();
+	}
+}

+ 38 - 0
src/test/java/info/fetter/logstashforwarder/config/ConfigurationManagerTest.java

@@ -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());
+	}
+}

+ 52 - 0
src/test/resources/config1.json

@@ -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" }
+    }
+  ]
+}