Skip to content

Commit d83a228

Browse files
committed
Fixup: review of byte/cost calc for CT
1 parent fa3076b commit d83a228

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

newrelic/common/streaming_utils.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,31 @@ def get_deep_size(obj, seen=None):
3030
"""Recursively calculates the size of an object including nested lists and dicts."""
3131
if seen is None:
3232
seen = set()
33+
size = -8*3 # Subtract 8 for each of the 3 attribute lists as those don't count.
34+
else:
35+
size = 0
3336

3437
# Avoid recursion for already seen objects (handle circular references)
3538
obj_id = id(obj)
3639
if obj_id in seen:
3740
return 0
3841
seen.add(obj_id)
3942

40-
size = 0
41-
if isinstance(obj, dict):
43+
if isinstance(obj, str):
44+
size += len(obj)
45+
return size
46+
elif isinstance(obj, float) or isinstance(obj, int):
47+
size += 8
48+
return size
49+
elif isinstance(obj, bool):
50+
size += 1
51+
return size
52+
elif isinstance(obj, dict):
4253
size += sum(get_deep_size(k, seen) + get_deep_size(v, seen) for k, v in obj.items())
4354
elif isinstance(obj, (list, tuple, set, frozenset)):
44-
size += sum(get_deep_size(i, seen) for i in obj)
55+
size += 8 + sum(get_deep_size(i, seen) for i in obj)
4556
else:
46-
size = sys.getsizeof(obj)
57+
size += 8
4758

4859
return size
4960

@@ -52,24 +63,26 @@ def get_deep_size_protobuf(obj):
5263
"""Recursively calculates the size of an object including nested lists and dicts."""
5364
size = 0
5465
if hasattr(obj, "string_value"):
55-
size += sys.getsizeof(obj.string_value)
66+
size += len(obj.string_value)
5667
return size
5768
elif hasattr(obj, "double_value"):
58-
size += sys.getsizeof(obj.double_value)
69+
size += 8
5970
return size
6071
elif hasattr(obj, "int_value"):
61-
size += sys.getsizeof(obj.int_value)
72+
size += 8
6273
return size
6374
elif hasattr(obj, "bool_value"):
64-
size += sys.getsizeof(obj.bool_value)
75+
size += 1
6576
return size
6677

6778
if hasattr(obj, "agent_attributes"):
68-
size += sum(sys.getsizeof(k) + get_deep_size_protobuf(v) for k, v in obj.agent_attributes.items())
79+
size += sum(len(k) + get_deep_size_protobuf(v) for k, v in obj.agent_attributes.items())
6980
if hasattr(obj, "user_attributes"):
70-
size += sum(sys.getsizeof(k) + get_deep_size_protobuf(v) for k, v in obj.user_attributes.items())
81+
size += sum(len(k) + get_deep_size_protobuf(v) for k, v in obj.user_attributes.items())
7182
if hasattr(obj, "intrinsics"):
72-
size += sum(sys.getsizeof(k) + get_deep_size_protobuf(v) for k, v in obj.intrinsics.items())
83+
size += sum(len(k) + get_deep_size_protobuf(v) for k, v in obj.intrinsics.items())
84+
else:
85+
size += 8
7386

7487
return size
7588

0 commit comments

Comments
 (0)