class EMLUDaemon(GenericDaemon): def __init__(self, config): # Handle config dict conf = default_conf.copy() conf.update(config) conf['stdout'] = conf['log'] conf['stderr'] = conf['log'] super(EMLUDaemon, self).__init__(config) # Register functions self.server = SimpleJSONRPCServer((self.addr, self.port)) self.server.register_function(self.get_mounts) self.server.register_function(self.mount) self.server.register_function(self.umount) # Create thread pool self.pool = [] for i in range(conf['pool']): th = Thread(target=self.server.serve_forever) self.pool.append(th) # Create watcher thread # FIXME: Implement self.watcher = EMLUWatcher() #--- Exposed methods ------------------------------------------------------- def get_mounts(self): print('get_mounts()') return json.dumps(_get_mounts()) def mount(self, mp, pwd, timeout): print('mount({}, ******)'.format(mp)) code = _mount(mp, pwd) if code == 0: self.watch(mp, timeout) return code def umount(self, mp): print('umount({})'.format(mp)) code = _umount(mp) if code == 0: self.unwatch(mp) return code #--- Daemon methods -------------------------------------------------------- def loop(self): print('Starting EMLU server at {}:{}'.format(self.addr, self.port)) # Start working threads for t in self.pool: t.start() # Block forever while True: sleep(sys.maxint) def terminate(self): # Shutdown server (and working threads) self.server.shutdow() # FIXME: Umount all opened volumes # Wait for all threads to finish for t in self.pool: t.join()