def main(args): parser = options.OptionParser(domain="flumotion-job") log.debug('job', 'Parsing arguments (%r)' % ', '.join(args)) opts, args = parser.parse_args(args) # check if a config file was specified; if so, parse config and copy over if len(args) != 3: parser.error("must pass an avatarId and a path to the socket: %r" % args) avatarId = args[1] socket = args[2] # log our standardized starting marker log.info('job', "Starting job '%s'" % avatarId) # register all package paths (FIXME: this should go away when # components and all deps come from manager) # this is still necessary so that code from other projects can be imported from flumotion.common import setup setup.setupPackagePath() log.info('job', 'Connecting to worker on socket %s' % (socket)) job_factory = job.JobClientFactory(avatarId) reactor.connectWith(fdserver.FDConnector, socket, job_factory, 10, checkPID=False) reactor.addSystemEventTrigger('before', 'shutdown', job_factory.medium.shutdownHandler) # log our standardized started marker log.info('job', "Started job '%s'" % avatarId) reactor.run() # log our standardized stopping marker log.info('job', "Stopping job '%s'" % avatarId) # log our standardized stopped marker log.info('job', "Stopped job '%s'" % avatarId) return 0
def main(args): parser = OptionParser(domain="flumotion-job") log.debug('job', 'Parsing arguments (%r)' % ', '.join(args)) options, args = parser.parse_args(args) # check if a config file was specified; if so, parse config and copy over if len(args) != 3: parser.error("must pass an avatarId and a path to the socket: %r" % args) avatarId = args[1] socket = args[2] # log our standardized starting marker log.info('job', "Starting job '%s'" % avatarId) # register all package paths (FIXME: this should go away when # components and all deps come from manager) # this is still necessary so that code from other projects can be imported from flumotion.common import setup setup.setupPackagePath() log.info('job', 'Connecting to worker on socket %s' % (socket)) job_factory = job.JobClientFactory(avatarId) reactor.connectWith(fdserver.FDConnector, socket, job_factory, 10, checkPID=False) # should probably move this to boot if 'FLU_PROFILE' in os.environ: try: import statprof statprof.start() print 'Profiling started.' def stop_profiling(): statprof.stop() statprof.display() reactor.addSystemEventTrigger('before', 'shutdown', stop_profiling) except ImportError, e: print ('Profiling requested, but statprof is not available (%s)' % e)
def main(args): parser = options.OptionParser(domain="flumotion-job") log.debug('job', 'Parsing arguments (%r)' % ', '.join(args)) opts, args = parser.parse_args(args) # check if a config file was specified; if so, parse config and copy over if len(args) != 3: parser.error("must pass an avatarId and a path to the socket: %r" % args) avatarId = args[1] socket = args[2] # log our standardized starting marker log.info('job', "Starting job '%s'" % avatarId) # register all package paths (FIXME: this should go away when # components and all deps come from manager) # this is still necessary so that code from other projects can be imported from flumotion.common import setup setup.setupPackagePath() log.info('job', 'Connecting to worker on socket %s' % (socket)) job_factory = job.JobClientFactory(avatarId) c = fdserver.FDConnector(socket, job_factory, 10, checkPID=False, reactor=reactor) c.connect() reactor.addSystemEventTrigger('before', 'shutdown', job_factory.medium.shutdownHandler) # log our standardized started marker log.info('job', "Started job '%s'" % avatarId) reactor.run() # log our standardized stopping marker log.info('job', "Stopping job '%s'" % avatarId) # log our standardized stopped marker log.info('job', "Stopped job '%s'" % avatarId) return 0
def main(argv): import optparse usage = '%prog [options] CONFIG_FILENAME' parser = optparse.OptionParser(usage=usage) parser.add_option('-m', '--manager-only', action='store_true', dest='managerOnly', default=False, help=("only validate manager-specific parts - flow and" " atmosphere configurations will not be checked")) parser.add_option('-p', '--print-only', action='store_true', dest='printOnly', default=False, help=("only print warnings - don't actually raise" " DeprecationWarning instances")) options, args = parser.parse_args(argv) if not len(args): parser.error('No filename given.') setup.setup() setup.setupPackagePath() validate(args[0], options.managerOnly, options.printOnly)
def main(args): from flumotion.common import setup setup.setupPackagePath() usage_str = ('Usage: %prog [options] [COMPONENT-OR-PLUG' ' [FULL-PROPERTY-NAME]]') fpname_str = ("FULL-PROPERTY-NAME: represents a fully qualified" " property name, including the names of the containing" " properties: " "...[property-name:]property-name") parser = OptionParser(usage=usage_str, description=fpname_str, domain="flumotion-inspect") log.debug('inspect', 'Parsing arguments (%r)' % ', '.join(args)) options, args = parser.parse_args(args) r = registry.getRegistry() if len(args) == 1: # print all components components = [(c.getType(), c) for c in r.getComponents()] components.sort() print '\nAvailable components:\n' for name, c in components: print ' %s' % name plugs = [(p.getType(), p) for p in r.getPlugs()] plugs.sort() print '\nAvailable plugs:\n' for name, p in plugs: print ' %s' % name print elif len(args) == 2: cname = args[1] handled = False if r.hasComponent(cname): handled = True c = r.getComponent(cname) print '\nComponent:' print ' %s' % cname desc = c.getDescription() if desc: print ' %s' % desc print '\nSource:' print ' %s' % c.getSource() print ' in %s' % c.getBase() print '\nEaters:' if c.getEaters(): for e in c.getEaters(): print (' %s (%s%s)' % (e.getName(), e.getRequired() and 'required' or 'optional', (e.getMultiple() and ', multiple ok' or ''))) else: print ' (None)' print '\nFeeders:' if c.getFeeders(): for e in c.getFeeders(): print ' %s' % e else: print ' (None)' print '\nFeatures:' features = [(p.getType(), p) for p in c.getEntries()] features.sort() if features: for k, v in features: print ' %s: %s:%s' % (k, v.getLocation(), v.getFunction()) else: print ' (None)' print '\nProperties:' printProperties(c.getProperties(), 0) sockets = c.getSockets() print '\nClocking:' print ' Needs synchronisation: %r' % c.getNeedsSynchronization() if (c.getClockPriority() is not None and c.getNeedsSynchronization()): print ' Clock priority: %d' % c.getClockPriority() print '\nSockets:' for socket in sockets: print ' %s' % socket print if r.hasPlug(cname): handled = True p = r.getPlug(cname) print '\nPlug type:' print ' %s' % cname desc = p.getDescription() if desc: print ' %s' % desc print '\nEntry:' e = p.getEntry() print ' %s() in %s' % (e.getFunction(), e.getModuleName()) print '\nProperties:' printProperties(p.getProperties(), 0) print if not handled: parser.exit(status=1, msg=('Unknown component or plug `%s\'\n' % cname)) elif len(args) == 3: cname = args[1] pname = args[2] ppath = pname.split(':') handled = False if r.hasComponent(cname): handled = True c = r.getComponent(cname) try: prop = getNestedProperty(c, ppath) except _NestedPropertyError, npe: parser.exit(status=1, msg='%s\n' % npe.message) print '\nComponent:' print ' %s' % cname desc = c.getDescription() if desc: print ' %s' % desc print '\nProperty:' printProperty(prop, len(prop.getName())) print if r.hasPlug(cname): handled = True p = r.getPlug(cname) try: prop = getNestedProperty(p, ppath) except _NestedPropertyError, npe: parser.exit(status=1, msg='%s\n' % npe.message) print '\nPlug:' print ' %s' % cname print '\nType:' print ' %s' % p.getType() print '\nProperty:' printProperty(prop, len(prop.getName())) print
def main(args): from flumotion.common import setup setup.setupPackagePath() from flumotion.configure import configure log.debug('launch', 'Running Flumotion version %s' % configure.version) import twisted.copyright log.debug('launch', 'Running against Twisted version %s' % twisted.copyright.version) from flumotion.project import project for p in project.list(): log.debug('launch', 'Registered project %s version %s' % ( p, project.get(p, 'version'))) parser = OptionParser(domain="flumotion-launch") log.debug('launch', 'Parsing arguments (%r)' % ', '.join(args)) options, args = parser.parse_args(args) i18n.installGettext() # verbose overrides --debug if options.verbose: log.setFluDebug("*:3") # handle all options if options.version: print common.version("flumotion-launch") return 0 if options.debug: log.setFluDebug(options.debug) # note parser versus parse configs = parse.parse_args(args[1:]) # load the modules, make the component wrappers = [ComponentWrapper(config) for config in configs] # make socket pairs fds = make_pipes(wrappers) reactor.running = False reactor.failure = False reactor.callLater(0, lambda: setattr(reactor, 'running', True)) d = start_components(wrappers, fds) def errback(failure): log.debug('launch', log.getFailureMessage(failure)) print "Error occurred: %s" % failure.getErrorMessage() failure.printDetailedTraceback() reactor.failure = True if reactor.running: print "Stopping reactor." reactor.stop() d.addErrback(errback) if not reactor.failure: print 'Running the reactor. Press Ctrl-C to exit.' log.debug('launch', 'Starting reactor') reactor.run() log.debug('launch', 'Reactor stopped') if reactor.failure: return 1 else: return 0
head, name = os.path.split(head) head, managers = os.path.split(head) if managers != "managers": options.name = "unnamed" log.debug("manager", "Setting name to unnamed") else: options.name = name log.debug("manager", "Setting name to %s based on path" % name) # check for wrong options/arguments if not options.transport in ["ssl", "tcp"]: sys.stderr.write("ERROR: wrong transport %s, must be ssl or tcp\n" % options.transport) return 1 # register package path setup.setupPackagePath() # log our standardized starting marker log.info("manager", "Starting manager '%s'" % options.name) log.debug("manager", "Running Flumotion version %s" % configure.version) import twisted.copyright log.debug("manager", "Running against Twisted version %s" % twisted.copyright.version) from flumotion.project import project for p in project.list(): log.debug("manager", "Registered project %s version %s" % (p, project.get(p, "version"))) vishnu = manager.Vishnu(options.name, configDir=managerConfigDir) for managerConfigFile in args[1:]:
def main(args): parser = _createParser() log.debug('worker', 'Parsing arguments (%r)' % ', '.join(args)) options, args = parser.parse_args(args) # Force options down configure's throat for d in ['logdir', 'rundir']: o = getattr(options, d, None) if o: log.debug('worker', 'Setting configure.%s to %s' % (d, o)) setattr(configure, d, o) # translate feederports string to range if options.feederports: if not '-' in options.feederports: raise errors.OptionError("feederports '%s' does not contain '-'" % options.feederports) (lower, upper) = options.feederports.split('-') options.feederports = range(int(lower), int(upper) + 1) # check if a config file was specified; if so, parse config and copy over if len(args) > 1: workerFile = args[1] _readConfig(workerFile, options) # set default values for all unset options if not options.host: options.host = 'localhost' if not options.transport: options.transport = 'ssl' if not options.port: if options.transport == "tcp": options.port = configure.defaultTCPManagerPort elif options.transport == "ssl": options.port = configure.defaultSSLManagerPort # set a default name if none is given if not options.name: if options.host == 'localhost': options.name = 'localhost' log.debug('worker', 'Setting worker name localhost') else: import socket options.name = socket.gethostname() log.debug('worker', 'Setting worker name %s (from hostname)' % options.name) if options.feederports is None and not options.randomFeederports: options.feederports = configure.defaultGstPortRange log.debug('worker', 'Using default feederports %r' % options.feederports) # check for wrong options/arguments if not options.transport in ['ssl', 'tcp']: sys.stderr.write('ERROR: wrong transport %s, must be ssl or tcp\n' % options.transport) return 1 # reset FLU_DEBUG which could be different after parsing XML file if options.debug: log.setFluDebug(options.debug) if options.daemonizeTo and not options.daemonize: sys.stderr.write( 'ERROR: --daemonize-to can only be used with -D/--daemonize.\n') return 1 if options.serviceName and not options.daemonize: sys.stderr.write( 'ERROR: --service-name can only be used with -D/--daemonize.\n') return 1 brain = worker.WorkerBrain(options) # Now bind and listen to our unix and tcp sockets if not brain.listen(): sys.stderr.write('ERROR: Failed to listen on worker ports.\n') return 1 name = options.name if options.daemonize: if options.serviceName: name = options.serviceName if not options.daemonizeTo: options.daemonizeTo = "/" startup("worker", name, options.daemonize, options.daemonizeTo) log.debug('worker', 'Running Flumotion version %s' % configure.version) import twisted.copyright log.debug('worker', 'Running against Twisted version %s' % twisted.copyright.version) # register all package paths (FIXME: this should go away when # components come from manager) from flumotion.common import setup setup.setupPackagePath() # FIXME: why address='localhost' ? authenticator = pb.Authenticator(username=options.username, password=options.password, address='localhost', avatarId=options.name) info = connection.PBConnectionInfo(options.host, options.port, options.transport == "ssl", authenticator) brain.login(info) log.info('worker', 'Connecting to manager %s using %s' % (info, options.transport.upper())) # go into the reactor main loop reactor.run() return 0
head, managers = os.path.split(head) if managers != 'managers': options.name = 'unnamed' log.debug('manager', 'Setting name to unnamed') else: options.name = name log.debug('manager', 'Setting name to %s based on path' % name) # check for wrong options/arguments if not options.transport in ['ssl', 'tcp']: sys.stderr.write('ERROR: wrong transport %s, must be ssl or tcp\n' % options.transport) return 1 # register package path setup.setupPackagePath() # log our standardized starting marker log.info('manager', "Starting manager '%s'" % options.name) log.debug('manager', 'Running Flumotion version %s' % configure.version) import twisted.copyright log.debug('manager', 'Running against Twisted version %s' % twisted.copyright.version) from flumotion.project import project for p in project.list(): log.debug('manager', 'Registered project %s version %s' % ( p, project.get(p, 'version'))) vishnu = manager.Vishnu(options.name, configDir=managerConfigDir)
def main(args): from flumotion.common import setup setup.setupPackagePath() usage_str = ('Usage: %prog [options] [COMPONENT-OR-PLUG' ' [FULL-PROPERTY-NAME]]') fpname_str = ("FULL-PROPERTY-NAME: represents a fully qualified" " property name, including the names of the containing" " properties: " "...[property-name:]property-name") parser = OptionParser(usage=usage_str, description=fpname_str, domain="flumotion-inspect") log.debug('inspect', 'Parsing arguments (%r)' % ', '.join(args)) options, args = parser.parse_args(args) r = registry.getRegistry() if len(args) == 1: # print all components components = [(c.getType(), c) for c in r.getComponents()] components.sort() print '\nAvailable components:\n' for name, c in components: print ' %s' % name plugs = [(p.getType(), p) for p in r.getPlugs()] plugs.sort() print '\nAvailable plugs:\n' for name, p in plugs: print ' %s' % name print elif len(args) == 2: cname = args[1] handled = False if r.hasComponent(cname): handled = True c = r.getComponent(cname) print '\nComponent:' print ' %s' % cname desc = c.getDescription() if desc: print ' %s' % desc print '\nSource:' print ' %s' % c.getSource() print ' in %s' % c.getBase() print '\nEaters:' if c.getEaters(): for e in c.getEaters(): print(' %s (%s%s)' % (e.getName(), e.getRequired() and 'required' or 'optional', (e.getMultiple() and ', multiple ok' or ''))) else: print ' (None)' print '\nFeeders:' if c.getFeeders(): for e in c.getFeeders(): print ' %s' % e else: print ' (None)' print '\nFeatures:' features = [(p.getType(), p) for p in c.getEntries()] features.sort() if features: for k, v in features: print ' %s: %s:%s' % (k, v.getLocation(), v.getFunction()) else: print ' (None)' print '\nProperties:' printProperties(c.getProperties(), 0) sockets = c.getSockets() print '\nClocking:' print ' Needs synchronisation: %r' % c.getNeedsSynchronization() if (c.getClockPriority() is not None and c.getNeedsSynchronization()): print ' Clock priority: %d' % c.getClockPriority() print '\nSockets:' for socket in sockets: print ' %s' % socket print if r.hasPlug(cname): handled = True p = r.getPlug(cname) print '\nPlug type:' print ' %s' % cname desc = p.getDescription() if desc: print ' %s' % desc print '\nEntry:' e = p.getEntry() print ' %s() in %s' % (e.getFunction(), e.getModuleName()) print '\nProperties:' printProperties(p.getProperties(), 0) print if not handled: parser.exit(status=1, msg=('Unknown component or plug `%s\'\n' % cname)) elif len(args) == 3: cname = args[1] pname = args[2] ppath = pname.split(':') handled = False if r.hasComponent(cname): handled = True c = r.getComponent(cname) try: prop = getNestedProperty(c, ppath) except _NestedPropertyError, npe: parser.exit(status=1, msg='%s\n' % npe.message) print '\nComponent:' print ' %s' % cname desc = c.getDescription() if desc: print ' %s' % desc print '\nProperty:' printProperty(prop, len(prop.getName())) print if r.hasPlug(cname): handled = True p = r.getPlug(cname) try: prop = getNestedProperty(p, ppath) except _NestedPropertyError, npe: parser.exit(status=1, msg='%s\n' % npe.message) print '\nPlug:' print ' %s' % cname print '\nType:' print ' %s' % p.getType() print '\nProperty:' printProperty(prop, len(prop.getName())) print