Beispiel #1
0
    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)
Beispiel #2
0
    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
Beispiel #3
0
    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
Beispiel #4
0
    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
Beispiel #5
0
    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