Create forums config model for adjusting connection timeouts.

This commit is contained in:
David Ormsbee
2016-06-16 11:52:45 -04:00
parent 32b8391c11
commit 255267d42c
6 changed files with 64 additions and 9 deletions

View File

@@ -0,0 +1,9 @@
"""
Admin for managing the connection to the Forums backend service.
"""
from django.contrib import admin
from .models import ForumsConfig
admin.site.register(ForumsConfig)

View File

@@ -0,0 +1,31 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('django_comment_common', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='ForumsConfig',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('change_date', models.DateTimeField(auto_now_add=True, verbose_name='Change date')),
('enabled', models.BooleanField(default=False, verbose_name='Enabled')),
('connection_timeout', models.FloatField(default=5.0)),
('changed_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, editable=False, to=settings.AUTH_USER_MODEL, null=True, verbose_name='Changed by')),
],
options={
'ordering': ('-change_date',),
'abstract': False,
},
),
]

View File

@@ -7,6 +7,7 @@ from django.dispatch import receiver
from django.db.models.signals import post_save
from django.utils.translation import ugettext_noop
from config_models.models import ConfigurationModel
from student.models import CourseEnrollment
from xmodule.modulestore.django import modulestore
@@ -137,3 +138,14 @@ def all_permissions_for_user_in_course(user, course_id): # pylint: disable=inva
if not permission_blacked_out(course, all_roles, permission.name)
}
return permissions
class ForumsConfig(ConfigurationModel):
"""Config for the connection to the cs_comments_service forums backend."""
# For now, just tweak the connection timeout settings. We can add more later.
connection_timeout = models.FloatField(default=5.0)
def __unicode__(self):
"""Simple representation so the admin screen looks less ugly."""
return u"ForumsConfig: timeout={}".format(self.connection_timeout)

View File

@@ -372,8 +372,8 @@ class ViewsQueryCountTestCase(UrlResetMixin, ModuleStoreTestCase, MockRequestSet
return inner
@ddt.data(
(ModuleStoreEnum.Type.mongo, 3, 4, 29),
(ModuleStoreEnum.Type.split, 3, 13, 29),
(ModuleStoreEnum.Type.mongo, 3, 4, 30),
(ModuleStoreEnum.Type.split, 3, 13, 30),
)
@ddt.unpack
@count_queries
@@ -381,8 +381,8 @@ class ViewsQueryCountTestCase(UrlResetMixin, ModuleStoreTestCase, MockRequestSet
self.create_thread_helper(mock_request)
@ddt.data(
(ModuleStoreEnum.Type.mongo, 3, 3, 23),
(ModuleStoreEnum.Type.split, 3, 10, 23),
(ModuleStoreEnum.Type.mongo, 3, 3, 24),
(ModuleStoreEnum.Type.split, 3, 10, 24),
)
@ddt.unpack
@count_queries

View File

@@ -342,11 +342,11 @@ class SingleThreadQueryCountTestCase(ModuleStoreTestCase):
@ddt.data(
# old mongo with cache
(ModuleStoreEnum.Type.mongo, 1, 6, 4, 16, 8),
(ModuleStoreEnum.Type.mongo, 50, 6, 4, 16, 8),
(ModuleStoreEnum.Type.mongo, 1, 6, 4, 18, 10),
(ModuleStoreEnum.Type.mongo, 50, 6, 4, 18, 10),
# split mongo: 3 queries, regardless of thread response size.
(ModuleStoreEnum.Type.split, 1, 3, 3, 16, 8),
(ModuleStoreEnum.Type.split, 50, 3, 3, 16, 8),
(ModuleStoreEnum.Type.split, 1, 3, 3, 18, 10),
(ModuleStoreEnum.Type.split, 50, 3, 3, 18, 10),
)
@ddt.unpack
def test_number_of_mongo_queries(

View File

@@ -53,6 +53,8 @@ def request_timer(request_id, method, url, tags=None):
def perform_request(method, url, data_or_params=None, raw=False,
metric_action=None, metric_tags=None, paged_results=False):
# To avoid dependency conflict
from django_comment_common.models import ForumsConfig
if metric_tags is None:
metric_tags = []
@@ -77,13 +79,14 @@ def perform_request(method, url, data_or_params=None, raw=False,
data = None
params = merge_dict(data_or_params, request_id_dict)
with request_timer(request_id, method, url, metric_tags):
config = ForumsConfig.current()
response = requests.request(
method,
url,
data=data,
params=params,
headers=headers,
timeout=5
timeout=config.connection_timeout
)
metric_tags.append(u'status_code:{}'.format(response.status_code))