Commit 255267d4 by David Ormsbee

Create forums config model for adjusting connection timeouts.

parent 32b8391c
"""
Admin for managing the connection to the Forums backend service.
"""
from django.contrib import admin
from .models import ForumsConfig
admin.site.register(ForumsConfig)
# -*- 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,
},
),
]
......@@ -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)
......@@ -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
......
......@@ -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(
......
......@@ -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))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment