Example #1
0
 def _init_callback_handler(self):
     self.handlers = PeerCallbackHandlers(self._get_name(),
                                            self._cache_config.get_report_interval())
     self.handlers.register_handler(PeerReporter(self._get_name()))
     self.handlers.register_handler(CacheActiveDownloadTracker())
     
     if self._cache_config.get_sis_url() is not None:
         ip_addr = net_utils.get_own_ip_addr()
         iop_url = self._cache_config.get_sis_iop_url()
         self.handlers.register_handler(PeerActivityReportEmitter(
                 (ip_addr, self._cache_config.get_port()),
                 self._cache_config.get_report_interval(),
                 sis_iop_endpoint_url=iop_url))
     
     if self._cache_config.get_report_to() is not None:
         if self._cache_config.get_report_to() == 'local_report':
             global local_reporter
             local_reporter = PeerLocalReporter(self._get_name(), self._cache_config.get_id(),
                                            self.session, self._cache_config.get_directory())
             self.handlers.register_handler(local_reporter)
         else:
             self.handlers.register_handler(PeerHTTPReporter(self._get_name(),
                                                               self._cache_config.get_id(),
                                                               self._cache_config.get_report_to(),
                                                               self.sconfig,
                                                               self._cache_config.get_compress_xml_reports(),
                                                               self._cache_config.get_serialization_method(),
                                                               is_iop=True))
    def _update_from_sis(self):
        def set_attribute(attribute, func_name):
            if attribute is not None:
                func_name(attribute)

        ws_client = IoP_WSClientImpl(self.get_sis_iop_url())

        config_dict = {}
        try:
            config_dict = ws_client.retrieve_configuration_parameters(
                net_utils.get_own_ip_addr())
            self._logger.warning("Config dict returned was: %s" % config_dict)

            if len(config_dict.keys()) == 0:
                self._logger.warning(
                    "Received an empty dict. Cache configuration was not updated."
                )
                return

            max_torrents = int(
                min(
                    float(config_dict.get('u')) /
                    float(config_dict.get('ulow')),
                    float(config_dict.get('d')) /
                    float(config_dict.get('dlow'))))

            sis_modes = {
                'Collaboration': constants.SELECTION_MODE_IOP,
                'Plain': constants.SELECTION_MODE_LOCAL,
                'Combination': constants.SELECTION_MODE_LOCAL
            }

            set_attribute(config_dict.get('t'),
                          self.set_torrent_selection_interval)
            set_attribute(config_dict.get('u'), self.set_upload_limit)
            set_attribute(config_dict.get('d'), self.set_download_limit)
            set_attribute(config_dict.get('slots'),
                          self.set_max_upload_slots_per_download)
            set_attribute(config_dict.get('remotes'),
                          self.set_establish_remote_connections)
            set_attribute(config_dict.get('x'), self.set_stay_in_torrents)
            set_attribute(config_dict.get('localIPs'), self.set_ip_prefixes)
            set_attribute(sis_modes[config_dict.get('mode')],
                          self.set_torrent_selection_mechanism)
            set_attribute(max_torrents, self.set_max_torrents)
            set_attribute(max_torrents, self.set_max_downloads)
        except:
            self._logger.error(
                "Failed to retrieve cache configuration from SIS at %s" %
                self.get_sis_iop_url())
            self._logger.error("Cache configuration was not updated.",
                               exc_info=True)
            self._logger.error("Received config dict was: %s" % config_dict)

            raise ConfigurationException(
                "Failed to retrieve cache configuration from SIS at %s" %
                self.get_sis_iop_url())

            return
Example #3
0
        def setup_callback_handlers(session, scfg):
            self._handlers = PeerCallbackHandlers(
                self._get_name(), self._config.get_report_interval())
            self._handlers.register_handler(PeerReporter(self._get_name()))
            self._handlers.register_handler(
                ClientStatistics(self._config.get_directory(),
                                 self._config.get_id()))

            if self._config.is_hap_enabled():
                self._logger.info("HAP support enabled")
                self._handlers.register_handler(ClientHAPHandler(self._config))

            if self._config.get_sis_url() != None:
                ip_addr = net_utils.get_own_ip_addr()
                self._handlers.register_handler(
                    PeerActivityReportEmitter(
                        (ip_addr, self._config.get_port()),
                        self._config.get_activity_report_interval(),
                        sis_iop_endpoint_url=self._config.get_sis_iop_url()))

            if self._config.get_exit_on() == constants.EXIT_ON_ALL_FINISHED:
                self._handlers.register_handler(
                    ClientUptimeHandler(session,
                                        method=constants.EXIT_ON_ALL_FINISHED,
                                        callback=self._on_exit))
            elif self._config.get_exit_on() == constants.EXIT_ON_PLAYBACK_DONE:
                self._handlers.register_handler(
                    ClientUptimeHandler(session,
                                        method=constants.EXIT_ON_PLAYBACK_DONE,
                                        callback=self._on_exit))
            elif self._config.get_exit_on() == constants.EXIT_ON_SEEDING_TIME:
                self._handlers.register_handler(
                    ClientUptimeHandler(
                        session,
                        method=constants.EXIT_ON_SEEDING_TIME,
                        max_seeding_time=self._config.get_seeding_time(),
                        callback=self._on_exit))

            if self._config.get_report_to() is not None:
                if self._config.get_report_to() == 'local_report':
                    self._local_reporter = PeerLocalReporter(
                        self._get_name(), self._config.get_id(), session,
                        self._config.get_directory())
                    self._handlers.register_handler(self._local_reporter)
                else:
                    self._handlers.register_handler(
                        PeerHTTPReporter(
                            self._get_name(),
                            self._config.get_id(),
                            self._config.get_report_to(),
                            scfg,
                            self._config.get_compress_xml_reports(),
                            self._config.get_serialization_method(),
                            report_interval=self._config.get_report_interval())
                    )
 def setup_callback_handlers(session, scfg):
     self._handlers = PeerCallbackHandlers(self._get_name(), self._config.get_report_interval())
     self._handlers.register_handler(PeerReporter(self._get_name()))
     self._handlers.register_handler(ClientStatistics(self._config.get_directory(),
                                                self._config.get_id()))
     
     if self._config.is_hap_enabled():
         self._logger.info("HAP support enabled")
         self._handlers.register_handler(ClientHAPHandler(self._config))
     
     if self._config.get_sis_url() != None:
         ip_addr = net_utils.get_own_ip_addr()
         self._handlers.register_handler(PeerActivityReportEmitter(
             (ip_addr, self._config.get_port()),
             self._config.get_activity_report_interval(),
             sis_iop_endpoint_url=self._config.get_sis_iop_url()))
         
     if self._config.get_exit_on() == constants.EXIT_ON_ALL_FINISHED:
         self._handlers.register_handler(ClientUptimeHandler(session,
                                                       method=constants.EXIT_ON_ALL_FINISHED,
                                                       callback=self._on_exit))
     elif self._config.get_exit_on() == constants.EXIT_ON_PLAYBACK_DONE:
         self._handlers.register_handler(ClientUptimeHandler(session,
                                                       method=constants.EXIT_ON_PLAYBACK_DONE,
                                                       callback=self._on_exit))
     elif self._config.get_exit_on() == constants.EXIT_ON_SEEDING_TIME:
         self._handlers.register_handler(ClientUptimeHandler(session,
                                                       method=constants.EXIT_ON_SEEDING_TIME,
                                                       max_seeding_time=self._config.get_seeding_time(),
                                                       callback=self._on_exit))
         
     if self._config.get_report_to() is not None:
         if self._config.get_report_to() == 'local_report':
             self._local_reporter = PeerLocalReporter(self._get_name(),
                                                  self._config.get_id(),
                                                  session,
                                                  self._config.get_directory())
             self._handlers.register_handler(self._local_reporter)
         else:
             self._handlers.register_handler(PeerHTTPReporter(self._get_name(),
                                                          self._config.get_id(),
                                                          self._config.get_report_to(),
                                                          scfg,
                                                          self._config.get_compress_xml_reports(),
                                                          self._config.get_serialization_method(),
                                                          report_interval=self._config.get_report_interval()))
    def _update_from_sis(self):
        def set_attribute(attribute, func_name):
            if attribute is not None:
                func_name(attribute)
        
        ws_client = IoP_WSClientImpl(self.get_sis_iop_url())
        
        config_dict = {}
        try:
            config_dict = ws_client.retrieve_configuration_parameters(net_utils.get_own_ip_addr())
            self._logger.warning("Config dict returned was: %s" % config_dict)
            
            if len(config_dict.keys()) == 0:
                self._logger.warning("Received an empty dict. Cache configuration was not updated.")
                return

            max_torrents = int(min( float(config_dict.get('u')) / float(config_dict.get('ulow')),
                                    float(config_dict.get('d')) / float(config_dict.get('dlow'))))
            
            sis_modes = { 'Collaboration' : constants.SELECTION_MODE_IOP,
                          'Plain'         : constants.SELECTION_MODE_LOCAL,
                          'Combination'   : constants.SELECTION_MODE_LOCAL }

            set_attribute(config_dict.get('t'), self.set_torrent_selection_interval)
            set_attribute(config_dict.get('u'), self.set_upload_limit)
            set_attribute(config_dict.get('d'), self.set_download_limit)
            set_attribute(config_dict.get('slots'), self.set_max_upload_slots_per_download)
            set_attribute(config_dict.get('remotes'), self.set_establish_remote_connections)
            set_attribute(config_dict.get('x'), self.set_stay_in_torrents)
            set_attribute(config_dict.get('localIPs'), self.set_ip_prefixes)
            set_attribute(sis_modes[config_dict.get('mode')], self.set_torrent_selection_mechanism)
            set_attribute(max_torrents, self.set_max_torrents)
            set_attribute(max_torrents, self.set_max_downloads)
        except:
            self._logger.error("Failed to retrieve cache configuration from SIS at %s" %
                               self.get_sis_iop_url())
            self._logger.error("Cache configuration was not updated.", exc_info=True)
            self._logger.error("Received config dict was: %s" % config_dict)

            raise ConfigurationException("Failed to retrieve cache configuration from SIS at %s" %
                               self.get_sis_iop_url())
            
            return