Skip to content

Commit f9aca11

Browse files
authored
Replace builtin json with faster ujson package. (#469)
* Replace builtin json with faster ujson package. * Do not escape forward slashes. * Update 3rd party licenses.
1 parent 0b85fc9 commit f9aca11

File tree

9 files changed

+19
-12
lines changed

9 files changed

+19
-12
lines changed

LICENSE-3rdparty.csv

+2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ datadog,github.com/DataDog/datadogpy,BSD-3-Clause,"Copyright (c) 2015-Present Da
33
wrapt,github.com/GrahamDumpleton/wrapt,BSD-2-Clause,"Copyright (c) 2013-2019, Graham Dumpleton"
44
ddtrace,github.com/DataDog/dd-trace-py,BSD-3-Clause,"Copyright (c) 2016, Datadog <[email protected]>"
55
urllib3,github.com/urllib3/urllib3,MIT,Copyright (c) 2008-2020 Andrey Petrov and contributors.
6+
ujson,github.com/ultrajson/ultrajson,BSD-3-Clause,"Copyright (c) 2014, Electronic Arts Inc"
67
importlib_metadata,github.com/python/importlib_metadata,Apache-2.0,Copyright © Jason R. Coombs
78
boto3,github.com/boto/boto3,Apache-2.0,"Copyright 2013-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved."
89
typing_extensions,github.com/python/typing_extensions,PSF-2.0,"Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved"
910
requests,github.com/psf/requests,Apache-2.0,"Copyright 2018 Kenneth Reitz"
1011
pytest,github.com/pytest-dev/pytest,MIT,Copyright (c) 2004 Holger Krekel and others
12+
pytest-benchmark,github.com/ionelmc/pytest-benchmark,BSD-2-Clause,"Copyright (c) 2014-2023, Ionel Cristian Mărieș. All rights reserved."
1113
flake8,gitlab.com/pycqa/flake8,MIT,"Copyright (C) 2011-2013 Tarek Ziade <[email protected]>. Copyright (C) 2012-2016 Ian Cordasco <[email protected]>."

datadog_lambda/metric.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
# Copyright 2019 Datadog, Inc.
55

66
import os
7-
import json
87
import time
98
import logging
9+
import ujson as json
1010

1111
from datadog_lambda.extension import should_use_extension
1212
from datadog_lambda.tags import get_enhanced_metrics_tags, dd_lambda_layer_tag
@@ -85,7 +85,8 @@ def write_metric_point_to_stdout(metric_name, value, timestamp=None, tags=[]):
8585
"v": value,
8686
"e": timestamp or int(time.time()),
8787
"t": tags,
88-
}
88+
},
89+
escape_forward_slashes=False,
8990
)
9091
)
9192

datadog_lambda/patch.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
# This product includes software developed at Datadog (https://www.datadoghq.com/).
44
# Copyright 2019 Datadog, Inc.
55

6-
import json
76
import os
87
import sys
98
import logging
109
import zlib
10+
import ujson as json
1111

1212
from wrapt import wrap_function_wrapper as wrap
1313
from wrapt.importer import when_imported
@@ -144,14 +144,14 @@ def _print_request_string(request):
144144
data = zlib.decompress(data)
145145
data_dict = json.loads(data)
146146
data_dict.get("series", []).sort(key=lambda series: series.get("metric"))
147-
sorted_data = json.dumps(data_dict)
147+
sorted_data = json.dumps(data_dict, escape_forward_slashes=False)
148148

149149
# Sort headers to prevent any differences in ordering
150150
headers = request.headers or {}
151151
sorted_headers = sorted(
152152
"{}:{}".format(key, value) for key, value in headers.items()
153153
)
154-
sorted_header_str = json.dumps(sorted_headers)
154+
sorted_header_str = json.dumps(sorted_headers, escape_forward_slashes=False)
155155
print(
156156
"HTTP {} {} Headers: {} Data: {}".format(
157157
method, url, sorted_header_str, sorted_data

datadog_lambda/tag_object.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
# Copyright 2021 Datadog, Inc.
55

66
from decimal import Decimal
7-
import json
87
import logging
8+
import ujson as json
99

1010
redactable_keys = ["authorization", "x-authorization", "password", "token"]
1111
max_depth = 10

datadog_lambda/tracing.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import hashlib
66
import logging
77
import os
8-
import json
98
import base64
9+
import ujson as json
1010
from datetime import datetime, timezone
1111
from typing import Optional, Dict
1212

datadog_lambda/trigger.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import base64
77
import gzip
8-
import json
8+
import ujson as json
99
from io import BytesIO, BufferedReader
1010
from enum import Enum
1111
from typing import Any

datadog_lambda/wrapper.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
import os
77
import logging
88
import traceback
9+
import ujson as json
910
from importlib import import_module
10-
import json
1111
from time import time_ns
1212

1313
from datadog_lambda.extension import should_use_extension, flush_extension
@@ -258,7 +258,9 @@ def _inject_authorizer_span_headers(self, request_id):
258258
injected_headers[Headers.Parent_Span_Finish_Time] = finish_time_ns
259259
if request_id is not None:
260260
injected_headers[Headers.Authorizing_Request_Id] = request_id
261-
datadog_data = base64.b64encode(json.dumps(injected_headers).encode()).decode()
261+
datadog_data = base64.b64encode(
262+
json.dumps(injected_headers, escape_forward_slashes=False).encode()
263+
).decode()
262264
self.response.setdefault("context", {})
263265
self.response["context"]["_datadog"] = datadog_data
264266

datadog_lambda/xray.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import os
22
import logging
3-
import json
43
import binascii
54
import time
65
import socket
6+
import ujson as json
77

88
from datadog_lambda.constants import XrayDaemon, XraySubsegment, TraceContextSource
99

@@ -102,7 +102,8 @@ def build_segment(context, key, metadata):
102102
key: metadata,
103103
}
104104
},
105-
}
105+
},
106+
escape_forward_slashes=False,
106107
)
107108
return segment
108109

pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ python = ">=3.8.0,<4"
2828
datadog = ">=0.41.0,<1.0.0"
2929
wrapt = "^1.11.2"
3030
ddtrace = ">=2.7.2"
31+
ujson = ">=5.9.0"
3132
urllib3 = [
3233
{version = "<2.0.0", python = "<3.11", optional = true},
3334
{version = "<2.1.0", python = ">=3.11", optional = true},

0 commit comments

Comments
 (0)