forked from epics_driver_modules/require
174 lines
5.0 KiB
Python
Executable File
174 lines
5.0 KiB
Python
Executable File
#! /usr/bin/env python
|
|
#
|
|
# $Source: /cvs/G/DRV/misc/App/scripts/call_ioc_ins,v $
|
|
# $Revision: 1.6 $ $Date: 2004/07/26 14:27:13 $
|
|
'''
|
|
Insert boot information about IOCs into the ssrm_public Oracle database.
|
|
|
|
Usage:
|
|
-----
|
|
call_ioc_ins [--help] [-v] [--debug] [-t=<secs>] \\
|
|
<system> <ipadd> <procnum> \\
|
|
<device> <bootpc> <slsbase> \\
|
|
<bootfile> <script> <vxworks> \\
|
|
<epicsver> <vxworksver> <ethaddr>
|
|
|
|
Default time-out (-t) = 10 secs.
|
|
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 os, sys
|
|
import commands
|
|
import urllib
|
|
import string
|
|
import getopt
|
|
import time
|
|
import signal
|
|
#--------------------------------------------------------------------
|
|
|
|
def showVersion ():
|
|
# ===========
|
|
'''
|
|
$Source: /cvs/G/DRV/misc/App/scripts/call_ioc_ins,v $
|
|
$Revision: 1.6 $ $Date: 2004/07/26 14:27:13 $
|
|
Installed Location: $SLSBASE/sls/bin
|
|
'''
|
|
print showVersion.__doc__
|
|
return
|
|
#---------------------------------------------------------------------------
|
|
|
|
def showUsage ():
|
|
# =========
|
|
|
|
print __doc__
|
|
return
|
|
|
|
#---------------------------------------------------------------------------
|
|
# The program starts here!
|
|
if __name__ == "__main__":
|
|
|
|
sys.stderr = sys.stdout
|
|
#
|
|
# Analyse the options
|
|
#
|
|
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
|
|
#endfor
|
|
except "Help":
|
|
showUsage ()
|
|
sys.exit (0)
|
|
except "Version":
|
|
showVersion ()
|
|
sys.exit (0)
|
|
except:
|
|
print "\aBad option. Specify \"-h\" for help."
|
|
sys.exit (1)
|
|
#endtry
|
|
|
|
if debug:
|
|
print "Time-out = %d secs" % timeout
|
|
print "Arguments:"
|
|
for i in range (len (items)):
|
|
print " ", items[i]
|
|
#endfor
|
|
#endif
|
|
|
|
if len (items) != 12:
|
|
print "\aTwelve 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 "Error 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
|
|
os.kill (childPID, signal.SIGKILL)
|
|
print "Time-out inserting data into database!"
|
|
#endif
|
|
#endif
|
|
|
|
#--------------------------------------------------#
|
|
# emacs setup - force text mode to prevent emacs #
|
|
# from helping with the indentation! #
|
|
# Local Variables: #
|
|
# mode:text #
|
|
# indent-tabs-mode:nil #
|
|
# End: #
|
|
#--------------------------------------------------#
|
|
#
|
|
# $Log: call_ioc_ins,v $
|
|
# Revision 1.6 2004/07/26 14:27:13 maden
|
|
# No longer python2 dependent (there is no python2 on boot nodes yet).
|
|
#
|
|
# Revision 1.5 2004/07/26 11:39:38 maden
|
|
# Add time-out
|
|
#
|
|
# Revision 1.4 2004/07/26 09:33:25 maden
|
|
# Disable database update ... server is in trouble.
|
|
#
|
|
#
|
|
#---------------------------------------------- End of $RCSfile: call_ioc_ins,v $
|