Example #1
0
    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'] )
Example #2
0
    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'] )
Example #3
0
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
Example #4
0
    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 )
Example #5
0
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
Example #6
0
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)
Example #7
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
Example #8
0
 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')
Example #9
0
    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) )
Example #10
0
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