Skip to content

Commit 199ed5d

Browse files
authored
Merge pull request #88 from DataDog/matt/memleak
Matt/memleak
2 parents 5d02219 + 011a734 commit 199ed5d

File tree

9 files changed

+234
-250
lines changed

9 files changed

+234
-250
lines changed

ddtrace/api.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
2+
# stdlib
3+
from .compat import httplib
4+
import logging
5+
import time
6+
7+
# project
8+
import ddtrace.encoding
9+
10+
11+
log = logging.getLogger(__name__)
12+
13+
14+
class API(object):
15+
16+
def __init__(self, hostname, port):
17+
self.hostname = hostname
18+
self.port = port
19+
self.headers = {}
20+
21+
def send_traces(self, traces):
22+
spans = [item for sublist in traces for item in sublist]
23+
self.send_spans(spans)
24+
25+
def send_spans(self, spans):
26+
start = time.time()
27+
data = ddtrace.encoding.encode_spans(spans)
28+
self._send_span_data(data)
29+
log.debug("reported %d spans in %.5fs", len(spans), time.time() - start)
30+
31+
def send_services(self, services):
32+
log.debug("Reporting %d services", len(services))
33+
data = ddtrace.encoding.encode_services(services)
34+
self._put("/services", data, self.headers)
35+
36+
def _send_span_data(self, data):
37+
self._put("/spans", data, self.headers)
38+
39+
def _put(self, endpoint, data, headers):
40+
conn = httplib.HTTPConnection(self.hostname, self.port)
41+
conn.request("PUT", endpoint, data, self.headers)
42+

ddtrace/contrib/django/apps.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ def ready(self):
3838
# AgentWriter, it breaks all tests. The configure() behavior must
3939
# be changed to use it in this integration
4040
tracer.enabled = settings.ENABLED
41-
tracer.writer._reporter.transport.hostname = settings.AGENT_HOSTNAME
42-
tracer.writer._reporter.transport.port = settings.AGENT_PORT
41+
tracer.writer.api.hostname = settings.AGENT_HOSTNAME
42+
tracer.writer.api.port = settings.AGENT_PORT
4343

4444
if settings.AUTO_INSTRUMENT:
4545
# trace Django internals

ddtrace/reporter.py

Lines changed: 0 additions & 42 deletions
This file was deleted.

ddtrace/tracer.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ def __init__(self):
4242
# track the active span
4343
self.span_buffer = ThreadLocalSpanBuffer()
4444

45-
# a collection of registered services by name.
46-
self._services = {}
47-
4845
# A hook for local debugging. shouldn't be needed or used
4946
# in production.
5047
self.debug_logging = False
@@ -163,7 +160,7 @@ def write(self, spans):
163160

164161
if self.enabled and self.writer:
165162
# only submit the spans if we're actually enabled (and don't crash :)
166-
self.writer.write(spans, self._services)
163+
self.writer.write(spans=spans)
167164

168165
def set_service_info(self, service, app, app_type):
169166
"""Set the information about the given service.
@@ -172,15 +169,21 @@ def set_service_info(self, service, app, app_type):
172169
:param str app: the off the shelf name of the application (e.g. rails, postgres, custom-app)
173170
:param str app_type: the type of the application (e.g. db, web)
174171
"""
175-
self._services[service] = {
176-
"app" : app,
177-
"app_type": app_type,
172+
173+
services = {
174+
service : {
175+
"app" : app,
176+
"app_type": app_type,
177+
}
178178
}
179179

180180
if self.debug_logging:
181181
log.debug("set_service_info: service:%s app:%s type:%s",
182182
service, app, app_type)
183183

184+
if self.enabled and self.writer:
185+
self.writer.write(services=services)
186+
184187
def wrap(self, name=None, service=None, resource=None, span_type=None):
185188
"""A decorator used to trace an entire function.
186189

ddtrace/transport.py

Lines changed: 0 additions & 181 deletions
This file was deleted.

0 commit comments

Comments
 (0)