def load_json(cls, data, default_rule=None): """ Allow loading of JSON rule data. """ # Suck in the JSON data and parse the rules rules = dict((k, parse_rule(v)) for k, v in jsonutils.loads(data).items()) return cls(rules, default_rule)
def calculate_consumption(self): """Calculate the consumption by delta time and price.""" self.unit_price = self.get_price() self.start_at = self.get_start_at() total_seconds = self.get_total_seconds(self.start_at, self.event_time) delta_time = total_seconds / 3600.0 pre_content = jsonutils.loads(self.exist_resource.content) if self.event_type == 'resize': size = pre_content.get('size', 0) else: pre_size = pre_content.get('size', 0) if pre_size != self.size: # TBD(fandeliang) # Log.warning("Miss resize event.") pass size = min(self.size, pre_size) consumption = self.unit_price * delta_time * size return consumption
def calculate_consumption(self): """Calculate the consumption by delta time and price.""" # Note(fandeliang) for instance, we should care the status. self.instance_price = self.get_instance_price() self.start_at = self.get_start_at() total_seconds = self.get_total_seconds(self.start_at, self.event_time) delta_time = total_seconds / 3600.0 pre_content = jsonutils.loads(self.exist_resource.content) if self.event_type == 'resize': vcpu = pre_content.get('vcpu', 0) ram = pre_content.get('ram', 0) disk = pre_content.get('disk', 0) else: if (self.vcpu != pre_content.get('vcpu', 0) or self.ram != pre_content.get('ram', 0) or self.disk != pre_content.get('disk', 0)): # TBD(fandeliang) # Log.warning("Miss resize event.") pass vcpu = min(self.vcpu, pre_content.get('vcpu', 0)) ram = min(self.ram, pre_content.get('ram', 0)) disk = min(self.disk, pre_content.get('disk', 0)) previous_status = self.get_instance_previous_status() # If the instance is shut off, we only billing the disk costs. if previous_status == 'shutoff': self.unit_price = self.instance_price['disk'] * disk else: self.unit_price = self.instance_price['vcpu'] * vcpu self.unit_price += self.instance_price['ram'] * ram self.unit_price += self.instance_price['disk'] * disk consumption = self.unit_price * delta_time return consumption