From f52dbf5b18ffac63c8cea777684b60bc8059ecde Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 20 Mar 2023 15:13:47 +0200 Subject: [PATCH 1/2] post-call-response return error when api is invalid --- signalfx/ingest.py | 17 ++++++++++------- tests/test_data_reporting.py | 13 ++++++++++--- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/signalfx/ingest.py b/signalfx/ingest.py index 08f32ed..9411939 100644 --- a/signalfx/ingest.py +++ b/signalfx/ingest.py @@ -6,7 +6,7 @@ import logging import pprint import requests -from requests.exceptions import ConnectionError +from requests.exceptions import ConnectionError, HTTPError import six from six.moves import queue import threading @@ -57,6 +57,7 @@ def __init__(self, token, endpoint=DEFAULT_INGEST_ENDPOINT, self._compress = compress self._extra_dimensions = {} + self._response = None self._queue = queue.Queue() self._thread_running = False @@ -183,7 +184,7 @@ def send_event(self, event_type, category=None, dimensions=None, self._add_extra_dimensions(data) return self._send_event(event_data=data, url='{0}/{1}'.format( self._endpoint, self._INGEST_ENDPOINT_EVENT_SUFFIX), - session=self._session) + session=self._session) def _send_event(self, event_data=None, url=None, session=None): raise NotImplementedError('Subclasses should implement this!') @@ -272,18 +273,20 @@ def _post(self, data, url, session=None, timeout=None): uncompressed_bytes, len(data)) try: - response = session.post(url, data=data, timeout=timeout) + self._response = session.post(url, data=data, timeout=timeout) except ConnectionError: if session is self._session: _logger.debug('Connection error attempting reconnect') self._reconnect() session = self._session - response = session.post(url, data=data, timeout=timeout) + self._response = session.post(url, data=data, timeout=timeout) else: raise - _logger.debug('Sending to SignalFx %s (%d %s)', - 'succeeded' if response.ok else 'failed', - response.status_code, response.text) + try: + self._response.raise_for_status() + except HTTPError as e: + logging.error(e) + return False class ProtoBufSignalFxIngestClient(_BaseSignalFxIngestClient): diff --git a/tests/test_data_reporting.py b/tests/test_data_reporting.py index bcac0ec..1018fdc 100644 --- a/tests/test_data_reporting.py +++ b/tests/test_data_reporting.py @@ -7,11 +7,18 @@ import sys import signalfx import time +import argparse +parser = argparse.ArgumentParser() +parser.add_argument("--token", choices=["valid", "invalid"], default="valid", type=str, help="Provider Name") +args = parser.parse_args() -MY_TOKEN = os.environ['SIGNALFX_API_TOKEN'] +if args.token == "invalid": + MY_TOKEN = "123-12345678-123456789" +else: + MY_TOKEN = os.environ['SIGNALFX_API_TOKEN'] sfx = signalfx.SignalFx().ingest(MY_TOKEN) -logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) +logging.basicConfig(stream=sys.stdout, level=logging.INFO) # Basic Usage sfx.send( @@ -44,7 +51,7 @@ # Sending events sfx.send_event( - event_type='deployments', + event_type='deployments_test', category='USER_DEFINED', dimensions={ 'host': 'myhost', From 29c7bfecf8b3ddfee3936ae0c2652c701e4f8243 Mon Sep 17 00:00:00 2001 From: Roman Date: Tue, 21 Mar 2023 10:26:38 +0200 Subject: [PATCH 2/2] post-call-response return error when api is invalid --- tests/test_data_reporting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_data_reporting.py b/tests/test_data_reporting.py index 1018fdc..4f31c57 100644 --- a/tests/test_data_reporting.py +++ b/tests/test_data_reporting.py @@ -18,7 +18,7 @@ else: MY_TOKEN = os.environ['SIGNALFX_API_TOKEN'] sfx = signalfx.SignalFx().ingest(MY_TOKEN) -logging.basicConfig(stream=sys.stdout, level=logging.INFO) +logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) # Basic Usage sfx.send(