コード例 #1
0
ファイル: base.py プロジェクト: openstack/bilean
 def to_dict(self):
     if self.id:
         dep_on = db_api.dependency_get_depended(self.context, self.id)
         dep_by = db_api.dependency_get_dependents(self.context, self.id)
     else:
         dep_on = []
         dep_by = []
     action_dict = {
         'id': self.id,
         'name': self.name,
         'action': self.action,
         'target': self.target,
         'cause': self.cause,
         'owner': self.owner,
         'start_time': utils.dec2str(self.start_time),
         'end_time': utils.dec2str(self.end_time),
         'timeout': self.timeout,
         'status': self.status,
         'status_reason': self.status_reason,
         'inputs': self.inputs,
         'outputs': self.outputs,
         'depends_on': dep_on,
         'depended_by': dep_by,
         'created_at': self.created_at,
         'updated_at': self.updated_at,
         'data': self.data,
     }
     return action_dict
コード例 #2
0
ファイル: consumption.py プロジェクト: openstack/bilean
 def to_dict(self):
     consumption = {
         'id': self.id,
         'user_id': self.user_id,
         'resource_id': self.resource_id,
         'resource_type': self.resource_type,
         'start_time': utils.dec2str(self.start_time),
         'end_time': utils.dec2str(self.end_time),
         'rate': utils.dec2str(self.rate),
         'cost': utils.dec2str(self.cost),
         'metadata': self.metadata,
     }
     return consumption
コード例 #3
0
ファイル: user.py プロジェクト: openstack/bilean
 def to_dict(self):
     user_dict = {
         'id': self.id,
         'name': self.name,
         'policy_id': self.policy_id,
         'balance': utils.dec2str(self.balance),
         'rate': utils.dec2str(self.rate),
         'credit': self.credit,
         'last_bill': utils.dec2str(self.last_bill),
         'status': self.status,
         'status_reason': self.status_reason,
         'created_at': utils.format_time(self.created_at),
         'updated_at': utils.format_time(self.updated_at),
         'deleted_at': utils.format_time(self.deleted_at),
     }
     return user_dict
コード例 #4
0
ファイル: service.py プロジェクト: openstack/bilean
    def consumption_statistics(self, cnxt, user_id=None, filters=None,
                               start_time=None, end_time=None, summary=False,
                               project_safe=True):
        user_id = user_id or cnxt.project
        result = {}
        if start_time is None:
            start_time = 0
        else:
            start_time = utils.format_time_to_seconds(start_time)
            start_time = utils.make_decimal(start_time)

        now_time = utils.format_time_to_seconds(timeutils.utcnow())
        now_time = utils.make_decimal(now_time)
        if end_time is None:
            end_time = now_time
        else:
            end_time = utils.format_time_to_seconds(end_time)
            end_time = utils.make_decimal(end_time)

        consumptions = cons_mod.Consumption.load_all(cnxt, user_id=user_id,
                                                     filters=filters,
                                                     project_safe=project_safe)
        for cons in consumptions:
            if cons.start_time > end_time or cons.end_time < start_time:
                continue
            et = min(cons.end_time, end_time)
            st = max(cons.start_time, start_time)
            seconds = et - st
            cost = cons.rate * seconds
            if summary:
                if cons.resource_type not in result:
                    result[cons.resource_type] = cost
                else:
                    result[cons.resource_type] += cost
            else:
                if cons.resource_id not in result:
                    tmp = {'resource_type': cons.resource_type,
                           'cost': cost}
                    result[cons.resource_id] = tmp
                else:
                    result[cons.resource_id]['cost'] += cost

        resources = plugin_base.Resource.load_all(cnxt, user_id=user_id,
                                                  filters=filters,
                                                  project_safe=project_safe)
        for res in resources:
            if res.last_bill > end_time or now_time < start_time:
                continue
            et = min(now_time, end_time)
            st = max(res.last_bill, start_time)
            seconds = et - st
            cost = res.rate * seconds
            if summary:
                if res.resource_type not in result:
                    result[res.resource_type] = cost
                else:
                    result[res.resource_type] += cost
            else:
                if res.id not in result:
                    tmp = {'resource_type': res.resource_type,
                           'cost': cost}
                    result[res.id] = tmp
                else:
                    result[res.id]['cost'] += cost

        if summary:
            for key in six.iterkeys(result):
                result[key] = utils.dec2str(result[key])
            return result
        else:
            consumptions = []
            for key in six.iterkeys(result):
                consumption = cons_mod.Consumption(
                    user_id,
                    resource_id=key,
                    resource_type=result[key]['resource_type'],
                    cost=result[key]['cost'],
                    start_time=start_time,
                    end_time=end_time)
                consumptions.append(consumption.to_dict())
            return consumptions