From 4e4b2df56a1a23c2686f80c51c64b429591e4eb0 Mon Sep 17 00:00:00 2001 From: manuellaiv <13521051@std.stei.itb.ac.id> Date: Thu, 9 Jan 2025 00:18:29 +0700 Subject: [PATCH] [Feat] Backend to trigger airflow --- backend/app.py | 55 ++++++++++++++++++++++++++++++++++++++++ backend/requirements.txt | 4 +++ 2 files changed, 59 insertions(+) create mode 100644 backend/app.py create mode 100644 backend/requirements.txt diff --git a/backend/app.py b/backend/app.py new file mode 100644 index 0000000..d1a4980 --- /dev/null +++ b/backend/app.py @@ -0,0 +1,55 @@ +from flask import Flask, request, jsonify +from flask_cors import CORS +import requests +import json +from dotenv import load_dotenv +import os + +load_dotenv() + +app = Flask(__name__) + +CORS(app, origins=[os.getenv("FRONTEND_URL")]) + +AIRFLOW_BASE_URL = os.getenv("AIRFLOW_BASE_URL") +AIRFLOW_DAG_ID = os.getenv("AIRFLOW_DAG_ID") +AIRFLOW_USERNAME = os.getenv("AIRFLOW_USERNAME") +AIRFLOW_PASSWORD = os.getenv("AIRFLOW_PASSWORD") + +@app.route("/", methods=["GET", "POST"]) +def index(): + if request.method == "POST": + data = request.get_json() + print("Data received:", data) + trigger_dag(data) + return jsonify({"message": "Data submitted successfully!"}) + + return jsonify({"message": "Hello, World!"}) + + +def trigger_dag(payload): + """ + Trigger Airflow DAG dengan REST API + """ + try: + url = f"{AIRFLOW_BASE_URL}/api/v1/dags/{AIRFLOW_DAG_ID}/dagRuns" + + headers = {"Content-Type": "application/json"} + data = {"conf": payload} + + response = requests.post( + url, + headers=headers, + auth=(AIRFLOW_USERNAME, AIRFLOW_PASSWORD), + data=json.dumps(data) + ) + + response.raise_for_status() + + print(f"DAG triggered successfully: {response.json()}") + except requests.exceptions.RequestException as e: + print(f"Error triggering DAG: {e}") + + +if __name__ == "__main__": + app.run(host="0.0.0.0", port=8000) \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..a509e27 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,4 @@ +flask +requests +python-dotenv +flask-cors \ No newline at end of file -- GitLab