Newer
Older
#! /usr/bin/env python
#
# $Source: /cvs/G/DRV/misc/App/scripts/call_ioc_ins,v $
'''
Insert boot information about IOCs into the ssrm_public Oracle database.
Usage:
-----
<system> <ipadd> <procnum> \\
<device> <bootpc> <slsbase> \\
<bootfile> <script> <vxworks> \\
<epicsver> <vxworksver> <ethaddr>
Example:
-------
call_ioc_ins X04SA-VME-PLD 172.19.151.29 0 \\
dc pc3018 /work \\
/ioc/X04SA-VME-PLD/vxWorks \\
/ioc/X04SA-VME-PLD/startup.script \\
/work/epics/base/bin/mv2306/vxWorks \\
3.13.2 5.3.1 08:00:3e:2e:78:1d
'''
#--------------------------------------------------------------------
import urllib
import string
import getopt
import time
#--------------------------------------------------------------------
def showVersion ():
# ===========
'''
$Source: /cvs/G/DRV/misc/App/scripts/call_ioc_ins,v $
Installed Location: $SLSBASE/sls/bin
'''
print showVersion.__doc__
return
#---------------------------------------------------------------------------
def showUsage ():
# =========
print __doc__
return
#---------------------------------------------------------------------------
# The program starts here!
if __name__ == "__main__":
debug = 0
timeout = 10
try:
(opts, items) = getopt.getopt (sys.argv[1:], "h?vt:", \
("help", "debug"))
for opt in opts:
if opt[0] == "-h": raise "Help"
if opt[0] == "-?": raise "Help"
if opt[0] == "--help": raise "Help"
if opt[0] == "-v": raise "Version"
if opt[0] == "-t":
timeout = int (opt[1])
if timeout <= 0:
print "\aTime-out must be a positive integer."
raise
#endif
#endif
if opt[0] == "--debug": debug = 1
except "Help":
showUsage ()
sys.exit (0)
except "Version":
showVersion ()
sys.exit (0)
except:
print "\aBad option. Specify \"-h\" for help."
sys.exit (1)
#endtry
#######################################
# Make sure we are running at least python level 2.
# CaChannel seems to give troubles otherwise!
#
if sys.version[0:1] == "1":
if debug:
print "The default python version is", string.split (sys.version)[0]
print "Trying to find a version of python2 ..."
#endif
python2 = commands.getoutput ("type -p python2")
if python2 == "":
print "\n\aThe default python version is", sys.version
print "and this script needs python level 2 or higher."
print " Python level 2 cannot be found."
if debug: print "Switching to %s ..." % python2
sys.argv.insert (0, python2)
os.execv (python2, sys.argv)
#endif
if sys.version[0:1] == "1":
print "\n\aThe loading of a higher level of python seems to have failed!"
sys.exit (1)
#endif
#######################################
if debug:
print "Time-out = %d secs" % timeout
print "Arguments:"
for i in range (len (items)):
print " ", items[i]
#endfor
#endif
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
if len (items) != 12:
print "Twelve arguments are needed, not %d" % len (items)
sys.exit (1)
#endif
args = {}
args["SYSTEM"] = items[ 0]
args["IPADDR"] = items[ 1]
args["PROCNUM"] = items[ 2]
args["DEVICE"] = items[ 3]
args["BOOTPC"] = items[ 4]
args["SLSBASE"] = items[ 5]
args["BOOTFILE"] = items[ 6]
args["SCRIPT"] = items[ 7]
args["VXWORKS"] = items[ 8]
args["EPICSVER"] = items[ 9]
args["VXWORKSVER"] = items[10]
args["ETHADDR"] = items[11]
encArgs = urllib.urlencode (args)
url = "http://pc4860.psi.ch/testplan/IOC_INFOS/ioc_boot_ins.php?" + encArgs
if debug:
print "The URL is \"%s\"" % url
print "Forking child process to do the work ..."
#endif
childPID = os.fork ()
if childPID == 0:
try:
ufo = urllib.urlopen (url) # Query the database
lines = ufo.readlines () # Get the result
ufo.close ()
except:
print "\aError inserting data into database!"
raise
#endtry
sys.exit (0)
else:
if debug: print "Child's pid = %d" % childPID
for i in range (int (timeout)):
time.sleep (1)
(pid, status) = os.waitpid (childPID, os.WNOHANG)
if debug: print "waitpid return status = (%d, %d)" % (pid, status)
if pid == childPID:
if debug: print "Child has exited."
sys.exit (0)
#endif
#endfor
if debug: print "Timeout."
os.kill (childPID, signal.SIGKILL)
#endif
#endif
#--------------------------------------------------#
# emacs setup - force text mode to prevent emacs #
# from helping with the indentation! #
# Local Variables: #
# mode:text #
# indent-tabs-mode:nil #
# End: #
#--------------------------------------------------#
#
# Revision 1.4 2004/07/26 09:33:25 maden
# Disable database update ... server is in trouble.
#
#
#---------------------------------------------- End of $RCSfile: call_ioc_ins,v $