Skip to content

Commit b7d3e01

Browse files
committed
safeguards around system-dependant calls
1 parent 67502b1 commit b7d3e01

File tree

2 files changed

+55
-34
lines changed

2 files changed

+55
-34
lines changed

instana/fsm.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,27 @@ def lookup_agent_host(self, e):
5454
self.agent.set_host(host)
5555
self.fsm.lookup()
5656
else:
57-
self.check_host(self.get_default_gateway())
58-
if h == a.AGENT_HEADER:
59-
self.agent.set_host(host)
60-
self.fsm.lookup()
57+
host = self.get_default_gateway()
58+
if host:
59+
self.check_host(host)
60+
if h == a.AGENT_HEADER:
61+
self.agent.set_host(host)
62+
self.fsm.lookup()
63+
else:
64+
l.error("Cannot lookup agent host. Scheduling retry.")
65+
self.schedule_retry(self.lookup_agent_host, e)
6166

6267
def get_default_gateway(self):
6368
l.debug("checking default gateway")
64-
proc = subprocess.Popen("/sbin/ip route | awk '/default/ { print $3 }'", stdout=subprocess.PIPE)
6569

66-
return proc.stdout.read()
70+
try:
71+
proc = subprocess.Popen("/sbin/ip route | awk '/default/ { print $3 }'", stdout=subprocess.PIPE)
72+
73+
return proc.stdout.read()
74+
except Exception as e:
75+
l.error(e)
76+
77+
return None
6778

6879
def check_host(self, host):
6980
l.debug("checking host", host)

instana/meter.py

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -100,36 +100,46 @@ def process(self):
100100
self.tick()
101101

102102
def collect_snapshot(self):
103-
s = Snapshot(name=self.sensor.service_name,
104-
version=sys.version,
105-
rlimit_core=resource.getrlimit(resource.RLIMIT_CORE),
106-
rlimit_cpu=resource.getrlimit(resource.RLIMIT_CPU),
107-
rlimit_fsize=resource.getrlimit(resource.RLIMIT_FSIZE),
108-
rlimit_data=resource.getrlimit(resource.RLIMIT_DATA),
109-
rlimit_stack=resource.getrlimit(resource.RLIMIT_STACK),
110-
rlimit_rss=resource.getrlimit(resource.RLIMIT_RSS),
111-
rlimit_nproc=resource.getrlimit(resource.RLIMIT_NPROC),
112-
rlimit_nofile=resource.getrlimit(resource.RLIMIT_NOFILE),
113-
rlimit_memlock=resource.getrlimit(resource.RLIMIT_MEMLOCK),
114-
rlimit_as=resource.getrlimit(resource.RLIMIT_AS),
115-
versions=self.collect_modules())
116-
117-
return s
103+
try:
104+
s = Snapshot(name=self.sensor.service_name,
105+
version=sys.version,
106+
rlimit_core=resource.getrlimit(resource.RLIMIT_CORE),
107+
rlimit_cpu=resource.getrlimit(resource.RLIMIT_CPU),
108+
rlimit_fsize=resource.getrlimit(resource.RLIMIT_FSIZE),
109+
rlimit_data=resource.getrlimit(resource.RLIMIT_DATA),
110+
rlimit_stack=resource.getrlimit(resource.RLIMIT_STACK),
111+
rlimit_rss=resource.getrlimit(resource.RLIMIT_RSS),
112+
rlimit_nproc=resource.getrlimit(resource.RLIMIT_NPROC),
113+
rlimit_nofile=resource.getrlimit(resource.RLIMIT_NOFILE),
114+
rlimit_memlock=resource.getrlimit(resource.RLIMIT_MEMLOCK),
115+
rlimit_as=resource.getrlimit(resource.RLIMIT_AS),
116+
versions=self.collect_modules())
117+
118+
return s
119+
except Exception as e:
120+
l.error(e)
121+
122+
return None
118123

119124
def collect_modules(self):
120-
m = sys.modules
121-
r = {}
122-
for k in m:
123-
if m[k]:
124-
d = m[k].__dict__
125-
if "version" in d and d["version"]:
126-
r[k] = d["version"]
127-
elif "__version__" in d and d["__version__"]:
128-
r[k] = d["__version__"]
129-
else:
130-
r[k] = "builtin"
131-
132-
return r
125+
try:
126+
m = sys.modules
127+
r = {}
128+
for k in m:
129+
if m[k]:
130+
d = m[k].__dict__
131+
if "version" in d and d["version"]:
132+
r[k] = d["version"]
133+
elif "__version__" in d and d["__version__"]:
134+
r[k] = d["__version__"]
135+
else:
136+
r[k] = "builtin"
137+
138+
return r
139+
except Exception as e:
140+
l.error(e)
141+
142+
return None
133143

134144
def collect_metrics(self):
135145
u = resource.getrusage(resource.RUSAGE_SELF)

0 commit comments

Comments
 (0)