[vlma-devel] commit: More robust check of VLC's telnet interface. (Adrien Grand )

git version control git at videolan.org
Thu Feb 5 02:31:21 CET 2009


vlma | branch: master | Adrien Grand <jpountz at videolan.org> | Thu Feb  5 02:30:17 2009 +0100| [1805535722f1721f97d0499694d6a77355f751eb] | committer: Adrien Grand 

More robust check of VLC's telnet interface.

> http://git.videolan.org/gitweb.cgi/vlma.git/?a=commit;h=1805535722f1721f97d0499694d6a77355f751eb
---

 .../videolan/vlma/monitor/ServerStateMonitor.java  |   34 ++++++++++++++------
 .../vlma/order/sender/TelnetConnection.java        |   12 ++++++-
 2 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/vlma-core/src/main/java/org/videolan/vlma/monitor/ServerStateMonitor.java b/vlma-core/src/main/java/org/videolan/vlma/monitor/ServerStateMonitor.java
index 03a83af..a229f73 100644
--- a/vlma-core/src/main/java/org/videolan/vlma/monitor/ServerStateMonitor.java
+++ b/vlma-core/src/main/java/org/videolan/vlma/monitor/ServerStateMonitor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006-2008 the VideoLAN team
+ * Copyright (C) 2006-2009 the VideoLAN team
  *
  * This file is part of VLMa.
  *
@@ -21,8 +21,6 @@
 package org.videolan.vlma.monitor;
 
 import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.Socket;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -32,6 +30,7 @@ import org.apache.log4j.Logger;
 import org.videolan.vlma.dao.VLMaDao;
 import org.videolan.vlma.model.Server;
 import org.videolan.vlma.notifier.Notifier;
+import org.videolan.vlma.order.sender.TelnetConnection;
 
 /**
  * This class is the daemon which monitores the servers' state. It periodically
@@ -44,7 +43,6 @@ import org.videolan.vlma.notifier.Notifier;
 public class ServerStateMonitor extends Monitor {
 
     private static final Logger logger = Logger.getLogger(ServerStateMonitor.class);
-    public static final int SOCKET_TIMEOUT = 5000;
 
     private Configuration configuration;
     private VLMaDao vlmaDao;
@@ -86,14 +84,30 @@ public class ServerStateMonitor extends Monitor {
     public boolean checkVLC(Server server) {
         synchronized(server) {
             boolean formerState = server.isUp();
+            TelnetConnection conn = new TelnetConnection();
+            int port = configuration.getInt("vlc.telnet.port");
             try {
-                Socket socket = new Socket();
-                socket.connect(new InetSocketAddress(server.getIp(), configuration.getInt("vlc.telnet.port")), SOCKET_TIMEOUT);
-                socket.close();
-                server.setUp(true);
-                logger.trace("VLC of " + server.getName() + " is reachable");
+                conn.connect(server.getIp(), port);
+                conn.println(configuration.getString("vlc.telnet.password"));
+                try {
+                    conn.waitUntilReady();
+                    conn.resetIn();
+                    conn.println("help");
+                    conn.waitUntilReady();
+                    int c = conn.read();
+                    if (c >= 0) {
+                        server.setUp(true);
+                        logger.trace("Telnet interface of " + server.getName() + " is OK");
+                    } else {
+                        logger.info("Telnet interface of " + server.getName() + " does not reply");
+                        server.setUp(false);
+                    }
+                } catch (IOException e) {
+                    logger.info("Telnet interface of " + server.getName() + " does not give any prompt");
+                    server.setUp(false);
+                }
             } catch (IOException e) {
-                logger.info("Unable to contact VLC server of " + server.getName() + " through telnet interface");
+                logger.info("Unable to contact telnet interface of " + server.getName());
                 server.setUp(false);
             }
             boolean newState = server.isUp();
diff --git a/vlma-core/src/main/java/org/videolan/vlma/order/sender/TelnetConnection.java b/vlma-core/src/main/java/org/videolan/vlma/order/sender/TelnetConnection.java
index acf57fc..3bf7305 100644
--- a/vlma-core/src/main/java/org/videolan/vlma/order/sender/TelnetConnection.java
+++ b/vlma-core/src/main/java/org/videolan/vlma/order/sender/TelnetConnection.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 the VideoLAN team
+ * Copyright (C) 2008-2009 the VideoLAN team
  *
  * This file is part of VLMa.
  *
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.net.InetAddress;
+import java.net.InetSocketAddress;
 import java.net.Socket;
 
 /**
@@ -39,12 +40,19 @@ public class TelnetConnection {
     private static final int TELNET_WAIT_INTERVAL = 100;
     private static final int TELNET_WAIT_MAX = 5000;
 
+    private static final int DEFAULT_SOCKET_TIMEOUT = 5000;
+
     private Socket socket;
     private PrintWriter out;
     private BufferedReader in;
 
     public void connect(InetAddress address, int port) throws IOException {
-        socket = new Socket(address, port);
+        connect(address, port, DEFAULT_SOCKET_TIMEOUT);
+    }
+
+    public void connect(InetAddress address, int port, int timeout) throws IOException {
+        socket = new Socket();
+        socket.connect(new InetSocketAddress(address, port), timeout);
         out = new PrintWriter(socket.getOutputStream(), true);
         in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
     }



More information about the vlma-devel mailing list