Преглед на файлове

Fixed timeout to finish the process when OLT fails connect

Jean Sumara преди 5 години
родител
ревизия
f8249a6115
променени са 3 файла, в които са добавени 70 реда и са изтрити 60 реда
  1. 1 0
      .gitignore
  2. 30 26
      ObjectSsh.py
  3. 39 34
      ObjectTelnet.py

+ 1 - 0
.gitignore

@@ -1,2 +1,3 @@
 **/*.log
 **/*.pyc
+.idea

+ 30 - 26
ObjectSsh.py

@@ -3,6 +3,8 @@ import errno
 import paramiko
 import sys
 import time
+import socket
+import sys
 from FiberHome import FiberHome
 from Furukawa import Furukawa
 from Huawei import Huawei
@@ -36,32 +38,34 @@ class ObjectSsh(ObjectConnection):
         ssh = paramiko.SSHClient()
         ssh.load_system_host_keys()
         ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-        ssh.connect(hostname=self.hostname, port=self.port, username=self.user, password=self.password,
-                    allow_agent=False, look_for_keys=False)
-        chan = ssh.invoke_shell()
-        self.stdin = chan.makefile('wb')
-        self.stdout = chan.makefile('r')
-        # wait to olt to initialice terminal
-        print ("Logged in")
-        self.read_data(self.olt.get_expected_initial())
-        if self.file_name is not None:
-            self.connection_file()
-        elif self.data is not None:
-            self.connection_data()
-        else:
-            self.connection_old()
-        nc = 0
-        while self.QUIT:
-            if nc == 20:
-                self.QUIT = False
-            # send quit to terminal until exit confirmation
-            nc += 1
-            self.command_quit(self.olt.get_write_exit())
-        self.stdin.close()
-        self.stdout.close()
-        ssh.close()
-        self.save_log()
-        exit(self.RUN_OK)
+        try:
+            ssh.connect(hostname=self.hostname, port=self.port, username=self.user, password=self.password,allow_agent=False, look_for_keys=False, timeout=15)
+            chan = ssh.invoke_shell()
+            self.stdin = chan.makefile('wb')
+            self.stdout = chan.makefile('r')
+            # wait to olt to initialice terminal
+            print ("Logged in")
+            self.read_data(self.olt.get_expected_initial())
+            if self.file_name is not None:
+                self.connection_file()
+            elif self.data is not None:
+                self.connection_data()
+            else:
+                self.connection_old()
+            nc = 0
+            while self.QUIT:
+                if nc == 20:
+                    self.QUIT = False
+                # send quit to terminal until exit confirmation
+                nc += 1
+                self.command_quit(self.olt.get_write_exit())
+            self.stdin.close()
+            self.stdout.close()
+            ssh.close()
+            self.save_log()
+            exit(self.RUN_OK)
+        except socket.error:
+            sys.exit("Timeout Except")
 
     def command_enable(self, command):
         """

+ 39 - 34
ObjectTelnet.py

@@ -3,6 +3,8 @@ import errno
 import sys
 import telnetlib
 import time
+import socket
+import sys
 import fcntl
 from FiberHome import FiberHome
 from Furukawa import Furukawa
@@ -21,7 +23,7 @@ class ObjectTelnet(ObjectConnection):
 
     def connect(self):
         """
-        Connect by ssh to olt
+        Connect by telnet to olt
         """
         if self.brand.upper() == ZTE.__name__.upper():
             self.olt = ZTE(self.model, False)
@@ -39,42 +41,45 @@ class ObjectTelnet(ObjectConnection):
         fcntl.flock(f, fcntl.LOCK_EX)
         print("Lock Acquire\n")
         print("Login in...\n")
-        self.tn = telnetlib.Telnet(self.hostname, self.port)
-        if self.debug:
-            self.tn.set_debuglevel(1)
-        error = self.read_data([self.olt.get_expected_name()])
-        if error != -1:
-            self.tn.write(self.user + self.NEW_LINE_UNIX)
-            error = self.read_data([self.olt.get_expected_password()])
+        try:
+            self.tn = telnetlib.Telnet(self.hostname, self.port, 15)
+            if self.debug:
+                self.tn.set_debuglevel(1)
+            error = self.read_data([self.olt.get_expected_name()])
             if error != -1:
-                self.tn.write(self.password + self.NEW_LINE_UNIX)
-                print("Logged in...\n")
-                print self.tn.read_very_lazy()
-                cardinal = self.olt.get_expected_cardinal()
-                if isinstance(cardinal, list):
-                    read_data_list = cardinal
-                else:    
-                    read_data_list = [cardinal]
-                error = self.read_data(read_data_list)
+                self.tn.write(self.user + self.NEW_LINE_UNIX)
+                error = self.read_data([self.olt.get_expected_password()])
                 if error != -1:
-                    if self.file_name is not None:
-                        self.connection_file()
-                    elif self.data is not None:
-                        self.connection_data()
+                    self.tn.write(self.password + self.NEW_LINE_UNIX)
+                    print("Logged in...\n")
+                    print self.tn.read_very_lazy()
+                    cardinal = self.olt.get_expected_cardinal()
+                    if isinstance(cardinal, list):
+                        read_data_list = cardinal
                     else:
-                        self.connection_old()
-                    print("-----FIN-----")
-                    nc = 0
-                    while self.QUIT:
-                        if nc == 20:
-                            self.QUIT = False
-                        # send quit to terminal until exit confirmation
-                        self.command_quit(self.olt.get_write_exit())
-                        nc += 1
-                    self.tn.close()
-                    self.save_log()
-                    exit(self.RUN_OK)
-        exit(self.RUN_ERROR)
+                        read_data_list = [cardinal]
+                    error = self.read_data(read_data_list)
+                    if error != -1:
+                        if self.file_name is not None:
+                            self.connection_file()
+                        elif self.data is not None:
+                            self.connection_data()
+                        else:
+                            self.connection_old()
+                        print("-----FIN-----")
+                        nc = 0
+                        while self.QUIT:
+                            if nc == 20:
+                                self.QUIT = False
+                            # send quit to terminal until exit confirmation
+                            self.command_quit(self.olt.get_write_exit())
+                            nc += 1
+                        self.tn.close()
+                        self.save_log()
+                        exit(self.RUN_OK)
+            exit(self.RUN_ERROR)
+        except socket.error:
+            sys.exit("Timeout Except")
 
     def connection_old(self):
         """