Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #3892

Merged
merged 2 commits into from
Feb 15, 2024
Merged

Dev #3892

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion seqr/utils/search/hail_search_utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from collections import defaultdict
from django.db.models import F, Min, Count
from urllib3.connectionpool import connection_from_url

import requests
from reference_data.models import Omim, GeneConstraint, GENOME_VERSION_LOOKUP
Expand All @@ -24,7 +25,9 @@ def _execute_search(search_body, user, path='search', exception_map=None):


def ping_hail_backend():
requests.get(_hail_backend_url('status'), timeout=5).raise_for_status()
response = connection_from_url(_hail_backend_url('status')).urlopen('HEAD', '/status', timeout=5, retries=3)
if response.status >= 400:
raise requests.HTTPError(f'{response.status}: {response.reason or response.text}', response=response)


def get_hail_variants(samples, search, user, previous_search_results, genome_version, sort=None, page=1, num_results=100,
Expand Down
18 changes: 6 additions & 12 deletions seqr/views/status_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from django.urls.base import reverse
import mock
from requests import HTTPError
import responses

from seqr.views.status import status_view
from seqr.utils.search.elasticsearch.es_utils_tests import urllib3_responses
Expand All @@ -22,31 +21,28 @@ def _test_status_error(self, url, mock_logger):
mock.call(f'Search backend connection error: {self.SEARCH_BACKEND_ERROR}'),
]
if self.HAS_KIBANA:
calls.append(mock.call('Search Admin connection error: Connection refused: HEAD /status'))
calls.append(mock.call('Search Admin connection error: Kibana Error 400: Bad Request'))
mock_logger.error.assert_has_calls(calls)
mock_logger.reset_mock()

@mock.patch('seqr.views.status.redis.StrictRedis')
@mock.patch('seqr.views.status.connections')
@mock.patch('seqr.views.status.logger')
@urllib3_responses.activate
@responses.activate
def test_status(self, mock_logger, mock_db_connections, mock_redis):
url = reverse(status_view)

mock_db_connections.__getitem__.return_value.cursor.side_effect = Exception('No connection')
mock_redis.return_value.ping.side_effect = HTTPError('Bad connection')
responses.add(responses.GET, 'http://test-hail:5000/status', status=400)
urllib3_responses.add(urllib3_responses.HEAD, '/status', status=400)

self._test_status_error(url, mock_logger)

mock_db_connections.__getitem__.return_value.cursor.side_effect = None
mock_redis.return_value.ping.side_effect = None
responses.reset()
urllib3_responses.reset()
responses.add(responses.GET, 'http://test-hail:5000/status', status=200)
urllib3_responses.add(urllib3_responses.HEAD, '/', status=200)
urllib3_responses.add(urllib3_responses.HEAD, '/status', status=500)
urllib3_responses.add(urllib3_responses.HEAD, '/status', status=500 if self.HAS_KIBANA else 200)

response = self.client.get(url)
self.assertEqual(response.status_code, 200)
Expand Down Expand Up @@ -79,13 +75,12 @@ def test_status(self, *args):
super(ElasticsearchStatusTest, self).test_status(*args)

def _assert_expected_requests(self):
self.assertEqual(len(responses.calls), 0)
self.assertListEqual([call.request.url for call in urllib3_responses.calls], ['/', '/status', '/', '/status'])


class HailSearchStatusTest(TestCase, StatusTest):

SEARCH_BACKEND_ERROR = '400 Client Error: Bad Request for url: http://test-hail:5000/status'
SEARCH_BACKEND_ERROR = '400: Bad Request'
HAS_KIBANA = False

@mock.patch('seqr.utils.search.elasticsearch.es_utils.ELASTICSEARCH_SERVICE_HOSTNAME', '')
Expand All @@ -94,6 +89,5 @@ def test_status(self, *args):
super(HailSearchStatusTest, self).test_status(*args)

def _assert_expected_requests(self):
self.assertEqual(len(urllib3_responses.calls), 0)
self.assertEqual(len(responses.calls), 1)
self.assertEqual(responses.calls[0].request.url, 'http://test-hail:5000/status')
self.assertEqual(len(urllib3_responses.calls), 1)
self.assertEqual(urllib3_responses.calls[0].request.url, '/status')
Loading