Skip to content
Merged
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
6 changes: 4 additions & 2 deletions GeoHealthCheck/probe.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from init import App
from plugin import Plugin
from result import ProbeResult
from util import create_requests_retry_session

LOGGER = logging.getLogger(__name__)

Expand Down Expand Up @@ -80,6 +81,7 @@ class Probe(Plugin):
def __init__(self):
Plugin.__init__(self)
self._resource = None
self._session = create_requests_retry_session()

#
# Lifecycle : optionally expand params from Resource metadata
Expand Down Expand Up @@ -284,14 +286,14 @@ def perform_request(self):

def perform_get_request(self, url):
""" Perform actual HTTP GET request to service"""
return requests.get(
return self._session.get(
url,
timeout=App.get_config()['GHC_PROBE_HTTP_TIMEOUT_SECS'],
headers=self.get_request_headers())

def perform_post_request(self, url_base, request_string):
""" Perform actual HTTP POST request to service"""
return requests.post(
return self._session.post(
url_base,
timeout=App.get_config()['GHC_PROBE_HTTP_TIMEOUT_SECS'],
data=request_string,
Expand Down
26 changes: 26 additions & 0 deletions GeoHealthCheck/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
import os
import smtplib
import base64
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
from urllib.request import urlopen
from urllib.parse import urlparse
from gettext import translation
Expand Down Expand Up @@ -257,3 +260,26 @@ def decode(key: str, string: str) -> str:
# d = decode('a key', e)
# print([e])
# print([d])


# https://www.peterbe.com/plog/best-practice-with-retries-with-requests
# Provides a requests Session object with requests' Retry capabilities.
# TODO: may make numbers below configurable
def create_requests_retry_session(
retries=3,
backoff_factor=0.3,
status_forcelist=(500, 502, 504),
session=None,
):
session = session or requests.Session()
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
return session
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ OWSLib==0.17.1 # update to new version when solution to OWSLIB #614 is released
openapi-spec-validator==0.2.8
Sphinx==2.2.0
sphinx-rtd-theme==0.4.3
requests>=2.20.0
requests>=2.23.0
WTForms==2.2.1
APScheduler==3.6.1
passlib==1.7.1
Expand Down