Filippo Giunchedi has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/399154 )

Change subject: Fix nutcracker metrics fetching
......................................................................


Fix nutcracker metrics fetching

Bug: T181995
Change-Id: I127e0cc057e5f5ff3156e11db0cd52424cc01ffd
---
M debian/changelog
M prometheus-nutcracker-exporter
2 files changed, 32 insertions(+), 15 deletions(-)

Approvals:
  jenkins-bot: Verified
  Filippo Giunchedi: Looks good to me, approved



diff --git a/debian/changelog b/debian/changelog
index eeb235f..9e0fc5a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+prometheus-nutcracker-exporter (0.2) UNRELEASED; urgency=medium
+
+  * Fix nutcracker metrics fetching
+
+ -- Filippo Giunchedi <[email protected]>  Tue, 19 Dec 2017 11:23:48 +0100
+
 prometheus-nutcracker-exporter (0.1) jessie-wikimedia; urgency=medium
 
   * First upload.
diff --git a/prometheus-nutcracker-exporter b/prometheus-nutcracker-exporter
index c505573..dcf0ae0 100755
--- a/prometheus-nutcracker-exporter
+++ b/prometheus-nutcracker-exporter
@@ -20,8 +20,9 @@
 import re
 import sys
 import time
-import urllib2
+import socket
 
+from contextlib import closing
 from prometheus_client import start_http_server, Summary
 from prometheus_client.core import (CounterMetricFamily, GaugeMetricFamily,
                                     REGISTRY)
@@ -33,11 +34,22 @@
     scrape_duration = Summary(
             'nutcracker_scrape_duration_seconds', 'Nutcracker exporter scrape 
duration')
 
-    def __init__(self, stats_url='http://localhost:22222'):
-        self.stats_url = stats_url
+    def __init__(self, address, port):
+        self.address = address
+        self.port = port
 
-    def _load_stats(self, url):
-        fixed_json = re.sub(r'"("[^"]+")"(?=:)', r'\1', url.read())
+    def _load_stats(self, host, port):
+        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+
+        with closing(sock):
+            sock.connect((host, int(port)))
+            sock.settimeout(1)
+            raw_data = sock.recv(65536).decode('utf-8', errors='ignore')
+            sock.shutdown(socket.SHUT_RDWR)
+
+        # does not properly escape quotation marks in server aliases.
+        # https://github.com/twitter/twemproxy/issues/532
+        fixed_json = re.sub(r'"("[^"]+")"(?=:)', r'\1', raw_data.strip())
         return json.loads(fixed_json)
 
     def _pool_metrics(self, stats):
@@ -83,13 +95,11 @@
 
         up = GaugeMetricFamily('nutcracker_up', 'Nutcracker is running')
         try:
-            url = urllib2.urlopen(self.stats_url)
-            if url.code == 200:
-                stats = self._load_stats(url)
-                up.add_metric([], 1)
+            stats = self._load_stats(self.address, self.port)
+            up.add_metric([], 1)
             yield up
-        except urllib2.URLError:
-            log.error('Could not connect to Nutcracker stats URL')
+        except socket.error as e:
+            log.error('Could not fetch Nutcracker stats', e)
             up.add_metric([], 0)
             yield up
             return
@@ -129,9 +139,9 @@
                         help='Listen on this address', default=':9191')
     parser.add_argument('-d', '--debug', action='store_true',
                         help='Enable debug logging')
-    parser.add_argument('-u', '--url', metavar='URL',
-                        help='Fetch pdns-rec stats from this url',
-                        default='http://localhost:22222')
+    parser.add_argument('-s', '--stats', metavar='ADDRESS',
+                        help='Fetch nutcracker stats from this address',
+                        default=':22222')
     args = parser.parse_args()
 
     if args.debug:
@@ -143,7 +153,8 @@
 
     log.info('Starting nutcracker_exporter on %s:%s', address, port)
 
-    REGISTRY.register(PrometheusNutcrackerCollector(args.url))
+    stats_address, stats_port = args.stats.split(':', 1)
+    REGISTRY.register(PrometheusNutcrackerCollector(stats_address, stats_port))
     start_http_server(int(port), addr=address)
 
     try:

-- 
To view, visit https://gerrit.wikimedia.org/r/399154
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I127e0cc057e5f5ff3156e11db0cd52424cc01ffd
Gerrit-PatchSet: 1
Gerrit-Project: operations/debs/prometheus-nutcracker-exporter
Gerrit-Branch: master
Gerrit-Owner: Filippo Giunchedi <[email protected]>
Gerrit-Reviewer: Filippo Giunchedi <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to