Ori.livneh has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/49379


Change subject: Add Python-based dev server tool
......................................................................

Add Python-based dev server tool

Change-Id: I11d57c399764a080adc8d3706c046e571f609dba
---
A server/bin/el-devserver
M server/eventlogging/__init__.py
M server/setup.py
3 files changed, 88 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/EventLogging 
refs/changes/79/49379/1

diff --git a/server/bin/el-devserver b/server/bin/el-devserver
new file mode 100755
index 0000000..0bfeb87
--- /dev/null
+++ b/server/bin/el-devserver
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+# -*- coding: utf8 -*-
+"""
+  el-devserver
+  ------------
+
+  :copyright: (c) 2012 by Ori Livneh <[email protected]>
+  :license: GNU General Public Licence 2.0 or later
+
+"""
+import argparse
+import itertools
+import json
+import time
+
+from wsgiref.simple_server import WSGIRequestHandler, make_server
+
+import eventlogging
+from eventlogging import parse
+
+from pygments import highlight
+from pygments.lexers import JSONLexer
+from pygments.formatters import TerminalFormatter
+from pygments.console import colorize
+
+
+ap = argparse.ArgumentParser(description='EventLogging Dev Server')
+ap.add_argument('--port', default=8080, type=int, help='Port to bind')
+args = ap.parse_args()
+
+lexer = JSONLexer()
+formatter = TerminalFormatter()
+
+
+seq_ids = itertools.count()
+parser = parse.LogParser('%q %l %n %t %h')
+log_fmt = ('?%(QUERY_STRING)s %(SERVER_NAME)s %(SEQ_ID)d '
+           '%(TIMESTAMP)s %(REMOTE_ADDR)s')
+
+
+def pretty_print(event):
+    raw_json = json.dumps(event, indent=2, sort_keys=True)
+    print(highlight(raw_json, lexer, formatter))
+
+
+class EventLoggingHandler(WSGIRequestHandler, object):
+
+    server_version = 'EventLogging/' + eventlogging.__version__
+
+    def get_environ(self):
+        environ = super(EventLoggingHandler, self).get_environ()
+        ncsa_timestamp = time.strftime(parse.NCSA_FORMAT, time.gmtime())
+        environ.update(SEQ_ID=next(seq_ids), TIMESTAMP=ncsa_timestamp)
+        return environ
+
+    def log_message(self, format, *args):
+        pass  # We'll handle logging in the WSGI app.
+
+
+def handle_event(environ, start_response):
+    start_response('204 No Content', [])
+    log_line = log_fmt % environ
+    print('-' * 80)
+    print(log_line)
+    try:
+        event = parser.parse(log_fmt % environ)
+        json_event = json.dumps(event, indent=2, sort_keys=True)
+        print(highlight(json_event, lexer, formatter))
+        eventlogging.validate(event)
+        print('Status: ' + colorize('green', '✔ Valid.'))
+    except (eventlogging.ValidationError, ValueError):
+        print('Status: ' + colorize('red', '✘ Invalid.'))
+        raise
+    return []
+
+httpd = make_server('', args.port, handle_event,
+                    handler_class=EventLoggingHandler)
+print("EventLogging DevServer running on port %s..." % args.port)
+httpd.serve_forever()
diff --git a/server/eventlogging/__init__.py b/server/eventlogging/__init__.py
index 43ced2e..0ca030f 100644
--- a/server/eventlogging/__init__.py
+++ b/server/eventlogging/__init__.py
@@ -27,3 +27,5 @@
 # should not have to know or care about. We thus provide a local binding
 # for :exc:`jsonschema.ValidationError`.
 from jsonschema import ValidationError
+
+__version__ = '0.5'
diff --git a/server/setup.py b/server/setup.py
index c066ca8..624e379 100644
--- a/server/setup.py
+++ b/server/setup.py
@@ -16,10 +16,12 @@
 # Workaround for <http://bugs.python.org/issue15881#msg170215>:
 import multiprocessing
 
+import eventlogging
+
 
 setup(
     name='eventlogging',
-    version='0.5',
+    version=eventlogging.__version__,
     license='GPL',
     author='Ori Livneh',
     author_email='[email protected]',
@@ -43,17 +45,19 @@
         'eventlogging',
     ),
     scripts=(
-        'bin/sv-alerts',
+        'bin/el-devserver',
         'bin/json2sql',
         'bin/log2json',
+        'bin/seqmon',
+        'bin/sv-alerts',
         'bin/udp2zmq',
         'bin/zmq2log',
-        'bin/seqmon',
         'bin/zmux',
     ),
     zip_safe=False,
     test_suite='tests',
     install_requires=(
+        "pygments>=1.5",
         "jsonschema>=0.7",
         "pyzmq>=2.1",
         "sqlalchemy>=0.7",

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I11d57c399764a080adc8d3706c046e571f609dba
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/EventLogging
Gerrit-Branch: master
Gerrit-Owner: Ori.livneh <[email protected]>

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

Reply via email to