diff --git a/datadog_checks_base/datadog_checks/base/data/agent_requirements.in b/datadog_checks_base/datadog_checks/base/data/agent_requirements.in index a0701153d86fa..8a42f1c144b4a 100644 --- a/datadog_checks_base/datadog_checks/base/data/agent_requirements.in +++ b/datadog_checks_base/datadog_checks/base/data/agent_requirements.in @@ -31,6 +31,7 @@ lxml==4.4.1 lz4==2.2.1 meld3==1.0.2 openstacksdk==0.24.0 +orjson==2.6.1; python_version > '3.0' paramiko==2.6.0 ply==3.10 prometheus-client==0.3.0 diff --git a/datadog_checks_base/datadog_checks/base/utils/serialization.py b/datadog_checks_base/datadog_checks/base/utils/serialization.py new file mode 100644 index 0000000000000..a11f68ce27718 --- /dev/null +++ b/datadog_checks_base/datadog_checks/base/utils/serialization.py @@ -0,0 +1,10 @@ +# (C) Datadog, Inc. 2020-present +# All rights reserved +# Licensed under a 3-clause BSD style license (see LICENSE) +try: + import orjson as json +except ImportError: + import json + + +__all__ = ['json'] diff --git a/datadog_checks_base/requirements.in b/datadog_checks_base/requirements.in index 2f34be511c547..c497b42f7de81 100644 --- a/datadog_checks_base/requirements.in +++ b/datadog_checks_base/requirements.in @@ -6,6 +6,7 @@ ddtrace==0.32.2 enum34==1.1.6; python_version < '3.0' ipaddress==1.0.22; python_version < '3.0' kubernetes==8.0.1 +orjson==2.6.1; python_version > '3.0' prometheus-client==0.3.0 protobuf==3.7.0 pysocks==1.7.0 diff --git a/twistlock/datadog_checks/twistlock/twistlock.py b/twistlock/datadog_checks/twistlock/twistlock.py index 5c275f1532fa1..9d06f6879489b 100644 --- a/twistlock/datadog_checks/twistlock/twistlock.py +++ b/twistlock/datadog_checks/twistlock/twistlock.py @@ -10,6 +10,7 @@ from six import iteritems from datadog_checks.base import AgentCheck +from datadog_checks.base.utils.serialization import json from .config import Config from .utils import normalize_api_data_inplace @@ -322,7 +323,7 @@ def _retrieve_json(self, path): try: # it's possible to get a null response from the server # {} is a bit easier to deal with - j = response.json() or {} + j = json.loads(response.content) or {} if 'err' in j: err_msg = "Error in response: {}".format(j.get("err")) self.log.error(err_msg) diff --git a/twistlock/requirements.in b/twistlock/requirements.in index 5901fc4b34766..777e35db79a1a 100644 --- a/twistlock/requirements.in +++ b/twistlock/requirements.in @@ -1 +1 @@ -python-dateutil==2.8.0 \ No newline at end of file +python-dateutil==2.8.0 diff --git a/twistlock/tests/test_twistlock.py b/twistlock/tests/test_twistlock.py index 8638795f8c918..d20a9da99baee 100644 --- a/twistlock/tests/test_twistlock.py +++ b/twistlock/tests/test_twistlock.py @@ -8,6 +8,7 @@ import mock import pytest +from datadog_checks.base import ensure_bytes from datadog_checks.dev import get_here from datadog_checks.twistlock import TwistlockCheck @@ -47,6 +48,10 @@ def __init__(self, j): self._json = j self.status_code = 200 + @property + def content(self): + return ensure_bytes(self._json) + def json(self): return json.loads(self._json)