core: add DebugRule which takes random amount of time to process
This commit is contained in:
parent
af3df16b90
commit
60b1c1b493
|
@ -2,8 +2,9 @@
|
|||
|
||||
from django import forms
|
||||
|
||||
from passbook.core.models import FieldMatcherRule, WebhookRule
|
||||
from passbook.core.models import DebugRule, FieldMatcherRule, WebhookRule
|
||||
|
||||
GENERAL_FIELDS = ['name', 'action', 'negate', 'order', ]
|
||||
|
||||
class FieldMatcherRuleForm(forms.ModelForm):
|
||||
"""FieldMatcherRule Form"""
|
||||
|
@ -11,8 +12,7 @@ class FieldMatcherRuleForm(forms.ModelForm):
|
|||
class Meta:
|
||||
|
||||
model = FieldMatcherRule
|
||||
fields = ['name', 'action', 'negate', 'order',
|
||||
'user_field', 'match_action', 'value', ]
|
||||
fields = GENERAL_FIELDS + ['user_field', 'match_action', 'value', ]
|
||||
widgets = {
|
||||
'name': forms.TextInput(),
|
||||
'user_field': forms.TextInput(),
|
||||
|
@ -26,11 +26,24 @@ class WebhookRuleForm(forms.ModelForm):
|
|||
class Meta:
|
||||
|
||||
model = WebhookRule
|
||||
fields = ['url', 'method', 'json_body', 'json_headers',
|
||||
'result_jsonpath', 'result_json_value', ]
|
||||
fields = GENERAL_FIELDS + ['url', 'method', 'json_body', 'json_headers',
|
||||
'result_jsonpath', 'result_json_value', ]
|
||||
widgets = {
|
||||
'name': forms.TextInput(),
|
||||
'json_body': forms.TextInput(),
|
||||
'json_headers': forms.TextInput(),
|
||||
'result_jsonpath': forms.TextInput(),
|
||||
'result_json_value': forms.TextInput(),
|
||||
}
|
||||
|
||||
|
||||
class DebugRuleForm(forms.ModelForm):
|
||||
"""DebugRuleForm Form"""
|
||||
|
||||
class Meta:
|
||||
|
||||
model = DebugRule
|
||||
fields = GENERAL_FIELDS + ['result', 'wait_min', 'wait_max']
|
||||
widgets = {
|
||||
'name': forms.TextInput(),
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
# Generated by Django 2.1.4 on 2018-12-09 18:58
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('passbook_core', '0006_user_uuid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DebugRule',
|
||||
fields=[
|
||||
('rule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='passbook_core.Rule')),
|
||||
('result', models.BooleanField(default=False)),
|
||||
('wait_min', models.IntegerField(default=5)),
|
||||
('wait_max', models.IntegerField(default=30)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Debug Rule',
|
||||
'verbose_name_plural': 'Debug Rules',
|
||||
},
|
||||
bases=('passbook_core.rule',),
|
||||
),
|
||||
]
|
|
@ -1,6 +1,8 @@
|
|||
"""passbook core models"""
|
||||
import re
|
||||
from logging import getLogger
|
||||
from random import randrange
|
||||
from time import sleep
|
||||
from uuid import uuid4
|
||||
|
||||
import reversion
|
||||
|
@ -213,3 +215,26 @@ class WebhookRule(Rule):
|
|||
|
||||
verbose_name = _('Webhook Rule')
|
||||
verbose_name_plural = _('Webhook Rules')
|
||||
|
||||
@reversion.register()
|
||||
class DebugRule(Rule):
|
||||
"""Rule used for debugging the RuleEngine. Returns a fixed result,
|
||||
but takes a random time to process."""
|
||||
|
||||
result = models.BooleanField(default=False)
|
||||
wait_min = models.IntegerField(default=5)
|
||||
wait_max = models.IntegerField(default=30)
|
||||
|
||||
form = 'passbook.core.forms.rules.DebugRuleForm'
|
||||
|
||||
def passes(self, user: User):
|
||||
"""Wait random time then return result"""
|
||||
wait = randrange(self.wait_min, self.wait_max)
|
||||
LOGGER.debug("Rule '%s' waiting for %ds", self.name, wait)
|
||||
sleep(wait)
|
||||
return self.result
|
||||
|
||||
class Meta:
|
||||
|
||||
verbose_name = _('Debug Rule')
|
||||
verbose_name_plural = _('Debug Rules')
|
||||
|
|
Reference in New Issue