From aa033aafbe3f7c03f10f0b518c35398a59838402 Mon Sep 17 00:00:00 2001 From: Brunobrno Date: Fri, 17 Oct 2025 00:09:26 +0200 Subject: [PATCH] saved --- CSV.py | 36 ++++++++++++++++ Dockerfile | 9 ++++ README.md | 27 ++++++++++++ docker-compose.yml | 67 +++++++++++++++++++++++++++++ flask_backend/Dockerfile | 9 ++++ flask_backend/Sender.py | 14 ++++++ flask_backend/Stomp_client.py | 25 +++++++++++ flask_backend/app.py | 20 +++++++++ flask_backend/templates/index.html | 19 ++++++++ misc/inputs/Input_payload.xml | 65 ++++++++++++++++++++++++++++ misc/inputs/Output_file_AMQ.json | 56 ++++++++++++++++++++++++ misc/output/Output_file.csv | 3 ++ misc/schéma.png | Bin 0 -> 46737 bytes requirements.txt | 3 ++ wso2/deployment.toml | 4 ++ 15 files changed, 357 insertions(+) create mode 100644 CSV.py create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 flask_backend/Dockerfile create mode 100644 flask_backend/Sender.py create mode 100644 flask_backend/Stomp_client.py create mode 100644 flask_backend/app.py create mode 100644 flask_backend/templates/index.html create mode 100644 misc/inputs/Input_payload.xml create mode 100644 misc/inputs/Output_file_AMQ.json create mode 100644 misc/output/Output_file.csv create mode 100644 misc/schéma.png create mode 100644 requirements.txt create mode 100644 wso2/deployment.toml diff --git a/CSV.py b/CSV.py new file mode 100644 index 0000000..c3653a5 --- /dev/null +++ b/CSV.py @@ -0,0 +1,36 @@ +import json, csv, os, time, stomp +from datetime import datetime +from flask_backend.Stomp_client import get_connection + +QUEUE_NAME = "/queue/testQueue" +OUTPUT_DIR = "/app/output" +os.makedirs(OUTPUT_DIR, exist_ok=True) + +class MyListener(stomp.ConnectionListener): + def on_message(self, frame): + try: + data = json.loads(frame.body) + except json.JSONDecodeError: + print("Received invalid JSON:", frame.body) + return + + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + filename = os.path.join(OUTPUT_DIR, f"message_{timestamp}.csv") + + try: + with open(filename, "w", newline="") as f: + writer = csv.writer(f) + writer.writerow(data.keys()) + writer.writerow(data.values()) + print(f"Saved CSV: {filename}") + except Exception as e: + print("Error writing CSV:", e) + +# Připojení k ActiveMQ s listenerem +listener = MyListener() +conn = get_connection(listener=listener) +conn.subscribe(destination=QUEUE_NAME, id=1, ack="auto") + +# keep process alive +while True: + time.sleep(1) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..17a6ac7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY requirements.txt . + +RUN pip install --no-cache-dir -r requirements.txt + +COPY . . \ No newline at end of file diff --git a/README.md b/README.md index 0017505..76a182e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,29 @@ # Titeto-WSO2-ActiveMQ +## WSO2 API Manager +3. Vytvor jednoduche rest api v WSO2 API manageru s resource POST. + + +## Flask +4. Vytvor Python script ktery bude fungovat jako rest API, a jeho endpoint pouzij v API manageru. + +5. Rest API bude prijmat XML jako input_payload. + +6. Rest API tento payload odesle na backend do python scriptu. + +## Sender.py +7. Vytvor JSON payload s mappingem viz. attachment a priklady output payloadu. + +8. Script posle payload jako zpravu do vytvorene Q v ActiveMQ. + +9. Posli vyslednou response s HTTP-SC. + +## Active MQ + +## CSV.py + +10. Vytvor dalsi script ktery bude naslouchat na vytvorenou Q. + +11. Vytvor CSV file dle prikladu viz. attachment. + +12. Uloz CSV s filename viz. diagram s aktualni timestampou, do libovolne slozky na lokalu. \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..82604c8 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,67 @@ +version: "3.8" + +services: + # 🐍 Flask REST API + flask_backend: + build: . + container_name: flask_backend + ports: + - "5000:5000" + networks: + - internal + command: ["python", "flask_backend/app.py"] + depends_on: + - activemq + + + # 📨 ActiveMQ + activemq: + image: rmohr/activemq:5.15.9 + container_name: activemq + ports: + - "61613:61613" # STOMP port (pro komunikaci s Pythonem) + - "8161:8161" # Web UI: http://localhost:8161/admin + environment: + ACTIVEMQ_ADMIN_LOGIN: admin + ACTIVEMQ_ADMIN_PASSWORD: admin + restart: always + networks: + - internal + + + receiving_consumer: + build: . + container_name: CSV_python + depends_on: + - activemq + environment: + MQ_HOST: activemq + MQ_PORT: 61613 + MQ_USER: admin + MQ_PASS: admin + command: ["python", "CSV.py"] + volumes: + - ./output:/app/output # ✅ CSV soubory se uloží do ./output na tvém disku + restart: on-failure + networks: + - internal + + # odešle na Flask API testovací XML zprávu + wso2apim: + image: wso2/wso2am:3.2.0 + container_name: wso2apim + volumes: + - ./wso2/deployment.toml:/home/wso2carbon/wso2am-3.2.0/repository/conf/deployment.toml + - ./data/activemq:/opt/activemq/data + ports: + - "9443:9443" # HTTPS Management Console + - "8280:8280" # HTTP Gateway + - "8243:8243" # HTTPS Gateway + environment: + - JAVA_OPTS=-Duser.timezone=UTC + networks: + - internal + +networks: + internal: + driver: bridge \ No newline at end of file diff --git a/flask_backend/Dockerfile b/flask_backend/Dockerfile new file mode 100644 index 0000000..8e898f3 --- /dev/null +++ b/flask_backend/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3.11-slim + +WORKDIR /app + +COPY ../requirements.txt . + +RUN pip install --no-cache-dir -r ../requirements.txt + +COPY . . \ No newline at end of file diff --git a/flask_backend/Sender.py b/flask_backend/Sender.py new file mode 100644 index 0000000..20d8beb --- /dev/null +++ b/flask_backend/Sender.py @@ -0,0 +1,14 @@ +import json +from Stomp_client import get_connection + +QUEUE_NAME = "/queue/testQueue" + +def send_to_queue(payload: dict): + """ + Posílá JSON payload do ActiveMQ queue, přijíma dic + """ + conn = get_connection() # připojení s retry loop + conn.send(destination=QUEUE_NAME, body=json.dumps(payload)) + print("Message sent to ActiveMQ:", payload) + conn.disconnect() + diff --git a/flask_backend/Stomp_client.py b/flask_backend/Stomp_client.py new file mode 100644 index 0000000..6e48f70 --- /dev/null +++ b/flask_backend/Stomp_client.py @@ -0,0 +1,25 @@ +import stomp, os, time + +MQ_HOST = os.getenv("MQ_HOST", "activemq") +MQ_PORT = int(os.getenv("MQ_PORT", 61613)) +MQ_USER = os.getenv("MQ_USER", "admin") +MQ_PASS = os.getenv("MQ_PASS", "admin") + +def get_connection(listener=None): + """ + Vrací připojený STOMP Connection objekt. + Pokud listener je None, připojení bude bez listeneru. + """ + conn = stomp.Connection12([(MQ_HOST, MQ_PORT)]) + if listener: + conn.set_listener("", listener) + + while True: + try: + conn.connect(MQ_USER, MQ_PASS, wait=True) + print("Connected to ActiveMQ") + break + except Exception as e: + print("Waiting for ActiveMQ to be ready...", e) + time.sleep(3) + return conn diff --git a/flask_backend/app.py b/flask_backend/app.py new file mode 100644 index 0000000..4efb997 --- /dev/null +++ b/flask_backend/app.py @@ -0,0 +1,20 @@ +from flask import Flask, request, jsonify +from Sender import send_to_queue + +app = Flask(__name__) + +@app.route("/send", methods=["POST"]) +def send(): + # očekává JSON payload + payload = request.get_json() + if not payload: + return jsonify({"error": "No JSON payload provided"}), 400 + + try: + send_to_queue(payload) # voláme funkci z sender.py + return jsonify({"status": "ok"}), 200 + except Exception as e: + return jsonify({"error": str(e)}), 500 + +if __name__ == "__main__": + app.run(host="0.0.0.0", port=5000) diff --git a/flask_backend/templates/index.html b/flask_backend/templates/index.html new file mode 100644 index 0000000..64e95f5 --- /dev/null +++ b/flask_backend/templates/index.html @@ -0,0 +1,19 @@ + + + + + + Document + + +

Upload the

+
+ +
+
+ +
+ + {{ message }} + + \ No newline at end of file diff --git a/misc/inputs/Input_payload.xml b/misc/inputs/Input_payload.xml new file mode 100644 index 0000000..c6582b2 --- /dev/null +++ b/misc/inputs/Input_payload.xml @@ -0,0 +1,65 @@ + + + + + + 59088032 + Jiri Novak + Vika +
+ StreetName + 4312 + SANDNES + NO + true +
+ StreetName 1A + NORWAY + +4793488400 + +4793488999 + testguy@gmail.com + 1962-10-01 + false + false +
+ + 59088033 + Tomas Novak + Vika +
+ Postboks 16 + 4318 + BERGEN + NO + true +
+ StreetName 1B + NORWAY + +4793488888 + testguy2@gmail.com + 1963-10-01 + false + false +
+ + 59088034 + Karel Novak + Vika +
+ StreetName + 4319 + STAVANGER + NO + true +
+ StreetName 1C + NORWAY + +4793488777 + testguy3@gmail.com + 1964-10-01 + false + false +
+
+
+
\ No newline at end of file diff --git a/misc/inputs/Output_file_AMQ.json b/misc/inputs/Output_file_AMQ.json new file mode 100644 index 0000000..879c9bf --- /dev/null +++ b/misc/inputs/Output_file_AMQ.json @@ -0,0 +1,56 @@ +{ + "list": [ + { + "id": 59088032, + "firstName": "Jiri Novak", + "lastName": "Vika", + "streetName": "StreetName", + "postCode": 4312, + "cityName": "SANDNES", + "countryCode": "NO", + "isPostBox": true, + "addressLine1": "StreetName 1A", + "country": "NORWAY", + "phoneNumber": 4793488400, + "cellularPhoneNumber": 4793488999, + "emailAddress": "testguy@gmail.com", + "dateOfBirth": "1962-10-01", + "hasSecretAddress": false, + "isReservedAgainstSalesMaterial": false + }, + { + "id": 59088033, + "firstName": "Tomas Novak", + "lastName": "Vika", + "streetName": "Postboks 16", + "postCode": 4318, + "cityName": "BERGEN", + "countryCode": "NO", + "isPostBox": true, + "addressLine1": "StreetName 1B", + "country": "NORWAY", + "phoneNumber": 4793488888, + "emailAddress": "testguy2@gmail.com", + "dateOfBirth": "1963-10-01", + "hasSecretAddress": false, + "isReservedAgainstSalesMaterial": false + }, + { + "id": 59088034, + "firstName": "Karel Novak", + "lastName": "Vika", + "streetName": "StreetName", + "postCode": 4319, + "cityName": "STAVANGER", + "countryCode": "NO", + "isPostBox": true, + "addressLine1": "StreetName 1C", + "country": "NORWAY", + "phoneNumber": 4793488777, + "emailAddress": "testguy3@gmail.com", + "dateOfBirth": "1964-10-01", + "hasSecretAddress": false, + "isReservedAgainstSalesMaterial": false + } + ] +} \ No newline at end of file diff --git a/misc/output/Output_file.csv b/misc/output/Output_file.csv new file mode 100644 index 0000000..fd1410d --- /dev/null +++ b/misc/output/Output_file.csv @@ -0,0 +1,3 @@ +list;59088032;Jiri Novak;Vika;StreetName;4312;Sandnes;NO;true;StreetName;StreetName 1A;NORWAY;+4793488400;+4793488999;testguy@gmail.com;1962-10-01;false;false +list;59088033;Tomas Novak;Vika;StreetName;4318;Bergen;NO;true;Postboks 16;StreetName 1B;NORWAY;+4793488888;;testguy2@gmail.com;1963-10-01;false;false +list;59088034;Karel Novak;Vika;StreetName;4319;Stavanger;NO;true;StreetName;StreetName 1C;NORWAY;+4793488777;;testguy3@gmail.com;1964-10-01;false;false \ No newline at end of file diff --git a/misc/schéma.png b/misc/schéma.png new file mode 100644 index 0000000000000000000000000000000000000000..0a9e67d2b93de825b6f1ce436ae252e2422d2c17 GIT binary patch literal 46737 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 literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6080ff6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +flask +stomp.py +xmltodict \ No newline at end of file diff --git a/wso2/deployment.toml b/wso2/deployment.toml new file mode 100644 index 0000000..c41dde9 --- /dev/null +++ b/wso2/deployment.toml @@ -0,0 +1,4 @@ +[super_admin] +username = "admin" +password = "admin" +create_admin_account = true