Skip to content

AttributeError: 'DogStatsd' object has no attribute '_transport' #903

@nicwolff

Description

@nicwolff

Describe the bug
0.52.0 includes this commit

3e7f93d Ryan  Add UDS SOCK_STREAM support to the DogStatsD client (#869)   2025-05-01 (3 months ago)
diff --git a/datadog/dogstatsd/base.py b/datadog/dogstatsd/base.py
index 634e7ef..4c64e30 100644
--- a/datadog/dogstatsd/base.py
+++ b/datadog/dogstatsd/base.py
@@ -15,2 +15,3 @@ import socket
 import errno
+import struct
 import threading
@@ -51,2 +52,7 @@ DEFAULT_PORT = 8125
 
+# Socket prefixes
+UNIX_ADDRESS_SCHEME = "unix://"
+UNIX_ADDRESS_DATAGRAM_SCHEME = "unixgram://"
+UNIX_ADDRESS_STREAM_SCHEME = "unixstream://"
+
 # Buffering-related values (in seconds)
@@ -490,8 +496,43 @@ class DogStatsd(object):
             self._socket_path = path
-            if path is None:
-                self._transport = "udp"
-                self._max_payload_size = self._max_buffer_len or UDP_OPTIMAL_PAYLOAD_LENGTH
-            else:
-                self._transport = "uds"
-                self._max_payload_size = self._max_buffer_len or UDS_OPTIMAL_PAYLOAD_LENGTH

which causes errors like

director/stats.py:34: in wrapper
    statsd.increment(metric, tags=tags)
/usr/local/lib/python3.12/site-packages/datadog/dogstatsd/base.py:1025: in increment
    self._report(metric, "c", value, tags, sample_rate, cardinality=cardinality)
/usr/local/lib/python3.12/site-packages/datadog/dogstatsd/base.py:1255: in _report
    self._send(payload)
/usr/local/lib/python3.12/site-packages/datadog/dogstatsd/base.py:1326: in _send_to_server
    self._xmit_packet_with_telemetry(packet + '\n')
/usr/local/lib/python3.12/site-packages/datadog/dogstatsd/base.py:1332: in _xmit_packet_with_telemetry
    telemetry = self._flush_telemetry()
                ^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <datadog.dogstatsd.base.DogStatsd object at 0xffff9382be60>

    def _flush_telemetry(self):
        tags = self._client_tags[:]
>       tags.append("client_transport:{}".format(self._transport))
                                                 ^^^^^^^^^^^^^^^
E       AttributeError: 'DogStatsd' object has no attribute '_transport'

To Reproduce
Steps to reproduce the behavior:

  1. Call statsd.increment()

Expected behavior
An increment message should be queued.

Environment and Versions (please complete the following information):

datadog==0.52.0
ddtrace==3.10.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugBug related issuestaleStale - Bot reminder

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions