Skip to content

Commit 7dd7d50

Browse files
committed
added gc, modules, meta
1 parent 306f628 commit 7dd7d50

File tree

1 file changed

+51
-2
lines changed

1 file changed

+51
-2
lines changed

instana/meter.py

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33
import instana.log as l
44
import resource
55
import os
6+
import gc
7+
import sys
68

79
class Snapshot(object):
810
name = None
11+
version = None
912
rlimit_core=(0, 0)
1013
rlimit_cpu=(0, 0)
1114
rlimit_fsize=(0, 0)
@@ -16,6 +19,18 @@ class Snapshot(object):
1619
rlimit_nofile=(0, 0)
1720
rlimit_memlock=(0, 0)
1821
rlimit_as=(0, 0)
22+
versions = None
23+
24+
def __init__(self, **kwds):
25+
self.__dict__.update(kwds)
26+
27+
class GC(object):
28+
collect0 = 0
29+
collect1 = 0
30+
collect2 = 0
31+
threshold0 = 0
32+
threshold1 = 0
33+
threshold2 = 0
1934

2035
def __init__(self, **kwds):
2136
self.__dict__.update(kwds)
@@ -37,6 +52,7 @@ class Metrics(object):
3752
ru_nsignals = 0
3853
ru_nvcs = 0
3954
ru_nivcsw = 0
55+
gc = None
4056

4157
def __init__(self, **kwds):
4258
self.__dict__.update(kwds)
@@ -54,6 +70,7 @@ class Meter(object):
5470
snapshot_countdown = 1
5571
sensor = None
5672
last_usage = None
73+
last_collect = None
5774

5875
def __init__(self, sensor):
5976
self.sensor = sensor
@@ -80,6 +97,7 @@ def process(self):
8097

8198
def collect_snapshot(self):
8299
s = Snapshot(name=self.sensor.service_name,
100+
version=sys.version,
83101
rlimit_core=resource.getrlimit(resource.RLIMIT_CORE),
84102
rlimit_cpu=resource.getrlimit(resource.RLIMIT_CPU),
85103
rlimit_fsize=resource.getrlimit(resource.RLIMIT_FSIZE),
@@ -89,12 +107,40 @@ def collect_snapshot(self):
89107
rlimit_nproc=resource.getrlimit(resource.RLIMIT_NPROC),
90108
rlimit_nofile=resource.getrlimit(resource.RLIMIT_NOFILE),
91109
rlimit_memlock=resource.getrlimit(resource.RLIMIT_MEMLOCK),
92-
rlimit_as=resource.getrlimit(resource.RLIMIT_AS))
110+
rlimit_as=resource.getrlimit(resource.RLIMIT_AS),
111+
versions=self.collect_modules())
93112

94113
return s
95114

115+
def collect_modules(self):
116+
m = sys.modules
117+
r = {}
118+
for k in m:
119+
if m[k]:
120+
d = m[k].__dict__
121+
if "version" in d and d["version"]:
122+
r[k] = d["version"]
123+
elif "__version__" in d and d["__version__"]:
124+
r[k] = d["__version__"]
125+
else:
126+
r[k] = "builtin"
127+
else:
128+
r[k] = "builtin"
129+
130+
return r
131+
96132
def collect_metrics(self):
97133
u = resource.getrusage(resource.RUSAGE_SELF)
134+
if gc.isenabled():
135+
c = list(gc.get_count())
136+
t = list(gc.get_threshold())
137+
g = GC(collect0=c[0] if not self.last_collect else c[0] - self.last_collect[0],
138+
collect1=c[1] if not self.last_collect else c[1] - self.last_collect[1],
139+
collect2=c[2] if not self.last_collect else c[2] - self.last_collect[2],
140+
threshold0=t[0],
141+
threshold1=t[1],
142+
threshold2=t[2])
143+
98144
m = Metrics(ru_utime=u[0] if not self.last_usage else u[0] - self.last_usage[0],
99145
ru_stime=u[1] if not self.last_usage else u[1] - self.last_usage[1],
100146
ru_maxrss=u[2],
@@ -110,8 +156,11 @@ def collect_metrics(self):
110156
ru_msgrcv=u[12] if not self.last_usage else u[12] - self.last_usage[12],
111157
ru_nsignals=u[13] if not self.last_usage else u[13] - self.last_usage[13],
112158
ru_nvcs=u[14] if not self.last_usage else u[14] - self.last_usage[14],
113-
ru_nivcsw=u[15] if not self.last_usage else u[15] - self.last_usage[15])
159+
ru_nivcsw=u[15] if not self.last_usage else u[15] - self.last_usage[15],
160+
gc=g)
114161

115162
self.last_usage = u
163+
if gc.isenabled():
164+
self.last_collect = c
116165

117166
return m

0 commit comments

Comments
 (0)