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))
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))
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))