Skip to content

Commit 2a8d0cf

Browse files
committed
Proper delta reporting of metrics
1 parent 937e02f commit 2a8d0cf

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

instana/meter.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import gc as gc_
66
import sys
77
import instana.agent_const as a
8+
import copy
89

910

1011
class Snapshot(object):
@@ -63,6 +64,17 @@ class Metrics(object):
6364
def __init__(self, **kwds):
6465
self.__dict__.update(kwds)
6566

67+
def delta_data(self, delta):
68+
data = self.__dict__
69+
if delta is None:
70+
return data
71+
72+
unchanged_items = set(data.items()) & set(delta.items())
73+
for x in unchanged_items:
74+
data.pop(x[0])
75+
76+
return data
77+
6678

6779
class EntityData(object):
6880
pid = 0
@@ -80,6 +92,7 @@ class Meter(object):
8092
last_usage = None
8193
last_collect = None
8294
timer = None
95+
last_metrics = None
8396

8497
def __init__(self, sensor):
8598
self.sensor = sensor
@@ -95,17 +108,18 @@ def process(self):
95108
if self.sensor.agent.can_send():
96109
self.snapshot_countdown = self.snapshot_countdown - 1
97110
s = None
111+
cm = self.collect_metrics()
98112
if self.snapshot_countdown == 0:
99113
self.snapshot_countdown = self.SNAPSHOT_PERIOD
100114
s = self.collect_snapshot()
101-
102-
m = self.collect_metrics()
103-
d = EntityData(pid=os.getpid(), snapshot=s, metrics=m)
104-
105-
t.Thread(target=self.sensor.agent.request,
106-
args=(self.sensor.agent.make_url(a.AGENT_DATA_URL),
107-
"POST", d),
108-
name="Metrics POST").start()
115+
md = cm.delta_data(None)
116+
else:
117+
md = copy.deepcopy(cm).delta_data(self.last_metrics)
118+
119+
d = EntityData(pid=os.getpid(), snapshot=s, metrics=md)
120+
self.sensor.agent.request(
121+
self.sensor.agent.make_url(a.AGENT_DATA_URL), "POST", d)
122+
self.last_metrics = cm.__dict__
109123

110124
self.tick()
111125

0 commit comments

Comments
 (0)