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
