77import instana .agent_const as a
88import copy
99import time
10+ import json
11+ from types import ModuleType
1012
1113
1214class Snapshot (object ):
@@ -27,6 +29,13 @@ class Snapshot(object):
2729 def __init__ (self , ** kwds ):
2830 self .__dict__ .update (kwds )
2931
32+ def to_dict (self ):
33+ kvs = dict ()
34+ kvs ['name' ] = self .name
35+ kvs ['version' ] = self .version
36+ kvs ['versions' ] = self .versions
37+ return kvs
38+
3039
3140class GC (object ):
3241 collect0 = 0
@@ -39,6 +48,9 @@ class GC(object):
3948 def __init__ (self , ** kwds ):
4049 self .__dict__ .update (kwds )
4150
51+ def to_dict (self ):
52+ return self .__dict__
53+
4254
4355class Metrics (object ):
4456 ru_utime = .0
@@ -76,6 +88,9 @@ def delta_data(self, delta):
7688
7789 return data
7890
91+ def to_dict (self ):
92+ return self .__dict__
93+
7994
8095class EntityData (object ):
8196 pid = 0
@@ -85,10 +100,13 @@ class EntityData(object):
85100 def __init__ (self , ** kwds ):
86101 self .__dict__ .update (kwds )
87102
103+ def to_dict (self ):
104+ return self .__dict__
105+
88106
89107class Meter (object ):
90108 SNAPSHOT_PERIOD = 600
91- snapshot_countdown = 30
109+ snapshot_countdown = 25
92110 sensor = None
93111 last_usage = None
94112 last_collect = None
@@ -113,18 +131,20 @@ def collect_and_report(self):
113131 def process (self ):
114132 if self .sensor .agent .can_send ():
115133 self .snapshot_countdown = self .snapshot_countdown - 1
116- s = None
134+ ss = None
117135 cm = self .collect_metrics ()
136+
137+ l .debug ("snapshot_countdown is:" , str (self .snapshot_countdown ))
118138 if self .snapshot_countdown == 0 :
119139 self .snapshot_countdown = self .SNAPSHOT_PERIOD
120- s = self .collect_snapshot ()
121- md = cm .delta_data (None )
140+ ss = self .collect_snapshot ()
141+ md = copy . deepcopy ( cm ) .delta_data (None )
122142 else :
123143 md = copy .deepcopy (cm ).delta_data (self .last_metrics )
124144
125- d = EntityData (pid = os .getpid (), snapshot = s , metrics = md )
126- self .sensor .agent .request (
127- self .sensor .agent .make_url ( a . AGENT_DATA_URL ) , "POST" , d )
145+ ed = EntityData (pid = os .getpid (), snapshot = ss , metrics = md )
146+ url = self .sensor .agent .make_url ( a . AGENT_DATA_URL )
147+ self .sensor .agent .request ( url , "POST" , ed )
128148 self .last_metrics = cm .__dict__
129149
130150 def collect_snapshot (self ):
@@ -150,10 +170,19 @@ def collect_snapshot(self):
150170
151171 return s
152172 except Exception as e :
153- l .error (e )
173+ l .error ("collect_snapshot: " , str ( e ) )
154174
155175 return None
156176
177+ def jsonable (self , value ):
178+ if callable (value ):
179+ result = value ()
180+ elif type (value ) is ModuleType :
181+ result = str (value )
182+ else :
183+ result = value
184+ return result
185+
157186 def collect_modules (self ):
158187 try :
159188 m = sys .modules
@@ -162,15 +191,15 @@ def collect_modules(self):
162191 if m [k ]:
163192 d = m [k ].__dict__
164193 if "version" in d and d ["version" ]:
165- r [k ] = d ["version" ]
194+ r [k ] = self . jsonable ( d ["version" ])
166195 elif "__version__" in d and d ["__version__" ]:
167- r [k ] = d ["__version__" ]
196+ r [k ] = self . jsonable ( d ["__version__" ])
168197 else :
169198 r [k ] = "builtin"
170199
171200 return r
172201 except Exception as e :
173- l .error (e )
202+ l .error ("collect_modules: " , e )
174203
175204 return None
176205
0 commit comments