Skip to content

Instantly share code, notes, and snippets.

@theacodes
Created September 6, 2014 18:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save theacodes/f4cee187134edb3ac919 to your computer and use it in GitHub Desktop.
Save theacodes/f4cee187134edb3ac919 to your computer and use it in GitHub Desktop.
Gevent based log server
#!/usr/bin/env python
from gevent import monkey
monkey.patch_all()
monkey.patch_sys(stdin=True, stdout=False, stderr=False)
import gevent
from gevent.queue import Queue
import signal
import sys
from socketio.namespace import BaseNamespace
from socketio.mixins import BroadcastMixin
from .web_server import make_server
q = Queue()
def producer():
while True:
line = sys.stdin.readline()
q.put(line)
class LogNamespace(BaseNamespace, BroadcastMixin):
def recv_connect(self):
def sendlogs():
while True:
val = q.get(True)
self.emit('log', {'line': val})
self.spawn(sendlogs)
def main():
gevent.signal(signal.SIGQUIT, gevent.kill)
server = make_server({
'/logs': LogNamespace
})
greenlets = [
gevent.spawn(producer)
]
try:
server.start()
print 'Log webserver running on http://127.0.0.1:51324'
gevent.joinall(greenlets)
except KeyboardInterrupt:
print "Exiting..."
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment