コード例 #1
0
    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
コード例 #2
0
    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)
コード例 #3
0
    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
コード例 #4
0
ファイル: orchestrator.py プロジェクト: lapngodoan/cloudkitty
    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
コード例 #5
0
ファイル: orchestrator.py プロジェクト: lapngodoan/cloudkitty
 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)