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() |