From 39bf6b42ee75fe5992e252f110e6722339b0135d Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 24 2015 13:18:27 +0000 Subject: [PATCH 1/5] Add a second server listing the number of connections opened on the first one --- diff --git a/ev-server/pagure-stream-server.py b/ev-server/pagure-stream-server.py index 266af55..07f7188 100644 --- a/ev-server/pagure-stream-server.py +++ b/ev-server/pagure-stream-server.py @@ -40,9 +40,7 @@ import pagure import pagure.lib from pagure.exceptions import PagureEvException - -clients = {} - +SERVER = None def get_obj_from_path(path): """ Return the Ticket or Request object based on the path provided. @@ -170,7 +168,29 @@ def handle_client(client_reader, client_writer): client_writer.close() +@trollius.coroutine +def stats(client_reader, client_writer): + global SERVER + + try: + log.info('Clients: %s', SERVER.active_count) + client_writer.write(( + "HTTP/1.0 200 OK\n" + "Cache: nocache\n\n" + ).encode()) + client_writer.write(('data: %s\n\n' % SERVER.active_count).encode()) + yield trollius.From(client_writer.drain()) + + except trollius.ConnectionResetError, err: + print err + pass + finally: + client_writer.close() + return + + def main(): + global SERVER try: loop = trollius.get_event_loop() @@ -179,8 +199,17 @@ def main(): host=None, port=pagure.APP.config['EVENTSOURCE_PORT'], loop=loop) - server = loop.run_until_complete(coro) - print('Serving on {}'.format(server.sockets[0].getsockname())) + SERVER = loop.run_until_complete(coro) + if pagure.APP.config.get('EV_STATS_PORT'): + stats_coro = trollius.start_server( + stats, + host=None, + port=pagure.APP.config.get('EV_STATS_PORT'), + loop=loop) + stats_server = loop.run_until_complete(stats_coro) + print('Serving server at {}'.format(SERVER.sockets[0].getsockname())) + print('Serving stats at {}'.format( + stats_server.sockets[0].getsockname())) loop.run_forever() except KeyboardInterrupt: pass From af9aabb406a48e98b2c00e3b512beb1a01491096 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 26 2015 08:29:41 +0000 Subject: [PATCH 2/5] Use calls to log instead of prints --- diff --git a/ev-server/pagure-stream-server.py b/ev-server/pagure-stream-server.py index 07f7188..5980b7b 100644 --- a/ev-server/pagure-stream-server.py +++ b/ev-server/pagure-stream-server.py @@ -182,7 +182,7 @@ def stats(client_reader, client_writer): yield trollius.From(client_writer.drain()) except trollius.ConnectionResetError, err: - print err + log.info(err) pass finally: client_writer.close() @@ -207,8 +207,8 @@ def main(): port=pagure.APP.config.get('EV_STATS_PORT'), loop=loop) stats_server = loop.run_until_complete(stats_coro) - print('Serving server at {}'.format(SERVER.sockets[0].getsockname())) - print('Serving stats at {}'.format( + log.info('Serving server at {}'.format(SERVER.sockets[0].getsockname())) + log.info('Serving stats at {}'.format( stats_server.sockets[0].getsockname())) loop.run_forever() except KeyboardInterrupt: From 134f0e2055ea0a60c1d6c632d1e90fd1b72ea182 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 26 2015 08:29:52 +0000 Subject: [PATCH 3/5] Document the EV_STATS_PORT configuration key in the sample configuration file --- diff --git a/files/pagure.cfg.sample b/files/pagure.cfg.sample index 263dc78..8d20c25 100644 --- a/files/pagure.cfg.sample +++ b/files/pagure.cfg.sample @@ -133,7 +133,10 @@ REDIS_DB = 0 # as the one specified in EVENTSOURCE_SOURCE or a different one if you # have something running in front of the server such as apache or stunnel). EVENTSOURCE_PORT = 8080 - +# If this port is specified, the event source server will run another server +# at this port and will provide information about the number of active +# connections running on the first (main) event source server +#EV_STATS_PORT = 8888 # Authentication related configuration option From d8a38d6640bf74e597c9edd94846c356ecefb3fb Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 26 2015 08:34:18 +0000 Subject: [PATCH 4/5] Fix calling log.info to avoid relying on a non-instantiated variable --- diff --git a/ev-server/pagure-stream-server.py b/ev-server/pagure-stream-server.py index 5980b7b..f0143cf 100644 --- a/ev-server/pagure-stream-server.py +++ b/ev-server/pagure-stream-server.py @@ -200,6 +200,7 @@ def main(): port=pagure.APP.config['EVENTSOURCE_PORT'], loop=loop) SERVER = loop.run_until_complete(coro) + log.info('Serving server at {}'.format(SERVER.sockets[0].getsockname())) if pagure.APP.config.get('EV_STATS_PORT'): stats_coro = trollius.start_server( stats, @@ -207,9 +208,8 @@ def main(): port=pagure.APP.config.get('EV_STATS_PORT'), loop=loop) stats_server = loop.run_until_complete(stats_coro) - log.info('Serving server at {}'.format(SERVER.sockets[0].getsockname())) - log.info('Serving stats at {}'.format( - stats_server.sockets[0].getsockname())) + log.info('Serving stats at {}'.format( + stats_server.sockets[0].getsockname())) loop.run_forever() except KeyboardInterrupt: pass From c483ff8993886b7109636e8e93811b4fce16b7c2 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Jun 30 2015 12:16:05 +0000 Subject: [PATCH 5/5] Drop un-necessary call to global, thanks @ralph @ralphbean --- diff --git a/ev-server/pagure-stream-server.py b/ev-server/pagure-stream-server.py index f0143cf..8d14f82 100644 --- a/ev-server/pagure-stream-server.py +++ b/ev-server/pagure-stream-server.py @@ -170,7 +170,6 @@ def handle_client(client_reader, client_writer): @trollius.coroutine def stats(client_reader, client_writer): - global SERVER try: log.info('Clients: %s', SERVER.active_count)