def __init__( self, suite ): sodir = sitecfg.get_derived_host_item( suite, 'suite log directory' ) self.opath = os.path.join( sodir, 'out' ) self.epath = os.path.join( sodir, 'err' ) # use same archive length as logging (TODO: document this) self.roll_at_startup = sitecfg.get( ['suite logging','roll over at start-up'] ) self.arclen = sitecfg.get( ['suite logging','rolling archive length'] )
def __init__( self, suite ): self.ldir = sitecfg.get_derived_host_item( suite, 'suite log directory' ) self.path = os.path.join( self.ldir, 'log' ) self.err_path = os.path.join( self.ldir, 'err' ) self.roll_at_startup = sitecfg.get( ['suite logging','roll over at start-up'] ) self.n_keep = sitecfg.get( ['suite logging','rolling archive length'] ) self.max_bytes = sitecfg.get( ['suite logging','maximum size in bytes'] )
def get_port( suite, owner=user, host=get_hostname(), pphrase=None, pyro_timeout=None ): # Scan ports until a particular suite is found. pyro_base_port = sitecfg.get( ['pyro','base port'] ) pyro_port_range = sitecfg.get( ['pyro','maximum number of ports'] ) for port in range( pyro_base_port, pyro_base_port + pyro_port_range ): uri = cylcid_uri( host, port ) try: proxy = Pyro.core.getProxyForURI(uri) except Pyro.errors.URIError, x: # No such host? raise SuiteNotFoundError, x if pyro_timeout: # convert from string pyro_timeout = float( pyro_timeout ) proxy._setTimeout(pyro_timeout) proxy._setIdentification( pphrase ) before = datetime.datetime.now() try: name, xowner = proxy.id() except Pyro.errors.TimeoutError: warn_timeout( host, port, pyro_timeout ) pass except Pyro.errors.ConnectionDeniedError: #print >> sys.stderr, "Wrong suite or wrong passphrase at " + portid( host, port ) pass except Pyro.errors.ProtocolError: #print >> sys.stderr, "No Suite Found at " + portid( host, port ) pass except Pyro.errors.NamingError: #print >> sys.stderr, "Non-cylc pyro server found at " + portid( host, port ) pass else: if flags.verbose: after = datetime.datetime.now() print "Pyro connection on port " +str(port) + " took: " + str( after - before ) if name == suite and xowner == owner: if flags.verbose: print suite, owner, host, port # RESULT return port else: # ID'd some other suite. #print 'OTHER SUITE:', name, xowner, host, port pass
def __init__(self, suite, host, owner ): self.suite = suite self.host = host self.owner = owner self.locn = None self.local_path = os.path.join( sitecfg.get( ['pyro','ports directory'] ), suite )
def get_host_ip_address(): from cfgspec.site import sitecfg global host_ip_address if host_ip_address is None: target = sitecfg.get( ['suite host self-identification','target'] ) # external IP address of the suite host: host_ip_address = get_local_ip_address( target ) return host_ip_address
def prompt( reason, force=False ): if force or sitecfg.get( ['disable interactive command prompts'] ): return response = raw_input( reason + ' (y/n)? ' ) if response == 'y': return else: sys.exit(0)
def get_suite_host(): from cfgspec.site import sitecfg global suite_host if suite_host is None: hardwired = sitecfg.get( ['suite host self-identification','host'] ) method = sitecfg.get( ['suite host self-identification','method'] ) # the following is for suite host self-identfication in task job scripts: if method == 'name': suite_host = hostname elif method == 'address': suite_host = host_ip_address elif method == 'hardwired': if not hardwired: sys.exit( 'ERROR, no hardwired hostname is configured' ) suite_host = hardwired else: sys.exit( 'ERROR, unknown host method: ' + method ) return suite_host
def __init__( self, suite, run_mode='live', ict=None, stop_tag=None ): self.run_mode = run_mode self.set_cts(ict, stop_tag) self.dir_name = sitecfg.get_derived_host_item( suite, 'suite state directory' ) self.file_name = os.path.join( self.dir_name, self.BASE_NAME ) self.arch_len = sitecfg.get( [ 'state dump rolling archive length' ] ) if not self.arch_len or int(self.arch_len) <= 1: self.arch_len = 1 self.arch_files = [] self.pool = None self.wireless = None self.log = logging.getLogger('main')
def __init__(self, suite, port ): self.suite = suite # the ports directory is assumed to exist pdir = sitecfg.get( ['pyro','ports directory'] ) self.local_path = os.path.join( pdir, suite ) try: self.port = str(int(port)) except ValueError, x: print >> sys.stderr, x raise PortFileError( "ERROR, illegal port number: " + str(port) )
def scan( host=get_hostname(), db=None, pyro_timeout=None, silent=False ): #print 'SCANNING PORTS' # scan all cylc Pyro ports for cylc suites pyro_base_port = sitecfg.get( ['pyro','base port'] ) pyro_port_range = sitecfg.get( ['pyro','maximum number of ports'] ) # In non-verbose mode print nothing (scan is used by cylc db viewer). # load my suite passphrases reg = localdb(db) reg_suites = reg.get_list() my_passphrases = {} for item in reg_suites: rg = item[0] di = item[1] try: pp = passphrase( rg, user, host ).get( suitedir=di ) except Exception, x: #print >> sys.stderr, x # no passphrase defined for this suite pass else: my_passphrases[ rg ] = pp