Exemplo n.º 1
0
def test_get_standard_ratio_rate_definition():
    testil.eq(
        get_standard_ratio_rate_definition(events_per_day=23),
        RateDefinition(
            per_week=115,
            per_day=23,
            per_hour=3,
            per_minute=0.07,
            per_second=0.005,
        ),
    )
def _get_per_user_submission_rate_definition(domain):
    return PerUserRateDefinition(
        per_user_rate_definition=get_dynamic_rate_definition(
            'submissions_per_user',
            default=get_standard_ratio_rate_definition(events_per_day=46),
        ),
        constant_rate_definition=get_dynamic_rate_definition(
            'baseline_submissions_per_project',
            default=RateDefinition(
                per_week=100,
                per_day=50,
                per_hour=30,
                per_minute=10,
                per_second=1,
            ),
        ),
    ).get_rate_limits(domain)
    def test_get_dynamic_rate_definition(self):
        self.addCleanup(
            lambda: DynamicRateDefinition.objects.get(key='test').delete())

        # On the first call, the return value is the default given
        self.assertEqual(
            get_dynamic_rate_definition(
                'test',
                default=get_standard_ratio_rate_definition(events_per_day=50)),
            get_standard_ratio_rate_definition(events_per_day=50))
        # once it's created changing the default doesn't affect the return value
        self.assertEqual(
            get_dynamic_rate_definition(
                'test',
                default=get_standard_ratio_rate_definition(
                    events_per_day=1000)),
            get_standard_ratio_rate_definition(events_per_day=50))
        # The following lines simulates editing through the Django Admin
        dynamic_rate_definition = DynamicRateDefinition.objects.get(key='test')
        dynamic_rate_definition.per_week = 64
        dynamic_rate_definition.per_day = 32
        dynamic_rate_definition.per_hour = 16
        dynamic_rate_definition.per_minute = 8
        dynamic_rate_definition.per_second = 4
        dynamic_rate_definition.save()
        # After editing, the return value is the newly saved value
        # (and the default doesn't matter)
        self.assertEqual(
            get_dynamic_rate_definition(
                'test',
                default=get_standard_ratio_rate_definition(events_per_day=50)),
            rate_definition_from_db_object(dynamic_rate_definition))
        # Deleting the db object makes it take on the given default value again
        dynamic_rate_definition.delete()
        self.assertEqual(
            get_dynamic_rate_definition(
                'test',
                default=get_standard_ratio_rate_definition(events_per_day=95)),
            get_standard_ratio_rate_definition(events_per_day=95))
Exemplo n.º 4
0
from corehq.project_limits.rate_limiter import (
    PerUserRateDefinition,
    RateDefinition,
    RateLimiter,
)
from corehq.project_limits.shortcuts import get_standard_ratio_rate_definition
from corehq.toggles import RATE_LIMIT_RESTORES, NAMESPACE_DOMAIN, BLOCK_RESTORES
from corehq.util.decorators import run_only_when, silence_and_report_error
from corehq.util.metrics import metrics_counter

RESTORES_PER_DAY = 3

restore_rate_limiter = RateLimiter(
    feature_key='restores',
    get_rate_limits=PerUserRateDefinition(
        per_user_rate_definition=get_standard_ratio_rate_definition(
            events_per_day=RESTORES_PER_DAY),
        constant_rate_definition=RateDefinition(
            per_week=50,
            per_day=25,
            per_hour=15,
            per_minute=5,
            per_second=1,
        ),
    ).get_rate_limits)

SHOULD_RATE_LIMIT_RESTORES = not settings.ENTERPRISE_MODE and not settings.UNIT_TESTING


@run_only_when(SHOULD_RATE_LIMIT_RESTORES)
@silence_and_report_error("Exception raised in the restore rate limiter",
                          'commcare.restores.rate_limiter_errors')
Exemplo n.º 5
0
#   RateDefinition(
#       per_week=115,
#       per_day=23,
#       per_hour=3,
#       per_minute=0.07,
#       per_second=0.005,
#   ) == get_standard_ratio_rate_definition(events_per_day=23)
# If we as a team end up regretting this decision, we'll have to reset expectations
# with the Dimagi NDoH team.

SUBMISSIONS_PER_DAY = 46

submission_rate_limiter = RateLimiter(
    feature_key='submissions',
    get_rate_limits=PerUserRateDefinition(
        per_user_rate_definition=get_standard_ratio_rate_definition(
            events_per_day=SUBMISSIONS_PER_DAY),
        constant_rate_definition=RateDefinition(
            per_week=100,
            per_day=50,
            per_hour=30,
            per_minute=10,
            per_second=1,
        ),
    ).get_rate_limits
)

global_submission_rate_limiter = RateLimiter(
    feature_key='global_submissions',
    get_rate_limits=lambda: get_dynamic_rate_definition(
        'global_submissions',
        default=RateDefinition(