mirror of
https://github.com/Febbweiss/logstash-forwarder-java.git
synced 2026-03-04 22:25:39 +00:00
Implemented socket connect and read timeout.
This commit is contained in:
@@ -45,6 +45,7 @@ public class Forwarder {
|
|||||||
private static Logger logger = Logger.getLogger(Forwarder.class);
|
private static Logger logger = Logger.getLogger(Forwarder.class);
|
||||||
private static int spoolSize = 1024;
|
private static int spoolSize = 1024;
|
||||||
private static int idleTimeout = 5000;
|
private static int idleTimeout = 5000;
|
||||||
|
private static int networkTimeout = 15000;
|
||||||
private static String config;
|
private static String config;
|
||||||
private static ConfigurationManager configManager;
|
private static ConfigurationManager configManager;
|
||||||
private static FileWatcher watcher;
|
private static FileWatcher watcher;
|
||||||
@@ -91,7 +92,7 @@ public class Forwarder {
|
|||||||
Thread.sleep(idleTimeout);
|
Thread.sleep(idleTimeout);
|
||||||
} catch(AdapterException e) {
|
} catch(AdapterException e) {
|
||||||
logger.error("Lost server connection");
|
logger.error("Lost server connection");
|
||||||
Thread.sleep(configManager.getConfig().getNetwork().getTimeout() * 1000);
|
Thread.sleep(networkTimeout);
|
||||||
connectToServer();
|
connectToServer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,6 +101,7 @@ public class Forwarder {
|
|||||||
private static void connectToServer() {
|
private static void connectToServer() {
|
||||||
int randomServerIndex = 0;
|
int randomServerIndex = 0;
|
||||||
List<String> serverList = configManager.getConfig().getNetwork().getServers();
|
List<String> serverList = configManager.getConfig().getNetwork().getServers();
|
||||||
|
networkTimeout = configManager.getConfig().getNetwork().getTimeout() * 1000;
|
||||||
if(adapter != null) {
|
if(adapter != null) {
|
||||||
try {
|
try {
|
||||||
adapter.close();
|
adapter.close();
|
||||||
@@ -114,7 +116,7 @@ public class Forwarder {
|
|||||||
randomServerIndex = random.nextInt(serverList.size());
|
randomServerIndex = random.nextInt(serverList.size());
|
||||||
String[] serverAndPort = serverList.get(randomServerIndex).split(":");
|
String[] serverAndPort = serverList.get(randomServerIndex).split(":");
|
||||||
logger.info("Trying to connect to " + serverList.get(randomServerIndex));
|
logger.info("Trying to connect to " + serverList.get(randomServerIndex));
|
||||||
adapter = new LumberjackClient(configManager.getConfig().getNetwork().getSslCA(),serverAndPort[0],Integer.parseInt(serverAndPort[1]));
|
adapter = new LumberjackClient(configManager.getConfig().getNetwork().getSslCA(),serverAndPort[0],Integer.parseInt(serverAndPort[1]), networkTimeout);
|
||||||
reader.setAdapter(adapter);
|
reader.setAdapter(adapter);
|
||||||
} catch(Exception ex) {
|
} catch(Exception ex) {
|
||||||
logger.error("Failed to connect to server " + serverList.get(randomServerIndex) + " : " + ex.getMessage());
|
logger.error("Failed to connect to server " + serverList.get(randomServerIndex) + " : " + ex.getMessage());
|
||||||
|
|||||||
@@ -27,16 +27,19 @@ import java.io.DataInputStream;
|
|||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
import java.net.ProtocolException;
|
import java.net.ProtocolException;
|
||||||
|
import java.net.Socket;
|
||||||
import java.security.KeyStore;
|
import java.security.KeyStore;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.zip.Deflater;
|
import java.util.zip.Deflater;
|
||||||
|
|
||||||
import javax.net.SocketFactory;
|
|
||||||
import javax.net.ssl.SSLContext;
|
import javax.net.ssl.SSLContext;
|
||||||
import javax.net.ssl.SSLSocket;
|
import javax.net.ssl.SSLSocket;
|
||||||
|
import javax.net.ssl.SSLSocketFactory;
|
||||||
import javax.net.ssl.TrustManagerFactory;
|
import javax.net.ssl.TrustManagerFactory;
|
||||||
|
|
||||||
import org.apache.commons.io.HexDump;
|
import org.apache.commons.io.HexDump;
|
||||||
@@ -50,7 +53,8 @@ public class LumberjackClient implements ProtocolAdapter {
|
|||||||
private final static byte FRAME_DATA = 0x44;
|
private final static byte FRAME_DATA = 0x44;
|
||||||
private final static byte FRAME_COMPRESSED = 0x43;
|
private final static byte FRAME_COMPRESSED = 0x43;
|
||||||
|
|
||||||
private SSLSocket socket;
|
private Socket socket;
|
||||||
|
private SSLSocket sslSocket;
|
||||||
private KeyStore keyStore;
|
private KeyStore keyStore;
|
||||||
private String server;
|
private String server;
|
||||||
private int port;
|
private int port;
|
||||||
@@ -58,7 +62,7 @@ public class LumberjackClient implements ProtocolAdapter {
|
|||||||
private DataInputStream input;
|
private DataInputStream input;
|
||||||
private int sequence = 1;
|
private int sequence = 1;
|
||||||
|
|
||||||
public LumberjackClient(String keyStorePath, String server, int port) throws IOException {
|
public LumberjackClient(String keyStorePath, String server, int port, int timeout) throws IOException {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
this.port = port;
|
this.port = port;
|
||||||
|
|
||||||
@@ -72,13 +76,16 @@ public class LumberjackClient implements ProtocolAdapter {
|
|||||||
SSLContext context = SSLContext.getInstance("TLS");
|
SSLContext context = SSLContext.getInstance("TLS");
|
||||||
context.init(null, tmf.getTrustManagers(), null);
|
context.init(null, tmf.getTrustManagers(), null);
|
||||||
|
|
||||||
SocketFactory socketFactory = context.getSocketFactory();
|
SSLSocketFactory socketFactory = context.getSocketFactory();
|
||||||
socket = (SSLSocket)socketFactory.createSocket(this.server, this.port);
|
socket = new Socket();
|
||||||
socket.setUseClientMode(true);
|
socket.connect(new InetSocketAddress(InetAddress.getByName(server), port), timeout);
|
||||||
socket.startHandshake();
|
socket.setSoTimeout(timeout);
|
||||||
|
sslSocket = (SSLSocket)socketFactory.createSocket(socket, server, port, true);
|
||||||
|
sslSocket.setUseClientMode(true);
|
||||||
|
sslSocket.startHandshake();
|
||||||
|
|
||||||
output = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
|
output = new DataOutputStream(new BufferedOutputStream(sslSocket.getOutputStream()));
|
||||||
input = new DataInputStream(socket.getInputStream());
|
input = new DataInputStream(sslSocket.getInputStream());
|
||||||
|
|
||||||
logger.info("Connected to " + server + ":" + port);
|
logger.info("Connected to " + server + ":" + port);
|
||||||
} catch(IOException e) {
|
} catch(IOException e) {
|
||||||
@@ -198,7 +205,7 @@ public class LumberjackClient implements ProtocolAdapter {
|
|||||||
|
|
||||||
public void close() throws AdapterException {
|
public void close() throws AdapterException {
|
||||||
try {
|
try {
|
||||||
socket.close();
|
sslSocket.close();
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
throw new AdapterException(e);
|
throw new AdapterException(e);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user