]> arthur.barton.de Git - netdata.git/blobdiff - python.d/tomcat.chart.py
Merge pull request #1952 from ktsaou/master
[netdata.git] / python.d / tomcat.chart.py
index 4ca06c9b08b2edec35aa153b145b716bafe9846a..c20f85e1ecd2818a6b87386e1f2e8d1c368f7591 100644 (file)
@@ -5,6 +5,11 @@
 from base import UrlService
 from re import compile
 
+try:
+    from urlparse import urlparse
+except ImportError:
+    from urllib.parse import urlparse
+
 # default module values (can be overridden per job in `config`)
 # update_every = 2
 priority = 60000
@@ -44,13 +49,16 @@ class Service(UrlService):
         self.url = self.configuration.get('url', "http://127.0.0.1:8080/manager/status?XML=true")
         self.order = ORDER
         self.definitions = CHARTS
-        self.regex = compile(r'([\w]+)=\\?[\'\"](\d+)\\?[\'\"]')
 
     def check(self):
-        if not self.url.endswith('manager/status?XML=true'):
-            self.error('Bad url(%s). Must be http://<ip.address>:<port>/manager/status?XML=true' % self.url)
-            return False
-
+        netloc = urlparse(self.url).netloc.rpartition(':')
+        if netloc[1] == ':': port = netloc[2]
+        else: port = 80
+        
+        self.regex_jvm = compile(r'<jvm>.*?</jvm>')
+        self.regex_connector = compile(r'[a-z-]+%s.*?/connector' % port)
+        self.regex = compile(r'([\w]+)=\\?[\'\"](\d+)\\?[\'\"]')
+        
         return UrlService.check(self)
 
     def _get_data(self):
@@ -59,6 +67,10 @@ class Service(UrlService):
         :return: dict
         """
         data = self._get_raw_data()
-        if data: data = dict(self.regex.findall(data))
+        if data:
+            jvm = self.regex_jvm.findall(data) or ['']
+            connector = self.regex_connector.findall(data) or ['']
+            data = dict(self.regex.findall(''.join([jvm[0], connector[0]])))
         
         return data or None
+