Example #1
0
    def get(self, account, rse=None):
        """ get the current local limits for an account on a specific RSE

        .. :quickref: LocalAccountLimits; Get local account limits.

        :param account: The account name.
        :param rse: The rse name.
        :resheader Content-Type: application/json
        :status 200: OK.
        :status 401: Invalid auth token.
        :status 404: RSE not found.
        :status 406: Not Acceptable.
        :returns: JSON dict containing informations about the requested user.
        """
        try:
            if rse:
                limits = get_local_account_limit(account=account,
                                                 rse=rse,
                                                 vo=request.environ.get('vo'))
            else:
                limits = get_local_account_limits(account=account,
                                                  vo=request.environ.get('vo'))
        except RSENotFound as error:
            return generate_http_error_flask(404, error)

        return Response(render_json(**limits), content_type="application/json")
Example #2
0
    def GET(self, account, rse=None):
        """ get the current limits for an account on a specific RSE

        HTTP Success:
            200 OK

        HTTP Error:
            404 Not Found
            406 Not Acceptable
            500 InternalError

        :param X-Rucio-Account: Account identifier.
        :param X-Rucio-Auth-Token: as an 32 character hex string.

        :param account:   The account name.
        :param rse:       The rse name.

        :returns: JSON dict containing informations about the requested user.
        """
        header('Content-Type', 'application/json')
        try:
            if rse:
                limits = get_local_account_limit(account=account,
                                                 rse=rse,
                                                 vo=ctx.env.get('vo'))
            else:
                limits = get_local_account_limits(account=account,
                                                  vo=ctx.env.get('vo'))
        except RSENotFound as error:
            raise generate_http_error(404, 'RSENotFound', error.args[0])

        return render_json(**limits)
Example #3
0
    def get(self, account, rse=None):
        """
        ---
        summary: Get local limit
        description: Get the current local limits for an account on a specific RSE.
        tags:
          - Account
        parameters:
        - name: account
          in: path
          description: The account identifier.
          schema:
            type: string
          style: simple
        - name: rse
          in: path
          description: The rse identifier.
          schema:
            type: string
          style: simple
        responses:
          200:
            description: OK
            content:
              application/json:
                schema:
                  description: Json object with rse identifiers as keys and account limits in bytes as values.
                  type: object
          401:
            description: Invalid Auth Token
          404:
            description: RSE not found
          406:
            description: Not Acceptable
        """
        try:
            if rse:
                limits = get_local_account_limit(account=account,
                                                 rse=rse,
                                                 vo=request.environ.get('vo'))
            else:
                limits = get_local_account_limits(account=account,
                                                  vo=request.environ.get('vo'))
        except RSENotFound as error:
            return generate_http_error_flask(404, error)

        return Response(render_json(**limits), content_type="application/json")
Example #4
0
    def test_api_account_limit(self):
        """ ACCOUNT_LIMIT (API): Test external representation of account limits """
        # Add mock account limits
        rse_expr = '{}|{}'.format(self.rse_name, self.rse2_name)
        api_acc_lim.set_local_account_limit(self.account_name, self.rse_name, 10000, issuer='root', **self.vo)
        api_acc_lim.set_global_account_limit(self.account_name, rse_expr, 20000, issuer='root', **self.vo)

        out = api_acc_lim.get_local_account_limits(self.account_name, **self.vo)
        assert_in(self.rse_name, out)
        assert_not_in(self.rse_id, out)

        out = api_acc_lim.get_local_account_limit(self.account_name, self.rse_name, **self.vo)
        assert_in(self.rse_name, out)
        assert_not_in(self.rse_id, out)

        out = api_acc_lim.get_global_account_limits(self.account_name, **self.vo)
        assert_in(rse_expr, out)
        if self.multi_vo:
            assert_not_in('vo={}&({})'.format(self.vo['vo'], rse_expr), out)

        out = api_acc_lim.get_global_account_limit(self.account_name, rse_expr, **self.vo)
        assert_in(rse_expr, out)
        if self.multi_vo:
            assert_not_in('vo={}&({})'.format(self.vo['vo'], rse_expr), out)

        out = api_acc_lim.get_local_account_usage(self.account_name, self.rse_name, issuer='root', **self.vo)
        out = list(out)
        assert_not_equal(0, len(out))
        assert_in(self.rse_id, [usage['rse_id'] for usage in out if 'rse_id' in usage])
        for usage in out:
            if 'rse_id' in usage:
                assert_in('rse', usage)
                if usage['rse_id'] == self.rse_id:
                    assert_equal(self.rse_name, usage["rse"])

        out = api_acc_lim.get_global_account_usage(self.account_name, rse_expr, issuer='root', **self.vo)
        out = list(out)
        assert_not_equal(0, len(out))
        assert_in(rse_expr, [usage['rse_expression'] for usage in out if 'rse_expression' in usage])
Example #5
0
    def test_api_account_limit(self):
        """ ACCOUNT_LIMIT (API): Test external representation of account limits """
        # Add mock account limits
        rse_expr = '{}|{}'.format(self.rse_name, self.rse2_name)
        api_acc_lim.set_local_account_limit(self.account_name, self.rse_name, 10000, issuer='root', **self.vo)
        api_acc_lim.set_global_account_limit(self.account_name, rse_expr, 20000, issuer='root', **self.vo)

        out = api_acc_lim.get_local_account_limits(self.account_name, **self.vo)
        assert self.rse_name in out
        assert self.rse_id not in out

        out = api_acc_lim.get_local_account_limit(self.account_name, self.rse_name, **self.vo)
        assert self.rse_name in out
        assert self.rse_id not in out

        out = api_acc_lim.get_global_account_limits(self.account_name, **self.vo)
        assert rse_expr in out
        if self.multi_vo:
            assert 'vo={}&({})'.format(self.vo['vo'], rse_expr) not in out

        out = api_acc_lim.get_global_account_limit(self.account_name, rse_expr, **self.vo)
        assert rse_expr in out
        if self.multi_vo:
            assert 'vo={}&({})'.format(self.vo['vo'], rse_expr) not in out

        out = api_acc_lim.get_local_account_usage(self.account_name, self.rse_name, issuer='root', **self.vo)
        out = list(out)
        assert 0 != len(out)
        assert self.rse_id in [usage['rse_id'] for usage in out if 'rse_id' in usage]
        for usage in out:
            if 'rse_id' in usage:
                assert 'rse' in usage
                if usage['rse_id'] == self.rse_id:
                    assert self.rse_name == usage["rse"]

        out = api_acc_lim.get_global_account_usage(self.account_name, rse_expr, issuer='root', **self.vo)
        out = list(out)
        assert 0 != len(out)
        assert rse_expr in [usage['rse_expression'] for usage in out if 'rse_expression' in usage]