Exemple #1
0
 def get(self, request, field, id):
     if field not in ("cost", "current"):
         return http.HttpResponse(400, "Bad Request!")
     if id not in ('', 'All'):
         query_field = "product.project_id"
         query_value = id
         query_type = "string"
     else:
         is_domain_admin = keystone.is_domain_admin(request)
         if not is_domain_admin[0]:
             return {"items": ""}
         if is_domain_admin[1]:
             query_field = "product.account_id"
             query_value = get_account_id(request)
             query_type = "number"
             if query_value == None:
                 return {"items": ""}
         else:
             query_field = "product.project_id"
             query_value = request.user.project_id
             query_type = "string"
     query = [{
         "field": query_field,
         "op": "eq",
         "value": query_value,
         "type": query_type,
     }]
     content = billing.get_consumption(request, field, query)
     content = [c.to_dict() for c in content]
     return {"items": content}
Exemple #2
0
def create_user(request, data):
    manager = keystoneclient(request).users
    try:
        user = manager.create(**data)
        if getattr(settings, 'ENABLE_BILLING', True):
            create_billingaccount(request, data.get('name'), user.domain_id,
                                  data.get("reg_code"))

        invcode_enable = getattr(settings, 'INVCODE_ENABLE', True)
        invcode_register = getattr(settings, 'INVCODE_REGISTER', True)
        content = ''
        if invcode_enable and invcode_register:
            # user = manager.find(id=user.id)
            # if not user:
            #     raise Exception("Failed to get the registered user")
            try:
                invcode = user.reg_code
            except Exception:
                raise Exception("Failed to get the invitation code")

            try:
                data = chakra.invcode_check(request, invcode)
                if data:
                    result = data['status']
                else:
                    raise Exception(
                        _("Failed to check Invitation Code, " +
                          "Please make sure code is available"))
                if result != INVCODE_STATUS[0]:
                    raise Exception(
                        _("Failed to check Invitation Code, " +
                          "Please make sure code is available"))

                use_at = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
                content = chakra.invcode_update(request,
                                                str(invcode),
                                                status=1,
                                                use_at=use_at,
                                                use_by=user.name)
                if getattr(settings, 'ENABLE_BILLING', True):
                    # create payment for invcode
                    body = {
                        "ptype":
                        "invcode",
                        "amount":
                        data['worth'],
                        "trade_success":
                        1,
                        "account_id":
                        billing_api.get_account_id(request, user.domain_id)
                    }
                    content = chakra.payment_create(request, **body)
            except:
                pass

        resend_email(request, user.email)
    except Exception as e:
        raise e
Exemple #3
0
    def get(self, request, domain_id):
        if not keystone.is_default_domain_admin(request)[1]:
            raise exceptions.NotAuthorized

        if domain_id:
            query_field = "product.account_id"
            query_value = get_account_id(request, domain_id=domain_id)
            query_type = "number"
            if query_value == None:
                return {"items": ""}
            query = [{
                "field": query_field,
                "op": "eq",
                "value": query_value,
                "type": query_type,
            }]
        else:
            query = None

        params = ["pagation.number=1", "q.orderby=product.id", "q.sort=asc"]
        products = billing.product_list(request, query, params)
        items = [p.to_dict() for p in products]
        tenant_dict = {}

        tenants, has_more = api.keystone.tenant_list(request, domain=domain_id)
        for tenant in tenants:
            tenant_dict[tenant.id] = tenant.to_dict()

        try:
            _project_id_name = {}
            for item in items:
                item['status'] = status_dic.get(item['status'])
                resource = self._get_resource_info(request,
                                                   item.get('resource_id'))

                if resource.get('resource_name'):
                    item.update(
                        {'resource_name': resource.get('resource_name')})
                else:
                    item.update({'resource_name': item.get('resource_id')})
                p_name = _project_id_name.get(item.get('project_id'))
                if p_name:
                    item.update({'project_name': p_name})
                else:
                    project = tenant_dict.get(item.get('project_id'))
                    if not project:
                        continue
                    if project.get('name'):
                        item.update({'project_name': project.get('name')})
                        _project_id_name.update(
                            {item.get('project_id'): project.get('name')})
                    else:
                        item.update({'project_name': item.get('project_id')})
            return {"items": items}
        except:
            pass
Exemple #4
0
def _get_products(request):
    is_domain_admin = keystone.is_domain_admin(request)
    if not is_domain_admin[0]:
        return {"items": ""}
    if is_domain_admin[1]:
        query_field = "product.account_id"
        query_value = billing.get_account_id(request)
        query_type = "number"
        if query_value == None:
            return []
    else:
        query_field = "product.project_id"
        query_value = request.user.project_id
        query_type = "string"
    query = [{"field": query_field,
              "op": "eq",
              "value": query_value,
              "type": query_type,}]
    params = ["pagation.number=1",
              "pagation.count=1000",
              "q.orderby=product.id",
              "q.sort=asc"]
    products = billing.product_list(request, query, params)
    items = [p.to_dict() for p in products]
    try:
        _project_id_name = {}
        for item in items:
            item['status'] = status_dic.get(item['status'])
            resource = ceilometer.get_resource_info(
                request, item.get('resource_id'))
            if resource.get('resource_name'):
                item.update(
                    {'resource_name': resource.get('resource_name')})
            else:
                item.update({'resource_name': item.get('resource_id')})
            p_name = _project_id_name.get(item.get('project_id'))
            if p_name:
                item.update({'project_name': p_name})
            else:
                try:
                    project = keystone.tenant_get(
                        request, item.get('project_id'), admin=request.user.is_superuser).to_dict()
                except Exception:
                    continue
                if project.get('name'):
                    item.update({'project_name': project.get('name')})
                    _project_id_name.update(
                        {item.get('project_id'): project.get('name')})
                else:
                    item.update({'project_name': item.get('project_id')})
        return items
    except:
        return []
Exemple #5
0
 def post(self, request, query):
     data = request.DATA
     project_id = request.user.project_id
     domain_id = request.user.user_domain_id
     _account_id = get_account_id(request)
     if _account_id == None:
         raise exceptions.NotFound("Your User has no billing account")
     data.update({
         'project_id': project_id,
         'domain_id': domain_id,
         'account_id': _account_id,
         'provider': 'openstack'
     })
     product = billing.product_create(request, data).to_dict()
     return product