From 9351a69ed11a58be40251bbe2322b5fa1f95efa9 Mon Sep 17 00:00:00 2001 From: Adar Nimrod <nimrod@shore.co.il> Date: Sun, 23 Feb 2020 13:54:43 +0200 Subject: [PATCH] Add worker, simplify structrue. --- Dockerfile | 2 +- docker-compose.yml | 14 +++++++++++++- requirements.txt | 2 +- server.py | 19 +++++++++++++++++++ tasks.py | 14 ++++++++++++++ waldorf/__init__.py | 0 waldorf/server.py | 10 ---------- 7 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 server.py create mode 100644 tasks.py delete mode 100644 waldorf/__init__.py delete mode 100644 waldorf/server.py diff --git a/Dockerfile b/Dockerfile index d235be9..461b558 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,5 +2,5 @@ FROM python:3.8 WORKDIR /opt/waldorf COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt -COPY waldorf ./waldorf +COPY *.py ./ USER nobody diff --git a/docker-compose.yml b/docker-compose.yml index 242dc2b..b824a31 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,9 +18,21 @@ services: build: context: ./ command: ["flask", "run", "--port", "8080", "--host", "0.0.0.0"] + depends_on: + - rabbitmq environment: - FLASK_APP: waldorf/server + FLASK_APP: server healthcheck: test: ["CMD-SHELL", "wget http://localhost:8080/ping || exit 1"] ports: - 8080:8080 + worker: + build: + context: ./ + command: ["celery", "worker", "--app", "tasks", "--loglevel", "info"] + depends_on: + - rabbitmq + environment: + BROKER_URL: amqp://waldorf:pass@rabbitmq/waldorf + healthcheck: + test: ["CMD-SHELL", "pgrep python || exit 1"] diff --git a/requirements.txt b/requirements.txt index 468914a..e91b62f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -celery[librabbitmq]>=4.4 +celery[py-amqp]>=4.4 flask>=1.1 diff --git a/server.py b/server.py new file mode 100644 index 0000000..78617eb --- /dev/null +++ b/server.py @@ -0,0 +1,19 @@ +"""Dummy web server using Flask.""" +from flask import Flask, request, jsonify +import tasks + +app = Flask(__name__) # pylint: disable=invalid-name + + +@app.route("/ping") +def ping(): + """Healthcheck.""" + return "pong" + + +@app.route("/log", methods=["POST"]) +def log(): + """Async log.""" + data = request.get_json() + tasks.log.apply_async(args=(data,)) + return jsonify(data) diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..3a73d5c --- /dev/null +++ b/tasks.py @@ -0,0 +1,14 @@ +"""Celery worker.""" +import logging +import os +from celery import Celery + + +BROKER_URL = os.getenv("BROKER_URL") +app = Celery("tasks", broker=BROKER_URL) # pylint: disable=invalid-name + + +@app.task +def log(message): + """Log message.""" + logging.info(f"Message: %s", message) diff --git a/waldorf/__init__.py b/waldorf/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/waldorf/server.py b/waldorf/server.py deleted file mode 100644 index ee41f97..0000000 --- a/waldorf/server.py +++ /dev/null @@ -1,10 +0,0 @@ -"""Dummy web server using Flask.""" -from flask import Flask - -app = Flask(__name__) # pylint: disable=invalid-name - - -@app.route("/ping") -def ping(): - """Healthcheck.""" - return "pong" -- GitLab