Create forums config model for adjusting connection timeouts.
This commit is contained in:
9
common/djangoapps/django_comment_common/admin.py
Normal file
9
common/djangoapps/django_comment_common/admin.py
Normal 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)
|
||||
@@ -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,
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user