@cryptotaxi247 / netdata-1 / commits / da60cc719

tomcat work on different port than 8080 and with malformed data

paulfantom committed Jul 26, 2016 at 23:54 UTC da60cc7193aef46e1c5281ef1bf38796ee5e0316
1 file changed +27 -2
python.d/tomcat.chart.py
+27 -2
@@ -6,6 +6,7 @@
6
7 from base import UrlService
8 import xml.etree.ElementTree as ET # phone home...
9 +import xml.parsers.expat.errors as errors
10
11 # default module values (can be overridden per job in `config`)
12 # update_every = 2
@@ -47,6 +48,12 @@ class Service(UrlService):
48 self.url = "http://localhost:8080/manager/status?XML=true"
49 self.order = ORDER
50 self.definitions = CHARTS
51 + self.port = 8080
52 +
53 + def check(self):
54 + if UrlService.check(self):
55 + return True
56 +
57 # get port from url
58 self.port = 0
59 for i in self.url.split('/'):
@@ -59,6 +66,11 @@ class Service(UrlService):
66 if self.port == 0:
67 self.port = 80
68
69 + if self._get_data() is None or len(self._get_data()) == 0:
70 + return False
71 + else:
72 + return True
73 +
74 def _get_data(self):
75 """
76 Format data received from http request
@@ -66,7 +78,19 @@ class Service(UrlService):
78 """
79 try:
80 raw = self._get_raw_data()
69 - data = ET.fromstring(raw)
81 + try:
82 + data = ET.fromstring(raw)
83 + except ET.ParseError as e:
84 + if e.code == errors.codes[errors.XML_ERROR_JUNK_AFTER_DOC_ELEMENT]:
85 + # cut rest of invalid string
86 + pos = 0
87 + for i in range(e.position[0] - 1):
88 + pos += raw.find('\n', pos)
89 + raw = raw[:47604 + pos + e.position[0] - 1]
90 + data = ET.fromstring(raw)
91 + else:
92 + raise ET.ParseError(e)
93 +
94 memory = data.find('./jvm/memory')
95 threads = data.find("./connector[@name='\"http-bio-" + str(self.port) + "\"']/threadInfo")
96 requests = data.find("./connector[@name='\"http-bio-" + str(self.port) + "\"']/requestInfo")
@@ -76,7 +100,8 @@ class Service(UrlService):
100 'current': threads.attrib['currentThreadCount'],
101 'busy': threads.attrib['currentThreadsBusy'],
102 'jvm': memory.attrib['free']}
79 - except (ValueError, AttributeError):
103 + except (ValueError, AttributeError) as e:
104 + self.debug(str(e))
105 return None
106 except SyntaxError as e:
107 self.error("Tomcat module needs python 2.7 at least. Stopping")