Skip to content

Commit 58a69cf

Browse files
committed
Removed logs misuse
Recording logs and tags now Following OT recommendations for tag names and dependencies
1 parent 602104b commit 58a69cf

File tree

6 files changed

+88
-32
lines changed

6 files changed

+88
-32
lines changed

example/simple.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,41 @@
11
import sys
2-
import instana.sensor as s
32
import instana.options as o
43
import logging
54
import opentracing as ot
65
import instana.tracer
76
import time
8-
import instana.data as d
9-
import instana.http as h
7+
import opentracing.ext.tags as ext
108

9+
SERVICE = "python-simple"
1110

1211
def main(argv):
13-
instana.tracer.init(o.Options(service='python-simple',
12+
instana.tracer.init(o.Options(service=SERVICE,
1413
log_level=logging.DEBUG))
1514

1615
while (True):
1716
simple()
1817

19-
2018
def simple():
2119
parent_span = ot.tracer.start_span(operation_name="parent")
22-
parent_span.log_kv({"type": h.HTTP_SERVER,
23-
"data": d.Data(http=h.HttpData(host="localhost",
24-
url="/python/simple/one",
25-
status=200,
26-
method="GET"))})
27-
child_span = ot.tracer.start_span(
28-
operation_name="child", child_of=parent_span)
29-
child_span.log_kv({"type": h.HTTP_CLIENT,
30-
"data": d.Data(http=h.HttpData(host="localhost",
31-
url="/python/simple/two",
32-
status=204,
33-
method="POST"))})
20+
parent_span.set_tag(ext.COMPONENT, SERVICE)
21+
parent_span.set_tag(ext.SPAN_KIND, ext.SPAN_KIND_RPC_SERVER)
22+
parent_span.set_tag(ext.PEER_HOSTNAME, "localhost")
23+
parent_span.set_tag(ext.HTTP_URL, "/python/simple/one")
24+
parent_span.set_tag(ext.HTTP_METHOD, "GET")
25+
parent_span.set_tag(ext.HTTP_STATUS_CODE, 200)
26+
parent_span.log_kv({"foo": "bar"})
27+
28+
child_span = ot.tracer.start_span(operation_name="child", child_of=parent_span)
29+
child_span.set_tag(ext.SPAN_KIND, ext.SPAN_KIND_RPC_CLIENT)
30+
child_span.set_tag(ext.PEER_HOSTNAME, "localhost")
31+
child_span.set_tag(ext.HTTP_URL, "/python/simple/two")
32+
child_span.set_tag(ext.HTTP_METHOD, "POST")
33+
child_span.set_tag(ext.HTTP_STATUS_CODE, 204)
3434
child_span.set_baggage_item("someBaggage", "someValue")
35+
3536
time.sleep(.45)
3637
child_span.finish()
38+
3739
time.sleep(.55)
3840
parent_span.finish()
3941

instana/agent.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def __init__(self, sensor):
4242
self.reset()
4343

4444
def to_json(self, o):
45-
return json.dumps(o, default=lambda o: o.__dict__, sort_keys=False, indent=4).encode()
45+
return json.dumps(o, default=lambda o: o.__dict__, sort_keys=False,separators=(',', ':')).encode()
4646

4747
def can_send(self):
4848
return self.fsm.fsm.current == "ready"

instana/custom.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class CustomData(object):
2+
tags = None
3+
logs = None
4+
5+
def __init__(self, **kwds):
6+
self.__dict__.update(kwds)

instana/data.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
class Data(object):
2-
http = None
32
service = None
3+
http = None
4+
baggage = None
5+
custom = None
46

57
def __init__(self, **kwds):
68
self.__dict__.update(kwds)

instana/http.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
HTTP_CLIENT = "g.hc"
22
HTTP_SERVER = "g.http"
33

4-
54
class HttpData(object):
65
host = None
76
url = None

instana/recorder.py

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
from basictracer import Sampler, SpanRecorder
22
import instana.agent_const as a
3+
import instana.http as http
4+
import instana.custom as c
35
import threading as t
6+
import opentracing.ext.tags as ext
7+
import socket
8+
import instana.data as d
49

510
class InstanaSpan(object):
611
t = 0
@@ -15,7 +20,6 @@ class InstanaSpan(object):
1520
def __init__(self, **kwds):
1621
self.__dict__.update(kwds)
1722

18-
1923
class InstanaRecorder(SpanRecorder):
2024
sensor = None
2125

@@ -25,9 +29,13 @@ def __init__(self, sensor):
2529

2630
def record_span(self, span):
2731
if self.sensor.agent.can_send():
28-
data = self.get_span_log_field(span, "data")
29-
if not data.service:
30-
data.service = self.sensor.service_name
32+
data = d.Data(service=self.get_service_name(span),
33+
http=http.HttpData(host=self.get_host_name(span),
34+
url=self.get_string_tag(span, ext.HTTP_URL),
35+
method=self.get_string_tag(span, ext.HTTP_METHOD),
36+
status=self.get_tag(span, ext.HTTP_STATUS_CODE)),
37+
custom=c.CustomData(tags=span.tags,
38+
logs=self.collect_logs(span)))
3139

3240
t.Thread(target=self.sensor.agent.request,
3341
args=(self.sensor.agent.make_url(a.AGENT_TRACES_URL), "POST",
@@ -36,24 +44,63 @@ def record_span(self, span):
3644
s=span.context.span_id,
3745
ts=int(round(span.start_time * 1000)),
3846
d=int(round(span.duration * 1000)),
39-
n=self.get_string_span_log_field(span, "type"),
47+
n=self.get_http_type(span),
4048
f=self.sensor.agent.from_,
4149
data=data)])).start()
4250

43-
def get_string_span_log_field(self, span, field):
44-
ret = self.get_span_log_field(span, field)
51+
def get_tag(self, span, tag):
52+
if tag in span.tags:
53+
return span.tags[tag]
54+
55+
return None
56+
57+
def get_string_tag(self, span, tag):
58+
ret = self.get_tag(span, tag)
4559
if not ret:
4660
return ""
4761

4862
return ret
4963

50-
def get_span_log_field(self, span, field):
51-
for e in span.logs:
52-
if field in e.key_values:
53-
return e.key_values[field]
64+
def get_host_name(self, span):
65+
h = self.get_string_tag(span, ext.PEER_HOSTNAME)
66+
if len(h) > 0:
67+
return h
5468

55-
return None
69+
h = socket.gethostname()
70+
if h and len(h) > 0:
71+
return h
72+
73+
return "localhost"
74+
75+
def get_service_name(self, span):
76+
s = self.get_string_tag(span, ext.COMPONENT)
77+
if len(s) > 0:
78+
return s
79+
80+
s = self.get_string_tag(span, ext.PEER_SERVICE)
81+
if len(s) > 0:
82+
return s
83+
84+
return self.sensor.service_name
85+
86+
def get_http_type(self, span):
87+
k = self.get_string_tag(span, ext.SPAN_KIND)
88+
if k == ext.SPAN_KIND_RPC_CLIENT:
89+
return http.HTTP_CLIENT
90+
91+
return http.HTTP_SERVER
92+
93+
def collect_logs(self, span):
94+
logs = {}
95+
for l in span.logs:
96+
ts = int(round(l.timestamp * 1000))
97+
if not ts in logs:
98+
logs[ts] = {}
99+
100+
for f in l.key_values:
101+
logs[ts][f] = l.key_values[f]
56102

103+
return logs
57104

58105
class InstanaSampler(Sampler):
59106

0 commit comments

Comments
 (0)