def quote(self, res_data): """Get an instant quote based on multiple resource descriptions. :param res_data: List of resource descriptions. :return: Total price for these descriptions. """ # TODO(sheeprine): Send RPC request for quote from cloudkitty import extension_manager b_processors = {} processors = extension_manager.EnabledExtensionManager( 'cloudkitty.billing.processors', ) for processor in processors: b_name = processor.name b_obj = processor.obj b_processors[b_name] = b_obj res_dict = {} for res in res_data: if res.service not in res_dict: res_dict[res.service] = [] json_data = res.to_json() res_dict[res.service].extend(json_data[res.service]) for processor in b_processors.values(): processor.process([{'usage': res_dict}]) price = 0.0 for res in res_dict.values(): for data in res: price += data.get('billing', {}).get('price', 0.0) return price
def _load_rating_processors(self): self._processors = [] processors = extension_manager.EnabledExtensionManager( PROCESSORS_NAMESPACE, invoke_kwds={'tenant_id': self._tenant_id}) for processor in processors: self._processors.append(processor) self._processors.sort(key=lambda x: x.obj.priority, reverse=True)
def _load_billing_processors(self): self.b_processors = {} processors = extension_manager.EnabledExtensionManager( 'cloudkitty.billing.processors', ) for processor in processors: b_name = processor.name b_obj = processor.obj self.b_processors[b_name] = b_obj
def _load_billing_processors(self): self.b_processors = {} processors = extension_manager.EnabledExtensionManager( PROCESSORS_NAMESPACE, ) for processor in processors: b_name = processor.name b_obj = processor.obj self.b_processors[b_name] = b_obj
def process_messages(self): pending_reload = self._billing_endpoint.get_reload_list() pending_states = self._billing_endpoint.get_module_state() for name in pending_reload: if name in self.b_processors: if name in self.b_processors.keys(): LOG.info( 'Reloading configuration of {} module.'.format(name)) self.b_processors[name].reload_config() else: LOG.info( 'Tried to reload a disabled module: {}.'.format(name)) for name, status in pending_states.items(): if name in self.b_processors and not status: LOG.info('Disabling {} module.'.format(name)) self.b_processors.pop(name) else: LOG.info('Enabling {} module.'.format(name)) processors = extension_manager.EnabledExtensionManager( PROCESSORS_NAMESPACE) for processor in processors: if processor.name == name: self.b_processors.append(processor)