The most current version of everything.
[monitor.git] / reboot.py
index 6a3b9bb..82cb33c 100755 (executable)
--- a/reboot.py
+++ b/reboot.py
@@ -8,6 +8,7 @@ import os, sys
 import xml, xmlrpclib
 import errno, time, traceback
 import urllib2
+import urllib
 import threading, popen2
 import array, struct
 #from socket import *
@@ -296,7 +297,7 @@ class IPAL(PCUControl):
                        ret = s.recv(count, socket.MSG_DONTWAIT)
                except socket.error, e:
                        if e[0] == errno.EAGAIN:
-                               return Exception(e[1])
+                               raise Exception(e[1])
                        else:
                                # TODO: not other exceptions.
                                raise Exception(e)
@@ -316,7 +317,7 @@ class IPAL(PCUControl):
                        s.close()
                        if e[0] == errno.ECONNREFUSED:
                                # cannot connect to remote host
-                               return Exception(e[1])
+                               raise Exception(e[1])
                        else:
                                # TODO: what other conditions are there?
                                raise Exception(e)
@@ -326,6 +327,10 @@ class IPAL(PCUControl):
                s.send(self.format_msg("", 'O'))
                ret = self.recv_noblock(s, 8)
                print "Current status is '%s'" % ret
+
+               if ret == '':
+                       raise Exception("Status returned 'another session already open' %s : %s" % (node_port, ret))
+                       
                                
                if node_port < len(ret):
                        status = ret[node_port]
@@ -342,14 +347,14 @@ class IPAL(PCUControl):
                        
 
                if not dryrun:
-                       print "Pulsing %s" % node_port
                        if power_on:
+                               print "Pulsing %s" % node_port
                                s.send(self.format_msg("%s" % node_port, 'P'))
                        else:
-                               # NOTE: turn power on before pulsing the port.
-                               print "power was off, so turning on then pulsing..."
+                               # NOTE: turn power on ; do not pulse the port.
+                               print "Power was off, so turning on ..."
                                s.send(self.format_msg("%s" % node_port, 'E'))
-                               s.send(self.format_msg("%s" % node_port, 'P'))
+                               #s.send(self.format_msg("%s" % node_port, 'P'))
 
                        print "Receiving response."
                        ret = self.recv_noblock(s, 8)
@@ -878,15 +883,23 @@ class ePowerSwitchGood(PCUControl):
                        # failing here means the User/passwd is wrong (hopefully)
                        raise ExceptionPassword("Incorrect username/password")
 
-               # TODO: after verifying that the user/password is correct, we should
-               # actually reboot the given node.
-
+               # NOTE: after verifying that the user/password is correct, 
+               #               actually reboot the given node.
                if not dryrun:
-                       # add data to handler,
-                       # fetch url one more time on cmd.html, econtrol.html or whatever.
-                       pass
+                       try:
+                               data = urllib.urlencode({'P%d' % node_port : "r"})
+                               req = urllib2.Request(self.url + "cmd.html")
+                               req.add_header("Authorization", authheader)
+                               # add data to handler,
+                               f = urllib2.urlopen(req, data)
+                               if self.verbose: print f.read()
+                       except:
+                               import traceback; traceback.print_exc()
 
-               if self.verbose: print f.read()
+                               # fetch url one more time on cmd.html, econtrol.html or whatever.
+                               # pass
+               else:
+                       if self.verbose: print f.read()
 
                self.close()
                return 0
@@ -1281,6 +1294,8 @@ def reboot_test(nodename, values, continue_probe, verbose, dryrun):
                        if values['pcu_id'] in [1089, 1071, 1046, 1035, 1118]:
                                eps = ePowerSwitchGood(values, verbose, ['80'])
                        elif values['pcu_id'] in [1003]:
+                               # OLD EPOWER
+                               print "OLD EPOWER"
                                eps = ePowerSwitch(values, verbose, ['80'])
                        else:
                                eps = ePowerSwitchGood(values, verbose, ['80'])