def start_server(self, svcname=None, host=None, port=None,
                     ping_interval=default_ns_ping_interval,
                     strict_registration=False,
                     threaded_server=default_threaded_server,
                     authDict=None, default_auth=use_default_auth,
                     secure=default_secure, cert_file=default_cert,
                     ns=None, 
                     usethread=True, wait=True, timeout=None):

        if not svcname:
            svcname = self.name
        # make our RO server for remote interface
        self.server = ro.remoteObjectServer(svcname=svcname, obj=self,
                                            logger=self.logger,
                                            ev_quit=self.ev_quit,
                                            port=port, usethread=usethread,
                                            threadPool=self.threadPool,
                                            threaded_server=threaded_server,
                                            authDict=authDict, default_auth=default_auth,
                                            secure=secure, cert_file=cert_file)

        self.logger.info("Starting remote subscriptions update loop...")
        t = Task.FuncTask(self.update_remote_subscriptions_loop, [], {})
        t.init_and_start(self)

        self.logger.info("Starting server...")
        if not usethread:
            self.server.ro_start(wait=wait, timeout=timeout)

        else:
            # Use one of our threadPool to run the server
            t = Task.FuncTask(self.server.ro_start, [], {})
            t.init_and_start(self)
            if wait:
                self.server.ro_wait_start(timeout=timeout)
    def setUp(self):
        self.env = environment.MockEnvironment()
        self.myhost = ro.get_myhost()
        self.rohosts = []
        self.ns = remoteObjectNameSvc.remoteObjectNameService(
            self.rohosts,
            name='remoteObjectNameServer',
            host=self.myhost,
            port=ro.nameServicePort)
        self.ns.ro_start()
        waitForService(self.ns, 'names')

        #print "Hosts for",'names',self.ns.getHosts('names')
        ro.init()

        self.initval = 'init'
        self.server = FakeServer(self.initval)

        self.servicename = 'TestServiceName2'
        self.ROserver = ro.remoteObjectServer(obj=self.server,
                                              name=self.servicename,
                                              svcname=self.servicename,
                                              usethread=True)
        self.ROserver.ro_start()
        waitForService(self.ns, self.servicename)
        #print "Hosts for",self.servicename,self.ns.getHosts(self.servicename)
        self.ROclient = ro.remoteObjectProxy(self.servicename)
def server(logger, options, args):

    ev_quit = threading.Event()

    daq_obj = DAQdoor(logger,
                      ev_quit,
                      interval=options.interval,
                      fifopath=options.fifopath,
                      fitsdir=options.fitsdir)

    svc = ro.remoteObjectServer(svcname=options.svcname,
                                obj=daq_obj,
                                logger=logger,
                                port=options.port,
                                ev_quit=ev_quit,
                                usethread=True)

    # Start it
    try:
        logger.info("Starting DAQ door interface service...")
        try:
            svc.ro_start(wait=True)

            daq_obj.service_loop()

        except KeyboardInterrupt:
            logger.error("Caught keyboard interrupt!")

    finally:
        logger.info("DAQ door service shutting down...")
        svc.ro_stop()

    logger.debug("Exiting program.")
    sys.exit(0)
Example #4
0
def main(options, args):

    ro_hosts = options.gen2host.split(',')
    ro.init(ro_hosts)

    svcname = options.svcname
    monname = svcname + '.mon'
    
    # create a real logger if you want logging
    logger = ssdlog.make_logger(svcname, options)

    ev_quit = threading.Event()
    
    # Create a local subscribe object
    myhost = ro.get_myhost(short=True)
    mymon = Monitor.Monitor(monname, logger)

    channels = options.channels.split(',')
    relay = StatusRelay(logger, options.statsvc, options.monitor,
                        mymon, channels)

    # Startup monitor
    mymon.start(wait=True)
    monport = options.monport
    if not monport:
        monport = options.port + 1
    mymon.start_server(wait=True, port=monport)
    threadPool = mymon.get_threadPool()

    svc = ro.remoteObjectServer(svcname=options.svcname,
                                obj=relay, logger=logger,
                                port=options.port,
                                default_auth=None,
                                ev_quit=ev_quit,
                                usethread=False,
                                threadPool=threadPool)
    try:
        relay.update_statusProxy()
        relay.update_monitorFeed()
    
        try:
            print "Press ^C to terminate the server."
            svc.ro_start(wait=True)
            svr_started = True

        except KeyboardInterrupt:
            logger.error("Caught keyboard interrupt!")
            ev_quit.set()
            
    finally:
        logger.info("Shutting down...")
        mymon.unsubscribe_remote('monitor', channels, {})
        mymon.stop_server()
        mymon.stop()
Example #5
0
                         logger=logger,
                         queue=queue,
                         channels=channels,
                         ev_quit=ev_quit)
    else:
        mobj = SoundSource(monitor=minimon,
                           logger=logger,
                           queue=queue,
                           channels=channels,
                           ev_quit=ev_quit,
                           compress=options.compress)

    svc = ro.remoteObjectServer(svcname=basename,
                                obj=mobj,
                                logger=logger,
                                port=options.port,
                                ev_quit=ev_quit,
                                usethread=True,
                                threadPool=threadPool)

    mon_server_started = False
    ro_server_started = False
    try:
        # Startup monitor threadpool
        minimon.start(wait=True)
        minimon.start_server(wait=True, port=options.monport)
        mon_server_started = True

        # Configure logger for logging via our monitor
        # if options.logmon:
        #     minimon.logmon(logger, options.logmon, ['logs'])
Example #6
0
    def run():
        logger.info("Starting status service...")

        # Create object in which to store status tables.  This is a passive
        # object; i.e. there are no active threads therein
        statusObj = st.storeStatusObj()

        threadPool = Task.ThreadPool(logger=logger,
                                     ev_quit=ev_quit,
                                     numthreads=options.numthreads)
        
        # Create the status interface object
        statint = StatusReceiver(logger, statusObj, threadPool,
                                 ev_quit=ev_quit,
                                 myhost=options.myhost,
                                 monchannels=monchannels,
                                 loghome=options.loghome)

        # Create mini monitor to reflect to main monitor
        mymonname = ('%s.mon' % svcname)
        minimon = Monitor.Monitor(mymonname, logger, ev_quit=ev_quit,
                                  threadPool=threadPool)
        statint.set_monitor(minimon)

        logger.info("Starting thread pool...")
        threadPool.startall(wait=True)
        thrd_started = True

        logger.info("Starting monitor...")
        minimon.start()
        # Configure logger for logging via our monitor
        if options.logmon:
            minimon.logmon(logger, options.logmon, ['logs'])

        minimon.start_server(usethread=True)
        mon_started = True

        if options.monitor:
            # Publish our updates to the main monitor
            minimon.publish_to(options.monitor, monchannels, {})

        if options.ut1utcfile:
            ut1utc_path = options.ut1utcfile
        else:
            if os.environ.has_key('GEN2COMMON'):
                dir = os.environ['GEN2COMMON'] + '/db'
            else:
                dir = os.path.split(sys.modules[__name__].__file__)[0]

            ut1utc_path = ('%s/UT1_UTC.table' % dir)

        # Create status object
        status = StatusServer(statusObj, logger, minimon, threadPool,
                              monchannels=monchannels,
                              checkptfile=options.checkptfile,
                              ut1utcfile=ut1utc_path,
                              ev_quit=ev_quit)

        # Initialize it
        status.initialize()

        # Connect status interface to server for notifications of new
        # table availability
        statint.set_server(status)

        # Start status interface RPCs
        logger.info("Starting status RPC interfaces...")
        statint.start(wait=True)

        # Create RO server to handle fetch and store requests
        status_svr = ro.remoteObjectServer(svcname=svcname,
                                           obj=status, logger=logger,
                                           port=options.port,
                                           ev_quit=ev_quit,
                                           usethread=False,
                                           threadPool=threadPool)
        try:
            print "Press ^C to terminate the server."
            status_svr.ro_start(wait=True)
            svr_started = True

        except KeyboardInterrupt:
            logger.error("Caught keyboard interrupt!")
Example #7
0
def main(options, args):
    global statusFromGen2, lock

    # Create top level logger.
    logger = ssdlog.make_logger('alarm_test', options)

    statusFromGen2 = {}

    logger.debug("Initializing remote objects")
    if options.rohosts:
        ro.init(options.rohosts.split(','))
    else:
        ro.init()

    # Connect to the status service via a proxy object and fetch
    # initial status items that we need
    statusProxy = ro.remoteObjectProxy('status')
    logger.info("Fetching initial status values")
    statusFromGen2 = statusProxy.fetch(statusFromGen2)
    logger.info('initial status %s' % statusFromGen2)

    # make a name for our monitor
    if options.monname:
        myMonName = options.monname
    else:
        myMonName = 'alarm_test.mon'

    # Create a local monitor
    mymon = Monitor.Monitor(myMonName, logger, numthreads=options.numthreads)

    # Subscribe our local callback function
    fn = lambda payload, name, channels: status_cb(payload, logger, statusProxy
                                                   )
    mymon.subscribe_cb(fn, sub_channels)

    # Startup monitor
    mymon.start(wait=True)
    mymon.start_server(wait=True, port=options.monport)

    # subscribe our monitor to the publication feed
    mymon.subscribe_remote(options.monitor, sub_channels, {})

    ev_quit = threading.Event()

    testMethods = [
        'changeFocus', 'doMethod', 'doAllMethods', 'listClasses',
        'listAllTests', 'listTests', 'testEnviro'
    ]

    alarmTestService = AlarmTestService(statusProxy, ev_quit)
    alarm_test_svc = ro.remoteObjectServer(
        svcname='alarm_test',
        obj=alarmTestService,
        logger=logger,
        method_list=testMethods,
        port=options.alarm_test_port,
        ev_quit=ev_quit,
        #auth=None,
        usethread=True)
    alarm_test_svc.ro_start(wait=True)

    logger.info('Starting up main program...')
    try:
        try:
            print "Type ^C to exit the server"
            while True:
                sys.stdin.readline()

        except KeyboardInterrupt:
            logger.info('Received keyboard interrupt--"shutting down...')
    finally:
        logger.info("shutting down...")
        mymon.stop_server(wait=True)
        alarm_test_svc.ro_stop(wait=True)
        mymon.stop(wait=True)
class g2Disp(object):
    def __init__(self, **kwdargs):
        self.__dict__.update(kwdargs)
        self.lock = threading.RLock()
        self.procs = {}

        # Needed for starting our own tasks
        self.tag = 'g2disp'
        self.shares = ['logger', 'threadPool']

    def ro_echo(self, arg):
        return arg

    def start_server(self, rohosts, options):
        # Initialize remoteObjects subsystem
        try:
            ro.init(rohosts)

        except ro.remoteObjectError, e:
            self.logger.error("Error initializing remote objects subsystem: %s" % \
                         str(e))
            return

        # channels we are interested in
        channels = ['sound']

        self.ev_quit = threading.Event()
        self.server_exited = threading.Event()

        # Create a local pub sub instance
        # mymon = PubSub.PubSub('%s.mon' % self.basename, self.logger,
        #                       numthreads=30)
        monname = '%s.mon' % self.basename
        mymon = Monitor.Monitor(monname, self.logger, numthreads=30)
        self.monitor = mymon

        self.soundsink = SoundSink.SoundSink(monitor=mymon,
                                             logger=self.logger,
                                             ev_quit=self.ev_quit)
        self.soundsource = SoundSink.SoundSource(monitor=mymon,
                                                 logger=self.logger,
                                                 channels=['sound'])

        # Subscribe our callback functions to the local monitor
        mymon.subscribe_cb(self.soundsink.anon_arr, channels)

        self.mon_server_started = False
        self.ro_server_started = False

        # Startup monitor threadpool
        mymon.start(wait=True)
        mymon.start_server(wait=True, port=options.monport)
        self.mon_server_started = True

        self.threadPool = self.monitor.get_threadPool()

        # subscribe our monitor to the central monitor hub
        mymon.subscribe_remote(options.monitor, channels, ())

        # publish to central monitor hub
        #mymon.subscribe(options.monitor, channels, ())
        mymon.publish_to(options.monitor, ['sound'], {})

        self.svc = ro.remoteObjectServer(
            svcname=self.basename,
            obj=self,
            logger=self.logger,
            port=options.port,
            ev_quit=self.ev_quit,
            threadPool=self.threadPool,
            #auth=None,
            usethread=True)
        self.svc.ro_start(wait=True)
        self.ro_server_started = True
        if options.monitor:
            # subscribe our monitor to the central monitor hub
            mymon.subscribe_remote(options.monitor, channels, {})
            # publishing for remote command executions
            mymon.publish_to(options.monitor, ['sound'], {})

        # Register local status info subscription callback
        mymon.subscribe_cb(model.arr_status, ['status'])

        # Create our remote service object
        ctrlsvc = ro.remoteObjectServer(
            svcname=options.svcname,
            obj=statmon,
            method_list=['close_plugin', 'close_all_plugins'],
            logger=logger,
            ev_quit=ev_quit,
            port=options.port,
            usethread=True,
            threadPool=threadPool)

        logger.info("Starting statmon service.")
        ctrlsvc.ro_start()

        try:
            # Main loop to handle GUI events
            statmon.mainloop(timeout=0.001)

        except KeyboardInterrupt:
            logger.error("Received keyboard interrupt!")
Example #10
0
                                    myhost,
                                    purge_delta=options.purge_delta)

    # Hack to use our local object as the name server for our local monitor
    ro.default_ns = nsobj

    threadPool = mymon.get_threadPool()

    # Create remote object server for this object.
    # svcname to None temporarily because we get into infinite loop
    # try to register ourselves.
    nssvc = ro.remoteObjectServer(name='names',
                                  obj=nsobj,
                                  svcname=None,
                                  port=options.port,
                                  logger=logger,
                                  usethread=True,
                                  threadPool=threadPool,
                                  authDict=authDict,
                                  secure=options.secure,
                                  cert_file=options.cert)

    # Subscribe our callback functions to the local monitor
    #mymon.subscribe_cb(nsobj.ps_update, ['names'])

    server_started = False

    try:
        try:
            logger.info("Starting monitor...")
            # Startup monitor threadpool
            mymon.start(wait=True)
            # Configure logger for logging via our monitor
            if options.logmon:
                minimon.logmon(logger, options.logmon, ['logs'])

            # Set up authorization credentials?
            # e.g. --auth='joe:pw1,bob:pw2,...
            authDict = None
            if options.auth:
                authDict = dict(map(lambda s: s.split(':'),
                                    options.auth.split(',')))
        
            # Start remoteObjects server in the taskmgr
            tm_svr = ro.remoteObjectServer(svcname=svcname,
                                           obj=taskmgr, logger=logger,
                                           ev_quit=ev_quit,
                                           port=options.port,
                                           authDict=authDict,
                                           usethread=False,
                                           threadPool=threadPool)

            # Set allocations if specified
            if options.allocs:
                taskmgr.setAllocs(options.allocs.split(','))

            # Load modules/tasks if specified
            if options.load:
                res = taskmgr.loadModules(options.load.split(','))
                nocomplain = True

            # Initialize load of PARA files if specified
            if options.para:
        starcat = StarCatalog(dbhost=options.dbhost,
                              logger=logger,
                              threadpool=threadpool)

        # sh_keys={'ra':10.1, 'dec':10.0, 'fov':0.076, 'limitmag':13.0}
        # ag_keys={'ra':10.0, 'dec':20.0, 'fov':0.076, 'probe_ra':10.0, 'probe_dec':20.0, 'focus':'CS', 'ins':'MOIRCS',  'probe_r':0.0, 'probe_theta':0.0, 'probe_x':0.0, 'probe_y':0.0,  'pa':0.0, 'limitmag':15.0, 'goodmag':10.0, 'fov_pattern':'STANDARD'}

        # starcat.select_sh_stars(sh_keys)
        #starcat.select_ag_stars(ag_keys)

        #        svr_started = False
        svc = ro.remoteObjectServer(
            svcname=options.svcname,
            obj=starcat,
            logger=logger,
            port=options.port,
            default_auth=None,
            ev_quit=ev_quit,
            usethread=False,
        )

        svc.ro_start(wait=True)


#        svr_started = True

    except KeyboardInterrupt:
        print 'keyboard interrupting...'
        quit()
    except Exception as e:
        logger.error('error: starting svc.  %s' % str(e))
Example #13
0
        status = StatusServer(cso,
                              logger,
                              minimon,
                              monchannels=monchannels,
                              checkptfile=options.checkptfile)

        # Initialize it
        status.initialize()

        # Register status callbacks to monitor channels
        minimon.subscribe_local(status, ['statint'])

        # Create RO server to handle fetch and store requests
        status_svr = ro.remoteObjectServer(svcname=svcname,
                                           obj=status,
                                           logger=logger,
                                           port=options.port,
                                           ev_quit=ev_quit,
                                           usethread=False)
        try:
            print "Press ^C to terminate the server."
            status_svr.ro_start(wait=True)
            svr_started = True

        except KeyboardInterrupt:
            logger.error("Caught keyboard interrupt!")

    finally:
        quit()


if __name__ == '__main__':
Example #14
0
    # Configure logger for logging via our monitor
    if options.logmon:
        minimon.logmon(logger, options.logmon, ['logs'])

    try:
        minimon.start_server(port=options.monport, usethread=True)
        
        fm = frameSvc(svcname, logger, 
                      monitor=minimon, monchannels=monchannels)

        threadPool = minimon.get_threadPool()

        # Superclass constructor
        svc = ro.remoteObjectServer(svcname=svcname,
                                    obj=fm, logger=logger,
                                    port=options.port,
                                    usethread=True,
                                    threadPool=threadPool)

        # Create sun-rpc frame interface
        svr = OSSS_FRAMEServer(logger=logger, frame_func=fm.getFrames)
        
        logger.info("Starting frame service.")
        try:
            svc.ro_start(wait=True)
            svc_started = True

            svr.start(wait=True)
            svr_started = True
            
            while True:
    if options.session:
        try:
            controller.config_from_session(options.session)
        except Exception, e:
            logger.error("Failed to initialize from session '%s': %s" %
                         (options.session, str(e)))

    # Start up a remote object server for certain services provided by
    # integgui2
    svc = ro.remoteObjectServer(svcname=options.svcname,
                                obj=controller,
                                logger=logger,
                                method_list=[
                                    'get_ope_paths', 'obs_play_sound_file',
                                    'obs_timer', 'obs_confirmation',
                                    'obs_userinput', 'obs_combobox',
                                    'load_page'
                                ],
                                port=options.port,
                                ev_quit=ev_quit,
                                usethread=True,
                                threadPool=threadPool)

    # Load any files specified on the command line
    for opefile in args:
        gui.load_ope(opefile)

    server_started = False
    ro_server_started = False
    try:
        # Startup monitor threadpool
    mymon.subscribe_remote(options.monitor, sub_channels, {})

    ev_quit = threading.Event()

    # Create an AlarmHandlerService object and connect it to a remote
    # object server so that we can control the playing of the audio
    alarmHandlerService = AlarmHandlerService(soundsink, svConfig,
                                              statusValHistory,
                                              options.persistDataFile, ev_quit)
    alh_svc = ro.remoteObjectServer(
        svcname='alarm_handler',
        obj=alarmHandlerService,
        logger=logger,
        method_list=[
            'masterMuteOff', 'masterMuteOn', 'playFile', 'muteOff', 'muteOn',
            'startIgnoreAlarm', 'stopIgnoreAlarm', 'dumpSvConfigItem',
            'loadSvConfig', 'reportHistory', 'purgeHistory',
            'purgeHistoryLength', 'saveHistory', 'saveConfig'
        ],
        port=options.alh_port,
        ev_quit=ev_quit,
        #auth=None,
        usethread=True)
    alh_svc.ro_start(wait=True)

    purgeTask = Task.FuncTask2(alarmHandlerService.periodicPurge,
                               options.purgeMaxAgeDays, options.purgeMaxLength,
                               options.purgeInterval)
    purgeTask.initialize(mymon)
    mymon.get_threadPool().addTask(purgeTask)

    ## persistDataSaveTask = Task.FuncTask2(alarmHandlerService.periodicSave, options.persistDataSaveInterval)