From 3519df42990946b0c2d027c08b737bdbed5043a7 Mon Sep 17 00:00:00 2001 From: Kevin Alberts Date: Tue, 15 Jul 2025 13:46:48 +0200 Subject: [PATCH] Initial code --- Dockerfile | 20 ++++++++++++++ http_test_server.py | 25 ++++++++++++++++++ multiplexer.py | 64 +++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 2 ++ start.sh | 3 +++ 5 files changed, 114 insertions(+) create mode 100644 Dockerfile create mode 100644 http_test_server.py create mode 100644 multiplexer.py create mode 100644 requirements.txt create mode 100644 start.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8208864 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +# Then build the actual amelie docker image +FROM python:latest + +# Set /usr/src/app as startup working directory +WORKDIR /usr/src/app + +# Install python requirements +COPY requirements.txt ./ +RUN pip install --no-cache-dir --upgrade pip +RUN pip install --no-cache-dir -r requirements.txt + +# Copy sources +COPY . . + +# Expose the web port +EXPOSE 8000 + +# Start the website +CMD ["/usr/src/app/start.sh"] + diff --git a/http_test_server.py b/http_test_server.py new file mode 100644 index 0000000..a9c2f09 --- /dev/null +++ b/http_test_server.py @@ -0,0 +1,25 @@ +from http.server import BaseHTTPRequestHandler, HTTPServer + +import os + +PORT = int(os.getenv("PORT", "8000")) + +class handler(BaseHTTPRequestHandler): + def do_GET(self): + self.send_response(200) + self.send_header('Content-type','text/html') + self.end_headers() + + message = "Hello, World! Here is a GET response" + self.wfile.write(bytes(message, "utf8")) + def do_POST(self): + self.send_response(200) + self.send_header('Content-type','application/json') + self.end_headers() + + message = "{\"hello\": \"response\"}" + self.wfile.write(bytes(message, "utf8")) + +with HTTPServer(('', PORT), handler) as server: + server.serve_forever() + diff --git a/multiplexer.py b/multiplexer.py new file mode 100644 index 0000000..0e84dce --- /dev/null +++ b/multiplexer.py @@ -0,0 +1,64 @@ +from flask import Flask, request, jsonify + +import requests +import os + + +app = Flask(__name__) + + +REITTI_BASE_URL = os.getenv("REITTI_BASE_URL", None) +REITTI_API_KEY = os.getenv("REITTI_API_KEY", None) + +DAWARICH_BASE_URL = os.getenv("DAWARICH_BASE_URL", None) +DAWARICH_API_KEY = os.getenv("DAWARICH_API_KEY", None) + + +@app.route('/') +def index(): + return "OK" + +@app.route('/ingest', methods=['POST']) +def ingest_request(): + data = request.get_json() + + errors = [] + + try: + if REITTI_BASE_URL is None or REITTI_API_KEY is None: + raise ValueError("Reitti API URL or Key is not configured!") + + response1 = requests.post( + REITTI_BASE_URL, + 'http://service1.com/api', + json=data, + headers=request.headers, + params={'api_key': REITTI_API_KEY} + ) + + except Exception as e: + app.logger.error(f'Error forwarding request to Reitti: {str(e)}') + errors.append({'service': 'reitti', 'status': 'error', 'message': str(e)}) + + try: + if DAWARICH_BASE_URL is None or DAWARICH_API_KEY is None: + raise ValueError("Dawarich API URL or Key is not configured!") + + response2 = requests.post( + DAWARICH_BASE_URL, + json=data, + headers=request.headers, + params={'api_key': DAWARICH_API_KEY} + ) + + return jsonify({'status': 'success'}), 200 + + except Exception as e: + app.logger.error(f'Error forwarding request to Dawarich: {str(e)}') + errors.append({'service': 'dawarich', 'status': 'error', 'message': str(e)}) + + return jsonify(errors), 500 + +if __name__ == '__main__': + app.run(host="0.0.0.0", port=8000) + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ba0d8cd --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +requests +Flask diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..409c87e --- /dev/null +++ b/start.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +python ./multiplexer.py +