@@ -27,7 +27,7 @@ class HttpClient(object):
2727 AUTH_URL = 'https://auth.split.io/api'
2828 TELEMETRY_URL = 'https://telemetry.split.io/api'
2929
30- def __init__ (self , timeout = None , sdk_url = None , events_url = None , auth_url = None , telemetry_url = None ):
30+ def __init__ (self , timeout = None , sdk_url = None , events_url = None , auth_url = None , telemetry_url = None , telemetry_runtime_producer = None ):
3131 """
3232 Class constructor.
3333
@@ -49,6 +49,7 @@ def __init__(self, timeout=None, sdk_url=None, events_url=None, auth_url=None, t
4949 'auth' : auth_url if auth_url is not None else self .AUTH_URL ,
5050 'telemetry' : telemetry_url if telemetry_url is not None else self .TELEMETRY_URL ,
5151 }
52+ self ._telemetry_runtime_producer = telemetry_runtime_producer
5253
5354 def _build_url (self , server , path ):
5455 """
@@ -77,7 +78,7 @@ def _build_basic_headers(apikey):
7778 'Authorization' : "Bearer %s" % apikey
7879 }
7980
80- def get (self , server , path , apikey , query = None , extra_headers = None ): # pylint: disable=too-many-arguments
81+ def get (self , server , path , apikey , query = None , extra_headers = None , metric_name = None ): # pylint: disable=too-many-arguments
8182 """
8283 Issue a get request.
8384
@@ -106,11 +107,22 @@ def get(self, server, path, apikey, query=None, extra_headers=None): # pylint:
106107 headers = headers ,
107108 timeout = self ._timeout
108109 )
109- return HttpResponse (response .status_code , response .text )
110+ elapsed = response .elapsed .total_seconds ()
111+ response = HttpResponse (response .status_code , response .text )
112+ self ._telemetry_runtime_producer .record_sync_latency (metric_name , elapsed )
113+ if not 200 <= response .status_code < 300 :
114+ self ._telemetry_runtime_producer .record_sync_error (metric_name , response .status_code )
115+ if metric_name == 'token' :
116+ self ._telemetry_runtime_producer .record_auth_rejections ()
117+ else :
118+ self ._telemetry_runtime_producer .record_suceessful_sync (metric_name , round (1000 * elapsed ))
119+ if metric_name == 'token' :
120+ self ._telemetry_runtime_producer .record_token_refreshes ()
121+ return response
110122 except Exception as exc : # pylint: disable=broad-except
111123 raise HttpClientException ('requests library is throwing exceptions' ) from exc
112124
113- def post (self , server , path , apikey , body , query = None , extra_headers = None ): # pylint: disable=too-many-arguments
125+ def post (self , server , path , apikey , body , query = None , extra_headers = None , metric_name = None ): # pylint: disable=too-many-arguments
114126 """
115127 Issue a POST request.
116128
@@ -143,6 +155,13 @@ def post(self, server, path, apikey, body, query=None, extra_headers=None): # p
143155 headers = headers ,
144156 timeout = self ._timeout
145157 )
146- return HttpResponse (response .status_code , response .text )
158+ elapsed = response .elapsed .total_seconds ()
159+ response = HttpResponse (response .status_code , response .text )
160+ self ._telemetry_runtime_producer .record_sync_latency (metric_name , elapsed )
161+ if not 200 <= response .status_code < 300 :
162+ self ._telemetry_runtime_producer .record_sync_error (metric_name , response .status_code )
163+ else :
164+ self ._telemetry_runtime_producer .record_suceessful_sync (metric_name , round (1000 * elapsed ))
165+ return response
147166 except Exception as exc : # pylint: disable=broad-except
148167 raise HttpClientException ('requests library is throwing exceptions' ) from exc
0 commit comments