def delete(self, pricing_version):
        """Delete the pricing version.

        :param version: Version of the pricing to delete.
        """
        common_db = db_api.get_instance()
        try:
            common_db.delete_pricing_version(version=pricing_version)
        except db_api.NoSuchPricingVersion as e:
            pecan.abort(400, str(e))
Esempio n. 2
0
 def _load_pricing_infos(self, timestamp):
     db_api = common_db_api.get_instance()
     dt = datetime.datetime.strptime(ck_utils.utc2local(ck_utils.ts2dt(timestamp)), "%Y-%m-%d %H:%M:%S")
     pricing_version = db_api.get_current_pricing_version(dt)
     pricing_infos_list = []
     pricing_infos_list = db_api.get_pricing_infos(pricing_version=pricing_version)
     for pricing_info in pricing_infos_list:
         self._entries[pricing_info['charging_key_id']] = {'charging_key': pricing_info['charging_key'],
                                                        'res_type': pricing_info['res_type'], 
                                                        'unit_price': pricing_info['unit_price'], 
                                                        'time_based': pricing_info['time_based']}
    def get_one(self, pricing_info_id):
        """Return a pricing information.

        :param pricing_info_id: UUID of the pricing information.
        """
        common_db = db_api.get_instance()
        try:
            pricing_info = common_db.get_pricing_info(pricing_info_id=pricing_info_id)
            return pricing_models.PricingInfo(**pricing_info)
        except db_api.NoSuchPricingInfo as e:
            pecan.abort(400, str(e))
    def get_all(self, version=None):
        """Get the pricing version list

        :return: List of every pricing version.
        """
        common_db = db_api.get_instance()
        pricing_vers_list = []
        pricing_vers_list = common_db.get_pricing_versions(version)

        res = pricing_models.PricingVerCollection(pricing_vers =
                                                   [pricing_models.PricingVer(**pricing_ver) 
                                                    for pricing_ver in pricing_vers_list])
        return res
    def put(self, pricing_info_id, pricing_info):
        """Update a pricing information.

        :param pricing_info_id: UUID of the pricing information.
        :param pricing_info: pricing information data to insert.
        """
        common_db = db_api.get_instance()
        try:
            common_db.update_pricing_info(
                pricing_info_id,
                unit_price=pricing_info.unit_price,
                time_based=pricing_info.time_based)
            pecan.response.headers['Location'] = pecan.request.path
        except (db_api.NoSuchPricingInfo) as e:
            pecan.abort(400, str(e))
Esempio n. 6
0
    def _get_unit_price(self, resource_info, res_type):
        common_db = db_api.get_instance()
        if res_type == 'compute':
            charging_key_id = resource_info['flavor']
        elif res_type == 'volume':
            charging_key_id = resource_info['volume_type'] if resource_info['volume_type'] != u'None' else 'no_type'
        elif res_type == 'network.bw.total':
            charging_key_id = 'network.bw.total'

        try:
            time_now = datetime.datetime.now()
            pricing_version = common_db.get_current_pricing_version(time_now)
            pricing_info = common_db.get_pricing_infos(charging_key_id, pricing_version)
            return pricing_info[0]['unit_price']
        except db_api.NoSuchPricingInfo as e:
            return 0
    def post(self, pricing_version):
        """Create a pricing version.

        :param pricing_version: Version about the pricing to create.
        """
        common_db = db_api.get_instance()
        pricing_version.effective_time = ck_utils.get_billing_month_period(cfg.CONF.collect.billing_month_start, 
                                                                                pricing_version.effective_billing_month)[0]
        year_month = pricing_version.effective_billing_month.split('-')
        if len(year_month[1]) == 1:
            year_month[1] = '0' + year_month[1]
        pricing_version.version = 'v'+year_month[0]+year_month[1]

        try:
            pricing_version_db = common_db.create_pricing_version(pricing_version)
            pecan.response.location = pecan.request.path_url
            if pecan.response.location[-1] != '/':
                pecan.response.location += '/'
            pecan.response.location += pricing_version_db['version']
            return pricing_models.PricingVer(**pricing_version_db)
        except db_api.PricingVersionAlreadyExists as e:
            pecan.abort(409, str(e))