Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions instana/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,11 @@ def __init__(self, sensor):
self.reset()

def to_json(self, o):
return json.dumps(o, default=lambda o: o.__dict__,
sort_keys=False, separators=(',', ':')).encode()
try:
return json.dumps(o, default=lambda o: o.to_dict(),
sort_keys=False, separators=(',', ':')).encode()
except Exception as e:
l.error("to_json: ", e, o)

def can_send(self):
return self.fsm.fsm.current == "good2go"
Expand Down Expand Up @@ -77,7 +80,7 @@ def full_request_response(self, url, method, o, body, header):
request = urllib2.Request(url, self.to_json(o))
request.add_header("Content-Type", "application/json")

# print self.to_json(o)
l.debug("request: ", method, self.to_json(o))
response = urllib2.urlopen(request, timeout=2)

if not response:
Expand Down
6 changes: 4 additions & 2 deletions instana/django.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
from __future__ import print_function
import opentracing as ot
from instana import tracer
from instana import tracer, options
import opentracing.ext.tags as ext


DJ_INSTANA_MIDDLEWARE = 'instana.django.InstanaMiddleware'


class InstanaMiddleware(object):
""" Django Middleware to provide request tracing for Instana """
def __init__(self, get_response):
self.get_response = get_response
ot.global_tracer = tracer.InstanaTracer()
opts = options.Options(service="Django")
ot.global_tracer = tracer.InstanaTracer(opts)
self

def __call__(self, request):
Expand Down
6 changes: 6 additions & 0 deletions instana/fsm.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ class Discovery(object):
def __init__(self, **kwds):
self.__dict__.update(kwds)

def to_dict(self):
kvs = dict()
kvs['pid'] = self.pid
kvs['name'] = self.name
kvs['args'] = self.args
return kvs

class Fsm(object):
RETRY_PERIOD = 30
Expand Down
5 changes: 4 additions & 1 deletion instana/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ def init(level):
f = l.Formatter('%(asctime)s: %(levelname)s: %(name)s: %(message)s')
ch.setFormatter(f)
logger.addHandler(ch)
logger.setLevel(level)
if "INSTANA_DEV" in os.environ:
logger.setLevel(l.DEBUG)
else:
logger.setLevel(level)


def debug(s, *args):
Expand Down
51 changes: 40 additions & 11 deletions instana/meter.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import instana.agent_const as a
import copy
import time
import json
from types import ModuleType


class Snapshot(object):
Expand All @@ -27,6 +29,13 @@ class Snapshot(object):
def __init__(self, **kwds):
self.__dict__.update(kwds)

def to_dict(self):
kvs = dict()
kvs['name'] = self.name
kvs['version'] = self.version
kvs['versions'] = self.versions
return kvs


class GC(object):
collect0 = 0
Expand All @@ -39,6 +48,9 @@ class GC(object):
def __init__(self, **kwds):
self.__dict__.update(kwds)

def to_dict(self):
return self.__dict__


class Metrics(object):
ru_utime = .0
Expand Down Expand Up @@ -76,6 +88,9 @@ def delta_data(self, delta):

return data

def to_dict(self):
return self.__dict__


class EntityData(object):
pid = 0
Expand All @@ -85,10 +100,13 @@ class EntityData(object):
def __init__(self, **kwds):
self.__dict__.update(kwds)

def to_dict(self):
return self.__dict__


class Meter(object):
SNAPSHOT_PERIOD = 600
snapshot_countdown = 30
snapshot_countdown = 25
sensor = None
last_usage = None
last_collect = None
Expand All @@ -113,18 +131,20 @@ def collect_and_report(self):
def process(self):
if self.sensor.agent.can_send():
self.snapshot_countdown = self.snapshot_countdown - 1
s = None
ss = None
cm = self.collect_metrics()

l.debug("snapshot_countdown is:", str(self.snapshot_countdown))
if self.snapshot_countdown == 0:
self.snapshot_countdown = self.SNAPSHOT_PERIOD
s = self.collect_snapshot()
md = cm.delta_data(None)
ss = self.collect_snapshot()
md = copy.deepcopy(cm).delta_data(None)
else:
md = copy.deepcopy(cm).delta_data(self.last_metrics)

d = EntityData(pid=os.getpid(), snapshot=s, metrics=md)
self.sensor.agent.request(
self.sensor.agent.make_url(a.AGENT_DATA_URL), "POST", d)
ed = EntityData(pid=os.getpid(), snapshot=ss, metrics=md)
url = self.sensor.agent.make_url(a.AGENT_DATA_URL)
self.sensor.agent.request(url, "POST", ed)
self.last_metrics = cm.__dict__

def collect_snapshot(self):
Expand All @@ -150,10 +170,19 @@ def collect_snapshot(self):

return s
except Exception as e:
l.error(e)
l.error("collect_snapshot: ", str(e))

return None

def jsonable(self, value):
if callable(value):
result = value()
elif type(value) is ModuleType:
result = str(value)
else:
result = value
return result

def collect_modules(self):
try:
m = sys.modules
Expand All @@ -162,15 +191,15 @@ def collect_modules(self):
if m[k]:
d = m[k].__dict__
if "version" in d and d["version"]:
r[k] = d["version"]
r[k] = self.jsonable(d["version"])
elif "__version__" in d and d["__version__"]:
r[k] = d["__version__"]
r[k] = self.jsonable(d["__version__"])
else:
r[k] = "builtin"

return r
except Exception as e:
l.error(e)
l.error("collect_modules: ", e)

return None

Expand Down
4 changes: 2 additions & 2 deletions instana/recorder.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def run(self):
def report_spans(self):
""" Periodically report the queued spans """
while 1:
if self.sensor.agent.can_send() and self.queue.qsize:
if self.sensor.agent.can_send() and self.queue.qsize() > 0:
url = self.sensor.agent.make_url(a.AGENT_TRACES_URL)
self.sensor.agent.request(url, "POST", self.queued_spans())
time.sleep(1)
Expand Down Expand Up @@ -66,7 +66,7 @@ def record_span(self, span):
Convert the passed BasicSpan into an InstanaSpan and
add it to the span queue
"""
if self.sensor.agent.can_send() or os.environ["INSTANA_TEST"]:
if self.sensor.agent.can_send() or "INSTANA_TEST" in os.environ:
instana_span = None

if span.operation_name in self.registered_spans:
Expand Down