Skip to content

Commit

Permalink
Log message for invalid queries (#9797)
Browse files Browse the repository at this point in the history
* skip error query when unable to run query

* Add test

* Catch ConnectionError

* Fix style

* explicit connectionError import

* Fix style
  • Loading branch information
ChristineTChen authored Jul 29, 2021
1 parent 6abaa8c commit 19f3853
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 8 deletions.
23 changes: 17 additions & 6 deletions ibm_db2/datadog_checks/ibm_db2/ibm_db2.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from time import time as timestamp

import ibm_db
from requests import ConnectionError

from datadog_checks.base import AgentCheck, is_affirmative
from datadog_checks.base.utils.containers import iter_unique
Expand Down Expand Up @@ -60,14 +61,24 @@ def check(self, instance):

self._conn = connection

self.query_instance()
self.query_database()
self.query_buffer_pool()
self.query_table_space()
self.query_transaction_log()
self.query_custom()
self.collect_metadata()

for query_method in (
self.query_instance,
self.query_database,
self.query_buffer_pool,
self.query_table_space,
self.query_transaction_log,
self.query_custom,
):
try:
query_method()
except ConnectionError:
raise
except Exception as e:
self.log.warning('Encountered error running `%s`: %s', query_method.__name__, str(e))
continue

def collect_metadata(self):
try:
raw_version = get_version(self._conn)
Expand Down
25 changes: 23 additions & 2 deletions ibm_db2/tests/test_unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# Licensed under a 3-clause BSD style license (see LICENSE)
import mock
import pytest
from requests import ConnectionError

from datadog_checks.ibm_db2 import IbmDb2Check
from datadog_checks.ibm_db2.utils import scrub_connection_string
Expand Down Expand Up @@ -36,16 +37,36 @@ def test_retry_connection(aggregator, instance):
exception_msg = "[IBM][CLI Driver] CLI0106E Connection is closed. SQLSTATE=08003"

def mock_exception(*args, **kwargs):
raise Exception(exception_msg)
raise ConnectionError(exception_msg)

with mock.patch('ibm_db.exec_immediate', side_effect=mock_exception):

with pytest.raises(Exception, match='CLI0106E Connection is closed. SQLSTATE=08003'):
with pytest.raises(ConnectionError, match='CLI0106E Connection is closed. SQLSTATE=08003'):
ibmdb2.check(instance)
# new connection made
assert ibmdb2._conn != conn1


def test_query_function_error(aggregator, instance):
exception_msg = (
'[IBM][CLI Driver][DB2/NT64] SQL0440N No authorized routine named "MON_GET_INSTANCE" of type '
'"FUNCTION" having compatible arguments was found. SQLSTATE=42884'
)

def query_instance(*args, **kwargs):
raise Exception(exception_msg)

ibmdb2 = IbmDb2Check('ibm_db2', {}, [instance])
ibmdb2.log = mock.MagicMock()
ibmdb2._conn = mock.MagicMock()
ibmdb2.get_connection = mock.MagicMock()
ibmdb2.query_instance = query_instance

with pytest.raises(Exception):
ibmdb2.query_instance()
ibmdb2.log.warning.assert_called_with('Encountered error running `%s`: %s', 'query_instance', exception_msg)


def test_parse_version(instance):
raw_version = '11.01.0202'
check = IbmDb2Check('ibm_db2', {}, [instance])
Expand Down

0 comments on commit 19f3853

Please sign in to comment.