#!/usr/bin/env python
################################################################################
#\defgroup difxversion DiFXVersion
#
#\brief Print version information for the DiFX server, available DiFX software
# versions, and other stuff.
#
# Usage: DiFXVersion [options]
#
# DiFXVersion will display the DiFX version that will be used to run
# all DiFX processes on the server. It can also be used to:
#
#
# - Display all DiFX versions the server has access to (a version can be
# selected through the DiFXControl.Client class using the version()
# function).
#
- Display all DiFX-related environment variables as seen by the server -
# these will determine how DiFX will be run.
#
- Display ALL environment variables as veiwed by the DiFX server.
#
#
# Control of the DiFX versions (both obtaining a proper list of them and setting
# which version is used by the DiFX server) is dependent on the existence of
# "generic run" files in the $DIFX_BASE/bin
directory. These files,
# which take the form:
# $DIFX_BASE/bin/rungeneric.{VERSION_NAME}
# are
# scripts that export a bunch of version-specific environment settings and then
# execute all arguments passed to them, such that:
# $DIFX_BASE/bin/rungeneric.DIFX-DEVEL foo
# will execute the "DIFX-DEVEL" version of the application "foo". The setup
# files may or may not be created as part of the DiFX installation process.
# At USNO the difxbuild
# process is used for all DiFX build/installs, and it is known to create setup
# files properly.
#
# Command Line Arguments
#
#
# -d, --difx | Show DiFX-related environment variables under which the server
# (and thus DiFX applications) will be run.
# |
-e, --env | Show ALL environment variables under which the server
# (and thus DiFX applications) will be run.
# |
-h, --help | Print help information and quit.
# |
-H, --hostname NAME | Use NAME as the host of the DiFX server program.
# Default is to use DIFX_CONTROL_HOST environment variable.
# |
-P, --port PORT | Use PORT as the TCP port to communicated with the DiFX server.
# Default is to use DIFX_CONTROL_PORT environment variable.
# |
-v, --versions | Show available DiFX versions.
# |
#
################################################################################
program = 'DiFXVersion'
version = '0.1'
author = 'John Spitzak'
verdate = '20150714'
import sys
import DiFXControl
#===============================================================================
# MAIN
#===============================================================================
host = None
port = None
showDifxEnv = False
showEnv = False
showVer = False
try:
i = 1
while i < len( sys.argv ):
# Check against legal command line arguments. There are no other arguments
# to this application.
if sys.argv[i] in [ "-h", "--help" ]:
print('\n%s ver %s %s %s' % (program, version, author, verdate))
print("Returns version information for a DiFX software correlator.")
print("Usage: %s [options]" % ( sys.argv[0] ))
print("")
print("Options can include:")
print("")
print(" --difx")
print(" -d Show DiFX-related environment variables under which the server")
print(" (and thus DiFX applications) will be run.")
print("")
print(" --env")
print(" -e Show ALL environment variables under which the server")
print(" (and thus DiFX applications) will be run.")
print("")
print(" --help")
print(" -h Print this help information and quit.")
print("")
print(" --hostname NAME")
print(" -H NAME Use NAME as the host of the difxServer program.")
print(" Default is to use DIFX_CONTROL_HOST environment variable.")
print("")
print(" --port PORT")
print(" -P PORT Use PORT as the TCP port to communicated with the difxServer.")
print(" Default is to use DIFX_CONTROL_PORT environment variable.")
print("")
print(" --versions")
print(" -v Show available DiFX versions.")
print("")
exit( 0 )
elif sys.argv[i] in [ "-H", "--hostname" ]:
host = sys.argv[i+1]
i = i + 1
elif sys.argv[i] in [ "-d", "--difx" ]:
showDifxEnv = True
elif sys.argv[i] in [ "-e", "--env" ]:
showEnv = True
elif sys.argv[i] in [ "-v", "--versions" ]:
showVer = True
elif sys.argv[i] in [ "-P", "--port" ]:
port = int( sys.argv[i+1] )
i = i + 1
else:
raise RuntimeError
i = i + 1
except RuntimeError:
print("Usage: %s [options] []" % ( sys.argv[0] ))
exit( 0 )
# Open a new connection to the difxServer...
difx = DiFXControl.Client()
difx.connect( host = host, port = port )
if difx.socketOK:
difx.monitor()
difx.version( "DIFX-DEVEL" )
print("Server version: " + str( difx.serverVersion ))
print("DiFX will be run by user: " + str( difx.serverUser ))
print("DiFX will run using version: " + str( difx.versionPreference ))
if showVer:
if len( difx.availableVersion ) > 0:
print("Available DiFX Versions:")
for ver in difx.availableVersion:
print(" " + str( ver ))
else:
print("No DiFX versions available to this server.")
if showDifxEnv:
if len( difx.serverEnvironment ):
headerPrinted = False
for key in list(difx.serverEnvironment.keys()):
# Locate anything that looks DiFX related...hopefully all will
# be found.
printIt = False
name = key.upper()
if name.find( "DIFX" ) >= 0:
printIt = True
if name.find( "MARK5" ) >= 0:
printIt = True
if name.find( "MK5" ) >= 0:
printIt = True
if name.find( "STREAMSTOR" ) >= 0:
printIt = True
if name.find( "HOPS" ) >= 0:
printIt = True
if name.find( "CALC" ) >= 0:
printIt = True
if printIt:
if not headerPrinted:
print("DiFX-Related Environment Variables:")
headerPrinted = True
newStr = key
while len( newStr ) < 30:
newStr += " "
newStr += "= "
newStr += difx.serverEnvironment[key]
print(newStr)
if showEnv:
if len( difx.serverEnvironment ):
print("All Server Environment Variables:")
for key in list(difx.serverEnvironment.keys()):
newStr = key
while len( newStr ) < 30:
newStr += " "
newStr += "= "
newStr += difx.serverEnvironment[key]
print(newStr)
difx.close()