class Backend(models.Model): address = models.GenericIPAddressField(protocol='IPv4') port = models.PositiveIntegerField( default='80', validators=[MinValueValidator(1), MaxValueValidator(65535)] ) weight = models.PositiveIntegerField( default='1', choices=[(x, x) for x in range(0, 101)] ) dc = models.ForeignKey(Dc, on_delete=models.PROTECT) max_connections = models.PositiveIntegerField( default='5', choices=[(x, x) for x in range(1, 101)] ) connect_timeout = NormalizedDecimalField( default='0.30', decimal_places=2, max_digits=4, choices=generate_choices(1, 101, 100), verbose_name=u'Connect timeout (s)' ) first_byte_timeout = NormalizedDecimalField( default='5', decimal_places=2, max_digits=5, choices=generate_choices(1, 8001, 100), verbose_name=u'First byte timeout (s)' ) between_bytes_timeout = NormalizedDecimalField( default='1', decimal_places=2, max_digits=5, choices=generate_choices(1, 8001, 100), verbose_name=u'Between bytes timeout (s)' ) director = models.ForeignKey( Director, related_name='backends', on_delete=models.PROTECT ) enabled = models.BooleanField(default=True) tags = TaggableManager(blank=True) inherit_time_profile = models.BooleanField(default=False) def __unicode__(self): return make_backend_name(self) class Meta: unique_together = (('address', 'port', 'director'),)
class Probe(models.Model): name = models.CharField(max_length=30, validators=[name_validator], unique=True) url = models.CharField(max_length=50) expected_response = models.PositiveIntegerField(default='200') interval = models.PositiveIntegerField(default='3', choices=[(x, x) for x in range(1, 301)], verbose_name='Interval (s)') timeout = NormalizedDecimalField(default='1', decimal_places=1, max_digits=4, choices=generate_choices(1, 51, 10, 1), verbose_name='Timeout (s)') window = models.PositiveIntegerField(default='5', choices=[(x, x) for x in range(1, 6)], verbose_name='Window (s)') threshold = models.PositiveIntegerField(default='3', choices=[(x, x) for x in range(1, 301)]) start_as_healthy = models.BooleanField( 'Start backend as healthy', default=False, help_text= '<i>New backend is starting with healthy status, there is no need to initial health check pass</i>' ) def __str__(self): return "%s (%s)" % (self.name, self.url)
class Probe(models.Model): name = models.CharField(max_length=30, validators=[vcl_name_validator], unique=True) url = models.CharField(max_length=50) expected_response = models.PositiveIntegerField(default='200') interval = models.PositiveIntegerField( default='3', choices=[(x, x) for x in range(1, 301)], verbose_name=u'Interval (s)' ) timeout = NormalizedDecimalField( default='1', decimal_places=1, max_digits=4, choices=generate_choices(1, 51, 10, 1), verbose_name=u'Timeout (s)' ) window = models.PositiveIntegerField( default='5', choices=[(x, x) for x in range(1, 6)], verbose_name=u'Window (s)' ) threshold = models.PositiveIntegerField( default='3', choices=[(x, x) for x in range(1, 301)] ) def __unicode__(self): return "%s (%s)" % (self.name, self.url)
def test_generate_choices(): div = Decimal(5) expected_choices = [ (Decimal(0 / div), '0.00'), (Decimal(1 / div), '0.20'), (Decimal(2 / div), '0.40'), (Decimal(3 / div), '0.60'), (Decimal(4 / div), '0.80'), (Decimal(5 / div), '1.00') ] assert_equals(expected_choices, generate_choices(0, 6, 5))