[MediaWiki-commits] [Gerrit] operations...druid_exporter[master]: Fix decoding of JSON data in python3

2017-11-20 Thread Elukey (Code Review)
Elukey has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/392412 )

Change subject: Fix decoding of JSON data in python3
..


Fix decoding of JSON data in python3

* Drop support for Python 2 to simplify the code maintenance.
* Add the --encoding parameter (default to utf-8) to allow a user
  to instruct what encoding the druid exporter should expect to use
  when decoding POST data coming from Druid. The documentation
  seems to suggest that UTF-8 is the preferred one.

Change-Id: Id1d4e3108811bab972492724eba0faeb94f4
---
M README.md
M druid_exporter/exporter.py
M setup.py
M tox.ini
4 files changed, 12 insertions(+), 8 deletions(-)

Approvals:
  Elukey: Verified; Looks good to me, approved
  Volans: Looks good to me, but someone else must approve



diff --git a/README.md b/README.md
index 93859be..9cf3d80 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@
   .venv/bin/python setup.py
   .venv/bin/druid_exporter
 
-By default metrics are exposed on TCP port `8000`.
+By default metrics are exposed on TCP port `8000`. Python 2 is not supported.
 
 ## Druid versions supported
 
diff --git a/druid_exporter/exporter.py b/druid_exporter/exporter.py
index 6f957be..462d29f 100644
--- a/druid_exporter/exporter.py
+++ b/druid_exporter/exporter.py
@@ -14,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import absolute_import
 import argparse
 import json
 import logging
@@ -30,21 +29,23 @@
 
 class DruidWSGIApp(object):
 
-def __init__(self, post_uri, druid_collector, prometheus_app):
+def __init__(self, post_uri, druid_collector, prometheus_app, encoding):
 self.prometheus_app = prometheus_app
 self.druid_collector = druid_collector
 self.post_uri = post_uri
+self.encoding = encoding
 
 def __call__(self, environ, start_response):
 if (environ['REQUEST_METHOD'] == 'GET' and
 environ['PATH_INFO'] == '/metrics'):
 return self.prometheus_app(environ, start_response)
 elif (environ['REQUEST_METHOD'] == 'POST' and
-environ['PATH_INFO'] == self.post_uri):
+environ['PATH_INFO'] == self.post_uri and
+environ['CONTENT_TYPE'] == 'application/json'):
 try:
 request_body_size = int(environ.get('CONTENT_LENGTH', 0))
 request_body = environ['wsgi.input'].read(request_body_size)
-datapoints = json.loads(request_body)
+datapoints = json.loads(request_body.decode(self.encoding))
 # The HTTP metrics emitter can batch datapoints and send them 
to
 # a specific endpoint stated in the logs (this tool).
 for datapoint in datapoints:
@@ -68,6 +69,8 @@
 help='The URI to check for POSTs coming from Druid')
 parser.add_argument('-d', '--debug', action='store_true',
 help='Enable debug logging')
+parser.add_argument('-e', '--encoding', default='utf-8',
+help='Encoding of the Druid POST JSON data.')
 parser.add_argument('-c', '--collect-from',
 type=str, default='all',
 help="Comma separated list of daemons to collect "
@@ -99,7 +102,8 @@
 druid_collector = collector.DruidCollector(daemons)
 REGISTRY.register(druid_collector)
 prometheus_app = make_wsgi_app()
-druid_wsgi_app = DruidWSGIApp(args.uri, druid_collector, prometheus_app)
+druid_wsgi_app = DruidWSGIApp(args.uri, druid_collector,
+  prometheus_app, args.encoding)
 
 httpd = make_server(address, int(port), druid_wsgi_app)
 httpd.serve_forever()
diff --git a/setup.py b/setup.py
index ae7b22f..38efc51 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 from setuptools import setup
 
 setup(name='druid_exporter',
-  version='0.1',
+  version='0.3',
   description='Prometheus exporter for Druid',
   url='https://github.com/wikimedia/operations-software-druid_exporter',
   author='Luca Toscano',
diff --git a/tox.ini b/tox.ini
index d8c695f..8b8b169 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist = py3,py2
+envlist = py3
 
 [testenv]
 deps=nose

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Id1d4e3108811bab972492724eba0faeb94f4
Gerrit-PatchSet: 2
Gerrit-Project: operations/software/druid_exporter
Gerrit-Branch: master
Gerrit-Owner: Elukey 
Gerrit-Reviewer: Elukey 
Gerrit-Reviewer: Volans 

___
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org

[MediaWiki-commits] [Gerrit] operations...druid_exporter[master]: Fix decoding of JSON data in python3

2017-11-20 Thread Elukey (Code Review)
Elukey has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/392412 )

Change subject: Fix decoding of JSON data in python3
..

Fix decoding of JSON data in python3

* Drop support for Python 2 to simplify the code maintenance.
* Add the --encoding parameter (default to utf-8) to allow a user
  to instruct what encoding the druid exporter should expect to use
  when decoding POST data coming from Druid. The documentation
  seems to suggest that UTF-8 is the preferred one.

Change-Id: Id1d4e3108811bab972492724eba0faeb94f4
---
M README.md
M druid_exporter/exporter.py
M setup.py
M tox.ini
4 files changed, 12 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/software/druid_exporter 
refs/changes/12/392412/1

diff --git a/README.md b/README.md
index 93859be..9cf3d80 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@
   .venv/bin/python setup.py
   .venv/bin/druid_exporter
 
-By default metrics are exposed on TCP port `8000`.
+By default metrics are exposed on TCP port `8000`. Python 2 is not supported.
 
 ## Druid versions supported
 
diff --git a/druid_exporter/exporter.py b/druid_exporter/exporter.py
index 6f957be..0d779ac 100644
--- a/druid_exporter/exporter.py
+++ b/druid_exporter/exporter.py
@@ -14,7 +14,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from __future__ import absolute_import
 import argparse
 import json
 import logging
@@ -30,21 +29,23 @@
 
 class DruidWSGIApp(object):
 
-def __init__(self, post_uri, druid_collector, prometheus_app):
+def __init__(self, post_uri, druid_collector, prometheus_app, encoding):
 self.prometheus_app = prometheus_app
 self.druid_collector = druid_collector
 self.post_uri = post_uri
+self.encoding = encoding
 
 def __call__(self, environ, start_response):
 if (environ['REQUEST_METHOD'] == 'GET' and
 environ['PATH_INFO'] == '/metrics'):
 return self.prometheus_app(environ, start_response)
 elif (environ['REQUEST_METHOD'] == 'POST' and
-environ['PATH_INFO'] == self.post_uri):
+environ['PATH_INFO'] == self.post_uri) and
+environ['CONTENT_TYPE'] == 'application/json':
 try:
 request_body_size = int(environ.get('CONTENT_LENGTH', 0))
 request_body = environ['wsgi.input'].read(request_body_size)
-datapoints = json.loads(request_body)
+datapoints = json.loads(request_body.decode(self.encoding))
 # The HTTP metrics emitter can batch datapoints and send them 
to
 # a specific endpoint stated in the logs (this tool).
 for datapoint in datapoints:
@@ -68,6 +69,8 @@
 help='The URI to check for POSTs coming from Druid')
 parser.add_argument('-d', '--debug', action='store_true',
 help='Enable debug logging')
+parser.add_argument('-e', '--encoding', default='utf-8',
+help='Encoding of the Druid POST JSON data.')
 parser.add_argument('-c', '--collect-from',
 type=str, default='all',
 help="Comma separated list of daemons to collect "
@@ -99,7 +102,8 @@
 druid_collector = collector.DruidCollector(daemons)
 REGISTRY.register(druid_collector)
 prometheus_app = make_wsgi_app()
-druid_wsgi_app = DruidWSGIApp(args.uri, druid_collector, prometheus_app)
+druid_wsgi_app = DruidWSGIApp(args.uri, druid_collector,
+  prometheus_app, args.encoding)
 
 httpd = make_server(address, int(port), druid_wsgi_app)
 httpd.serve_forever()
diff --git a/setup.py b/setup.py
index ae7b22f..38efc51 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 from setuptools import setup
 
 setup(name='druid_exporter',
-  version='0.1',
+  version='0.3',
   description='Prometheus exporter for Druid',
   url='https://github.com/wikimedia/operations-software-druid_exporter',
   author='Luca Toscano',
diff --git a/tox.ini b/tox.ini
index d8c695f..8b8b169 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist = py3,py2
+envlist = py3
 
 [testenv]
 deps=nose

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id1d4e3108811bab972492724eba0faeb94f4
Gerrit-PatchSet: 1
Gerrit-Project: operations/software/druid_exporter
Gerrit-Branch: master
Gerrit-Owner: Elukey 

___
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits