def stop(self):
        if self.__status == CS_STOPPED:
            return

        try:
            if self.__check_kss_thrd:
                self.__check_kss_thrd.stop()
                self.__check_kss_thrd = None

            if self.__config.mount_type == MOUNT_LOCAL:
                ret_code = self.__webdav_mount.unmount()

            for api_instance in self.__api_list:
                try:
                    logger.debug('stopping %s ...' % api_instance.get_name())
                    api_instance.stop()
                    logger.info('%s is stopped!' % api_instance.get_name())
                except Exception, err:
                    logger.error('stopping %s error: %s' %
                                 (api_instance.get_name(), err))

            if self.__nibbler:
                self.__nibbler.stop()

            logger.info('IdepositboxClient is stopped')
    def run(self):
        self.stopped = False
        old_status = None
        mgmt_addr = '127.0.0.1:%s'%DAEMON_PORT
        time.sleep(2)

        while not self.stopped:
            try:
                conn = httplib.HTTPConnection(mgmt_addr, timeout=10)
                try:
                    conn.request('GET', '/get_service_status')
                    response = conn.getresponse()
                    if response.status != 200:
                        raise Exception('mgmt service error! [%s %s] %s'%(response.status, response.reason, response.read()))
                    data = response.read()
                except socket.error, err:
                    raise Exception('Mgmt server does not respond! Details: %s'%err)
                finally:
                    conn.close()

                data = json.loads(data)
                progress = None
                if data.get('service_status', CS_FAILED) != CS_STARTED:
                    status = STATUS_STOPPED
                else:
                    if data.get('sync_status', SS_SYNC_PROGRESS):
                        status = STATUS_SYNCING
                        progress = '%i%s'%(int(data.get('sum_progress', 0)), '%')
                    else:
                        status = STATUS_STARTED
                if status == STATUS_SYNCING or status != old_status:
                    self.wind.changed_service_status.emit(status, progress)
                old_status = status
            except Exception, err:
                logger.error('CheckSyncStatusThread: %s'%err)
    def start(self, ks_type, ks_path, ks_passwd):
        if self.__status == CS_STARTED:
            raise Exception('IdepositboxClient is already started')

        self.__config.refresh()
        config = self.__config
        try:
            sm_class = SM_TYPES_MAP.get(ks_type, None)
            if not sm_class:
                raise Exception('Unsupported key chain type: "%s"'%ks_type)
            security_provider = sm_class(ks_path, ks_passwd)
            self.__last_ks_path = ks_path
            self.__last_ks_type = ks_type
            
            self.__nibbler = Nibbler(config.fabnet_hostname, security_provider, \
                                config.parallel_put_count, config.parallel_get_count, \
                                config.data_dir, config.cache_size)


            try:
                registered = self.__nibbler.is_registered()
            except Exception, err:
                logger.error(err)
                raise Exception('Service %s does not respond! Please, '\
                                'ensure that network is configured correctly'%config.fabnet_hostname)

            if not registered:
                try:
                    self.__nibbler.register_user() #FIXME: this is dangerous call! user should accept this case...
                except Exception, err:
                    logger.error('Register user error: %s'%err)
                    raise Exception('User does not registered in service')
    def start(self, ks_type, ks_path, ks_passwd):
        if self.__status == CS_STARTED:
            raise Exception('IdepositboxClient is already started')

        self.__config.refresh()
        config = self.__config
        try:
            sm_class = SM_TYPES_MAP.get(ks_type, None)
            if not sm_class:
                raise Exception('Unsupported key chain type: "%s"' % ks_type)
            security_provider = sm_class(ks_path, ks_passwd)
            self.__last_ks_path = ks_path
            self.__last_ks_type = ks_type

            self.__nibbler = Nibbler(config.fabnet_hostname, security_provider, \
                                config.parallel_put_count, config.parallel_get_count, \
                                config.data_dir, config.cache_size)

            try:
                registered = self.__nibbler.is_registered()
            except Exception, err:
                logger.error(err)
                raise Exception('Service %s does not respond! Please, '\
                                'ensure that network is configured correctly'%config.fabnet_hostname)

            if not registered:
                try:
                    self.__nibbler.register_user(
                    )  #FIXME: this is dangerous call! user should accept this case...
                except Exception, err:
                    logger.error('Register user error: %s' % err)
                    raise Exception('User does not registered in service')
 def stop(self, s=None, p=None):
     logger.info('Stopping IDClientDaemon...')
     try:
         self.server.stop()
         logger.info('IDClientDaemon is stopped')
     except Exception, err:
         logger.error('IDClientDaemon stopping error: %s' % err)
         logger.traceback_info()
 def stop(self, s=None, p=None):
     logger.info('Stopping IDClientDaemon...')
     try:
         self.server.stop()
         logger.info('IDClientDaemon is stopped')
     except Exception, err:
         logger.error('IDClientDaemon stopping error: %s'%err)
         logger.traceback_info()            
Exemple #7
0
 def stop(self):
     try:
         self.idespositbox_client.stop()
         logger.info('Stopping management server...')
         if self.server:
             self.server.stop()
     except Exception, err:
         logger.error('Stopping management server error: %s' % err)
         logger.traceback_info()
 def stop(self):
     try:
         self.idespositbox_client.stop()
         logger.info('Stopping management server...')
         if self.server:
             self.server.stop()
     except Exception, err:
         logger.error('Stopping management server error: %s'%err)
         logger.traceback_info()            
    def __set_log_level(self):
        log_level = self.__config.log_level.lower()
        ll_map = {'debug': logging.DEBUG, 'info': logging.INFO,
                    'warning': logging.WARNING, 'error': logging.ERROR}
        l_level = ll_map.get(log_level, None)
        if l_level == None:
            logger.error('Unknown log level "%s"'%log_level)

        logger.setLevel(l_level)
        nimbus_logger.setLevel(l_level)
 def read(self):
     if self.is_linux:
         tmp_file = TempFile()
         file_path = tmp_file.name
         try:
             self.__bdm_call(self.__dev_path, "read", file_path)
             data = open(file_path, "rb").read()
             return data
         except Exception, err:
             logger.error("read key chain failed: %s" % err)
         finally:
Exemple #11
0
def main():
    try:
        app = QApplication(sys.argv)
        if MainWind.isMgmtServerStarted():
            if not MainWind.show_question('WARNING', 'Management console is already started! Do you really want start application?'):
                sys.exit(1)
        app.setQuitOnLastWindowClosed(False)

        mw = MainWind()
    except Exception, err:
        logger.error('UI error: %s'%err)
        sys.exit(1)
 def run(self):
     logger.debug('thread is started')
     while not self.stopped.is_set():
         try:
             ks_status = self.id_client.key_storage_status()
             if ks_status != AbstractSecurityManager.KSS_EXISTS \
                     and self.id_client.get_status() == CS_STARTED:
                 self.id_client.stop()
         except Exception, err:
             logger.error('CheckKSStatusThread: %s'%err)
             logger.traceback_debug()
         finally:
 def run(self):
     logger.debug('thread is started')
     while not self.stopped.is_set():
         try:
             ks_status = self.id_client.key_storage_status()
             if ks_status != AbstractSecurityManager.KSS_EXISTS \
                     and self.id_client.get_status() == CS_STARTED:
                 self.id_client.stop()
         except Exception, err:
             logger.error('CheckKSStatusThread: %s' % err)
             logger.traceback_debug()
         finally:
    def __set_log_level(self):
        log_level = self.__config.log_level.lower()
        ll_map = {
            'debug': logging.DEBUG,
            'info': logging.INFO,
            'warning': logging.WARNING,
            'error': logging.ERROR
        }
        l_level = ll_map.get(log_level, None)
        if l_level == None:
            logger.error('Unknown log level "%s"' % log_level)

        logger.setLevel(l_level)
        nimbus_logger.setLevel(l_level)
    def run(self):
        web_app = WSGIApplication(self.idespositbox_client, HANDLERS_MAP, self.static_path)

        version = "iDepositBox %s" % wsgiserver.CherryPyWSGIServer.version
        wsgiserver.CherryPyWSGIServer.version = version

        logger.info("Running %s, listening on %s://%s:%s" % (version, 'http', self.host, self.port))

        try:
            self.server = wsgiserver.CherryPyWSGIServer((self.host, self.port), web_app,)

            self.server.start()
        except Exception, err:
            logger.error('Management server error: %s'%err)
            logger.traceback_info()            
Exemple #16
0
    def run(self):
        web_app = WSGIApplication(self.idespositbox_client, HANDLERS_MAP,
                                  self.static_path)

        version = "iDepositBox %s" % wsgiserver.CherryPyWSGIServer.version
        wsgiserver.CherryPyWSGIServer.version = version

        logger.info("Running %s, listening on %s://%s:%s" %
                    (version, 'http', self.host, self.port))

        try:
            self.server = wsgiserver.CherryPyWSGIServer(
                (self.host, self.port),
                web_app,
            )

            self.server.start()
        except Exception, err:
            logger.error('Management server error: %s' % err)
            logger.traceback_info()
    def run(self):
        try:
            import win32pipe, win32file
            import win32file

            fileHandle = win32pipe.CreateNamedPipe(
                r'\\.\pipe\idepositbox_daemon_pipe',
                win32pipe.PIPE_ACCESS_DUPLEX,
                win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_WAIT, 1, 65536,
                65536, 300, None)

            win32pipe.ConnectNamedPipe(fileHandle, None)

            data = win32file.ReadFile(fileHandle, 4096)
            if data == (0, 'STOP'):
                self.stop_hdlr()
            win32pipe.DisconnectNamedPipe(fileHandle)
            win32file.CloseHandle(fileHandle)
        except Exception, err:
            logger.error('Win32StopThread error: %s' % err)
    def run(self):
        try:
            import win32pipe, win32file
            import win32file

            fileHandle = win32pipe.CreateNamedPipe(r'\\.\pipe\idepositbox_daemon_pipe',
                win32pipe.PIPE_ACCESS_DUPLEX,
                win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_WAIT,
                1, 65536, 65536,300,None)


            win32pipe.ConnectNamedPipe(fileHandle, None)

            data = win32file.ReadFile(fileHandle, 4096)
            if data == (0, 'STOP'):
                self.stop_hdlr()
            win32pipe.DisconnectNamedPipe(fileHandle)
            win32file.CloseHandle(fileHandle)
        except Exception, err:
            logger.error('Win32StopThread error: %s'%err)
    def stop(self):
        if self.__status == CS_STOPPED:
            return

        try:
            if self.__check_kss_thrd:
                self.__check_kss_thrd.stop()
                self.__check_kss_thrd = None

            if self.__config.mount_type == MOUNT_LOCAL:
                ret_code = self.__webdav_mount.unmount()

            for api_instance in self.__api_list:
                try:
                    logger.debug('stopping %s ...'%api_instance.get_name())
                    api_instance.stop()
                    logger.info('%s is stopped!'%api_instance.get_name())
                except Exception, err:
                    logger.error('stopping %s error: %s'%(api_instance.get_name(), err))

            if self.__nibbler:
                self.__nibbler.stop()

            logger.info('IdepositboxClient is stopped')
class IdepositboxClient(object):
    def __init__(self):
        self.__nibbler = None
        self.__api_list = []
        self.__config = Config()
        self.__status = CS_STOPPED
        self.__ms_mgr = get_media_storage_manager()
        self.__check_kss_thrd = None
        self.__last_ks_type = None
        self.__last_ks_path = None
        self.__events = []
        self.__webdav_mount = WebdavMounter()
        events_provider.append_listener(Event.ET_CRITICAL,
                                        self.on_critical_event)
        self.__set_log_level()

    def __set_log_level(self):
        log_level = self.__config.log_level.lower()
        ll_map = {
            'debug': logging.DEBUG,
            'info': logging.INFO,
            'warning': logging.WARNING,
            'error': logging.ERROR
        }
        l_level = ll_map.get(log_level, None)
        if l_level == None:
            logger.error('Unknown log level "%s"' % log_level)

        logger.setLevel(l_level)
        nimbus_logger.setLevel(l_level)

    @IDEventLock
    def on_critical_event(self, event):
        self.__events.append(event)

    @IDEventLock
    def get_events(self):
        events = self.__events
        self.__events = []
        return events

    @IDEventLock
    def get_events_count(self):
        return len(self.__events)

    def get_version(self):
        return VERSION

    @IDLock
    def get_nibbler(self):
        return self.__nibbler

    @IDLock
    def get_status(self):
        return self.__status

    @IDLock
    def get_mount_point(self):
        return self.__webdav_mount.get_mount_point()

    @IDLock
    def get_last_key_storage_type(self):
        return self.__last_ks_type

    @IDLock
    def get_last_key_storage_path(self):
        return self.__last_ks_path

    @IDLock
    def start(self, ks_type, ks_path, ks_passwd):
        if self.__status == CS_STARTED:
            raise Exception('IdepositboxClient is already started')

        self.__config.refresh()
        config = self.__config
        try:
            sm_class = SM_TYPES_MAP.get(ks_type, None)
            if not sm_class:
                raise Exception('Unsupported key chain type: "%s"' % ks_type)
            security_provider = sm_class(ks_path, ks_passwd)
            self.__last_ks_path = ks_path
            self.__last_ks_type = ks_type

            self.__nibbler = Nibbler(config.fabnet_hostname, security_provider, \
                                config.parallel_put_count, config.parallel_get_count, \
                                config.data_dir, config.cache_size)

            try:
                registered = self.__nibbler.is_registered()
            except Exception, err:
                logger.error(err)
                raise Exception('Service %s does not respond! Please, '\
                                'ensure that network is configured correctly'%config.fabnet_hostname)

            if not registered:
                try:
                    self.__nibbler.register_user(
                    )  #FIXME: this is dangerous call! user should accept this case...
                except Exception, err:
                    logger.error('Register user error: %s' % err)
                    raise Exception('User does not registered in service')

            self.__nibbler.start()

            #init API instances
            self.__api_list = []
            if config.mount_type == MOUNT_LOCAL:
                ext_host = '127.0.0.1'
            else:
                ext_host = config.webdav_bind_host
            log_level = logger.getEffectiveLevel()
            webdav_server = WebDavAPI(self.__nibbler, ext_host,
                                      config.webdav_bind_port, log_level)
            self.__api_list.append(webdav_server)

            for api_instance in self.__api_list:
                logger.debug('starting %s...' % api_instance.get_name())
                api_instance.start()

                logger.debug('waiting while %s is started...' %
                             api_instance.get_name())
                for i in xrange(api_instance.get_start_waittime()):
                    time.sleep(1)
                    if api_instance.is_ready():
                        break
                else:
                    raise Exception('%s does not started!' %
                                    api_instance.get_name())
                logger.info('%s is started!' % api_instance.get_name())

            if config.mount_type == MOUNT_LOCAL:
                time.sleep(1)
                ret_code = self.__webdav_mount.mount(ext_host,
                                                     config.webdav_bind_port)
                mount_point = self.__webdav_mount.get_mount_point()
                if not mount_point:
                    mount_point = 'UnknownMountPoint'
                if ret_code:
                    logger.error('WebDav resource does not mounted at %s!' %
                                 mount_point)
                else:
                    logger.info('WebDav resource is mounted at %s' %
                                mount_point)

            self.__check_kss_thrd = CheckKSStatusThread(self)
            self.__check_kss_thrd.start()
            logger.info('IdepositboxClient is started')
 def start(self):
     try:
         self.server.run()
     except Exception, err:
         logger.error('IDClientDaemon error: %s' % err)
         logger.traceback_info()
 def start(self):
     try:
         self.server.run()
     except Exception, err:
         logger.error('IDClientDaemon error: %s'%err)
         logger.traceback_info()            
            if config.mount_type == MOUNT_LOCAL:
                time.sleep(1)
                ret_code = self.__webdav_mount.mount(ext_host, config.webdav_bind_port)
                mount_point = self.__webdav_mount.get_mount_point()
                if not mount_point:
                    mount_point = 'UnknownMountPoint'
                if ret_code:
                    logger.error('WebDav resource does not mounted at %s!'%mount_point)
                else:
                    logger.info('WebDav resource is mounted at %s'%mount_point)

            self.__check_kss_thrd = CheckKSStatusThread(self)
            self.__check_kss_thrd.start()
            logger.info('IdepositboxClient is started')
        except Exception, err:
            logger.error('init nimbusfs client error: %s'%err)
            if not isinstance(err, NimbusException):
                logger.traceback_info()
            self.__status = CS_FAILED
            self.stop()
            raise err
        self.__status = CS_STARTED

    @IDLock
    def get_config(self):
        self.__config.refresh()
        return self.__config.get_config_dict()

    @IDLock
    def update_config(self, new_config):
        log_level = new_config.get('log_level', self.__config.log_level)
 def __run_linux_mounter(self, cmd):
     proc = Subprocess('%s %s'%(LINUX_MOUNTER_BIN, cmd))
     cout, cerr = proc.communicate()
     if proc.returncode:
         logger.error('webdav mounter error: %s %s'%(cout, cerr))
     return proc.returncode 
                                                     config.webdav_bind_port)
                mount_point = self.__webdav_mount.get_mount_point()
                if not mount_point:
                    mount_point = 'UnknownMountPoint'
                if ret_code:
                    logger.error('WebDav resource does not mounted at %s!' %
                                 mount_point)
                else:
                    logger.info('WebDav resource is mounted at %s' %
                                mount_point)

            self.__check_kss_thrd = CheckKSStatusThread(self)
            self.__check_kss_thrd.start()
            logger.info('IdepositboxClient is started')
        except Exception, err:
            logger.error('init nimbusfs client error: %s' % err)
            if not isinstance(err, NimbusException):
                logger.traceback_info()
            self.__status = CS_FAILED
            self.stop()
            raise err
        self.__status = CS_STARTED

    @IDLock
    def get_config(self):
        self.__config.refresh()
        return self.__config.get_config_dict()

    @IDLock
    def update_config(self, new_config):
        log_level = new_config.get('log_level', self.__config.log_level)
Exemple #26
0
 def __run_linux_mounter(self, cmd):
     proc = Subprocess('%s %s' % (LINUX_MOUNTER_BIN, cmd))
     cout, cerr = proc.communicate()
     if proc.returncode:
         logger.error('webdav mounter error: %s %s' % (cout, cerr))
     return proc.returncode
            Win32StopThread(self.stop).start()
        else:
            static_path = None #default static path will be used
            signal.signal(signal.SIGINT, self.stop)
        self.server = MgmtServer('0.0.0.0', DAEMON_PORT, IdepositboxClient(), static_path)

    def start(self):
        try:
            self.server.run()
        except Exception, err:
            logger.error('IDClientDaemon error: %s'%err)
            logger.traceback_info()            

    def stop(self, s=None, p=None):
        logger.info('Stopping IDClientDaemon...')
        try:
            self.server.stop()
            logger.info('IDClientDaemon is stopped')
        except Exception, err:
            logger.error('IDClientDaemon stopping error: %s'%err)
            logger.traceback_info()            


if __name__ == '__main__':
    try:
        IDClientDaemon().start()
    except Exception, err:
        logger.error('IDClientDaemon failed: %s'%err)
        logger.traceback_info()            
        sys.exit(1)
        else:
            static_path = None  #default static path will be used
            signal.signal(signal.SIGINT, self.stop)
        self.server = MgmtServer('0.0.0.0', DAEMON_PORT, IdepositboxClient(),
                                 static_path)

    def start(self):
        try:
            self.server.run()
        except Exception, err:
            logger.error('IDClientDaemon error: %s' % err)
            logger.traceback_info()

    def stop(self, s=None, p=None):
        logger.info('Stopping IDClientDaemon...')
        try:
            self.server.stop()
            logger.info('IDClientDaemon is stopped')
        except Exception, err:
            logger.error('IDClientDaemon stopping error: %s' % err)
            logger.traceback_info()


if __name__ == '__main__':
    try:
        IDClientDaemon().start()
    except Exception, err:
        logger.error('IDClientDaemon failed: %s' % err)
        logger.traceback_info()
        sys.exit(1)