diff options
| author | 2018-05-22 22:12:43 +0200 | |
|---|---|---|
| committer | 2018-05-22 22:12:43 +0200 | |
| commit | f689ce549689b3192ce1f7510804495acfd7869d (patch) | |
| tree | 56ac7af58d1b9a8ea59a943e711e337a10220cdd /webapp | |
| parent | Delete test.py (diff) | |
adds webapp and docker-compose for more proof of concept
Diffstat (limited to 'webapp')
| -rw-r--r-- | webapp/rmq.py | 48 | ||||
| -rw-r--r-- | webapp/templates/index.html | 64 | ||||
| -rw-r--r-- | webapp/webapp.py | 39 | 
3 files changed, 151 insertions, 0 deletions
diff --git a/webapp/rmq.py b/webapp/rmq.py new file mode 100644 index 0000000..80d418a --- /dev/null +++ b/webapp/rmq.py @@ -0,0 +1,48 @@ +import os +import pika + +USERNAME      = 'guest' +PASSWORD      = 'guest' +HOST          = os.environ.get('RMQ_HOST', '172.17.0.2') +PORT          = 5672 +EXCHANGE      = 'exchange' +EXCHANGE_TYPE = 'direct' +QUEUE         = 'text' +ROUTING_KEY   = 'bacon' + +try: +    import docker +    client = docker.from_env() +    containers = client.containers.get('snekbox_pdrmq_1') +    print("Attempting to get rabbitmq host automatically") +    HOST = list(containers.attrs.get('NetworkSettings').get('Networks').values())[0]['IPAddress'] +    print(f"found {HOST}") +except: +    pass + +def send(message): +    credentials = pika.PlainCredentials(USERNAME, PASSWORD) +    connection = pika.BlockingConnection(pika.ConnectionParameters(HOST, PORT, '/', credentials)) +    properties = pika.BasicProperties(content_type='text/plain', delivery_mode=1) + +    channel = connection.channel() +    channel.queue_declare(queue=QUEUE, durable=False) +    channel.exchange_declare(exchange=EXCHANGE, exchange_type=EXCHANGE_TYPE) +    channel.queue_bind(exchange=EXCHANGE, queue=QUEUE, routing_key=ROUTING_KEY) + +    result = channel.basic_publish( +                exchange=EXCHANGE, +                routing_key=ROUTING_KEY, +                body=message, +                properties=properties +    ) + +    if result: +        print(f"""Connecting to\nhost:     {HOST}\nport:     {PORT}\nexchange: {EXCHANGE}\nqueue:    {QUEUE}""", flush=True) +        print(f"Sent: '{message}'") +    else: +        print("not delivered") + +    connection.close() + +#send('print("bacon is delicious")') diff --git a/webapp/templates/index.html b/webapp/templates/index.html new file mode 100644 index 0000000..f2213ff --- /dev/null +++ b/webapp/templates/index.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>WebSocket Test</title> +<script language="javascript" type="text/javascript"> + +var output; + +function init(){ +    output = document.getElementById("output"); +    testWebSocket(); +} + +function testWebSocket(){ +    var here = window.location.host; +    var wsUri = `ws://${here}/ws`; +    websocket = new WebSocket(wsUri); +    websocket.onopen = function(evt) { onOpen(evt) }; +    websocket.onclose = function(evt) { onClose(evt) }; +    websocket.onmessage = function(evt) { onMessage(evt) }; +    websocket.onerror = function(evt) { onError(evt) }; +} + +function onOpen(evt){ +    writeToScreen("CONNECTED"); +} + +function onClose(evt){ +    writeToScreen("DISCONNECTED"); +} + +function onMessage(evt){ +    writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>'); +    websocket.close(); +} + +function onError(evt){ +    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data); +} + +function sendMessage(message){ +    writeToScreen("SENT: " + message); +    websocket.send(message); +} + +function writeToScreen(message){ +    var pre = document.createElement("p"); +    pre.style.wordWrap = "break-word"; +    pre.innerHTML = message; +    output.appendChild(pre); +} + +function sendFromInput(){ +    var msg = document.getElementById("field1").value; +    sendMessage(msg) +} + +window.addEventListener("load", init, false); + +</script> + +<input type="text" id="field1" value="print('fsdf')"><br> +<button onclick="sendFromInput()">Send</button> + +<div id="output"></div> diff --git a/webapp/webapp.py b/webapp/webapp.py new file mode 100644 index 0000000..676fc27 --- /dev/null +++ b/webapp/webapp.py @@ -0,0 +1,39 @@ +import traceback + +from rmq import send as rmq_send +from flask import Flask +from flask import render_template +from flask_sockets import Sockets + +app = Flask(__name__) +sockets = Sockets(app) + [email protected]('/') +def index(): +    return render_template('index.html') + [email protected]('/ws') +def websocket_route(ws): +    try: +        while not ws.closed: +            message = ws.receive() + +            if not message: +                continue +            print(f"received '{message}'") + +            rmq_send(message) + +    except: +        print(traceback.format_exec()) + +    finally: +        if not ws.closed: +            ws.close() + +if __name__ == '__main__': +    #app.run(host='0.0.0.0', port=5000, debug=True) +    from gevent import pywsgi +    from geventwebsocket.handler import WebSocketHandler +    server = pywsgi.WSGIServer(('0.0.0.0', 5000), app, handler_class=WebSocketHandler) +    server.serve_forever()  |