aboutsummaryrefslogtreecommitdiffstats
path: root/webapp
diff options
context:
space:
mode:
authorGravatar Christopher Baklid <[email protected]>2018-05-22 22:12:43 +0200
committerGravatar Christopher Baklid <[email protected]>2018-05-22 22:12:43 +0200
commitf689ce549689b3192ce1f7510804495acfd7869d (patch)
tree56ac7af58d1b9a8ea59a943e711e337a10220cdd /webapp
parentDelete test.py (diff)
adds webapp and docker-compose for more proof of concept
Diffstat (limited to 'webapp')
-rw-r--r--webapp/rmq.py48
-rw-r--r--webapp/templates/index.html64
-rw-r--r--webapp/webapp.py39
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)
+
+def index():
+ return render_template('index.html')
+
+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()