From b6e97fb00bd6514ecc4ffca843e8a7f09573fd87 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Sun, 7 May 2023 23:12:12 +0200
Subject: [PATCH] Fixed both Python services

---
 dbrepo-analyse-service/Dockerfile       | 11 +++++------
 dbrepo-analyse-service/healthcheck.sh   |  5 +++++
 dbrepo-analyse-service/service_ready    | 11 -----------
 dbrepo-semantics-service/Dockerfile     | 11 ++++-------
 dbrepo-semantics-service/healthcheck.sh |  5 +++++
 dbrepo-semantics-service/pywsgi.py      |  2 --
 dbrepo-semantics-service/service_ready  |  6 ------
 7 files changed, 19 insertions(+), 32 deletions(-)
 create mode 100644 dbrepo-analyse-service/healthcheck.sh
 delete mode 100644 dbrepo-analyse-service/service_ready
 create mode 100644 dbrepo-semantics-service/healthcheck.sh
 delete mode 100644 dbrepo-semantics-service/service_ready

diff --git a/dbrepo-analyse-service/Dockerfile b/dbrepo-analyse-service/Dockerfile
index d442cb5f68..802686ed74 100644
--- a/dbrepo-analyse-service/Dockerfile
+++ b/dbrepo-analyse-service/Dockerfile
@@ -1,11 +1,13 @@
 FROM python:3.9-alpine
 MAINTAINER Martin Weise <martin.weise@tuwien.ac.at>
 
-RUN apk update && apk --no-cache add build-base gcc python3-dev libpq-dev libffi-dev py3-pandas \
+RUN apk update && apk --no-cache add build-base gcc python3-dev libpq-dev libffi-dev bash curl py3-pandas \
     py3-sqlalchemy py3-requests py3-gevent py3-psycopg2
 
 COPY ./requirements.txt ./requirements.txt
-RUN pip install -r ./requirements.txt
+COPY ./healthcheck.sh ./healthcheck.sh
+
+RUN pip install -r requirements.txt > /dev/null
 
 WORKDIR /app
 
@@ -15,13 +17,10 @@ ENV PORT_APP=5000
 ENV FLASK_ENV=production
 ENV HOSTNAME=analyse-service
 
-HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD ./service_ready
+HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD ["bash", "/app/healthcheck.sh"]
 
 COPY ./as-yml/ ./as-yml/
 COPY ./*.py ./
-COPY ./service_ready ./
-
-RUN chmod +x ./service_ready
 
 EXPOSE $PORT_APP
 
diff --git a/dbrepo-analyse-service/healthcheck.sh b/dbrepo-analyse-service/healthcheck.sh
new file mode 100644
index 0000000000..01dd083f37
--- /dev/null
+++ b/dbrepo-analyse-service/healthcheck.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+HTTP_CODE=$(curl --silent --output /dev/stderr --write-out "%{http_code}" 'http://0.0.0.0:5000/metrics')
+if test $HTTP_CODE -ne 200; then
+  exit 1
+fi
\ No newline at end of file
diff --git a/dbrepo-analyse-service/service_ready b/dbrepo-analyse-service/service_ready
deleted file mode 100644
index c08320ed21..0000000000
--- a/dbrepo-analyse-service/service_ready
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/local/bin/python
-import socket
-sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-result = sock.connect_ex(('127.0.0.1', 5000))
-if result == 0:
-   print("Port is open")
-   exit(0)
-else:
-   print("Port is not open")
-   exit(1)
-sock.close()
\ No newline at end of file
diff --git a/dbrepo-semantics-service/Dockerfile b/dbrepo-semantics-service/Dockerfile
index 07f4c1abb1..d676ca3f38 100644
--- a/dbrepo-semantics-service/Dockerfile
+++ b/dbrepo-semantics-service/Dockerfile
@@ -2,7 +2,7 @@ FROM python:3.9-alpine
 MAINTAINER Martin Weise <martin.weise@tuwien.ac.at>
 
 RUN apk update && apk --no-cache add build-base gcc python3-dev libpq-dev libffi-dev mariadb-dev mariadb-connector-c \
-    mariadb-connector-c-dev py3-pandas py3-sqlalchemy py3-requests py3-gevent py3-psycopg2
+    mariadb-connector-c-dev curl bash py3-pandas py3-sqlalchemy py3-requests py3-gevent py3-psycopg2
 
 COPY ./requirements.txt ./requirements.txt
 RUN pip install -r ./requirements.txt
@@ -14,7 +14,6 @@ ENV FLASK_RUN_HOST=0.0.0.0
 ENV PORT_APP=5010
 ENV FLASK_DEBUG=0
 ENV HOSTNAME=semantics-service
-ENV READY_FILE=/ready
 ENV LOG_LEVEL=debug
 ENV METADATA_DB=fda
 ENV METADATA_USERNAME=root
@@ -22,14 +21,12 @@ ENV METADATA_PASSWORD=dbrepo
 ENV JWT_ISSUER=http://localhost:8080/realms/dbrepo
 ENV JWT_PUBKEY=public-key
 
-COPY requirements.txt requirements.txt
+COPY ./requirements.txt ./requirements.txt
+COPY ./healthcheck.sh ./healthcheck.sh
 
 RUN pip install -r requirements.txt > /dev/null
 
-COPY ./service_ready /usr/bin
-RUN chmod +x /usr/bin/service_ready
-
-HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD service_ready
+HEALTHCHECK --interval=10s --timeout=5s --retries=12 CMD ["bash", "/app/healthcheck.sh"]
 
 EXPOSE $PORT_APP
 
diff --git a/dbrepo-semantics-service/healthcheck.sh b/dbrepo-semantics-service/healthcheck.sh
new file mode 100644
index 0000000000..0854264b62
--- /dev/null
+++ b/dbrepo-semantics-service/healthcheck.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+HTTP_CODE=$(curl --silent --output /dev/stderr --write-out "%{http_code}" 'http://0.0.0.0:5010/metrics')
+if test $HTTP_CODE -ne 200; then
+  exit 1
+fi
\ No newline at end of file
diff --git a/dbrepo-semantics-service/pywsgi.py b/dbrepo-semantics-service/pywsgi.py
index 73578a6f8b..ed26090cef 100644
--- a/dbrepo-semantics-service/pywsgi.py
+++ b/dbrepo-semantics-service/pywsgi.py
@@ -10,6 +10,4 @@ path = os.getenv('READY_FILE', './ready')
 logging.basicConfig(format='%(asctime)s %(levelname)-6s %(message)s', level=logging.DEBUG)
 
 http_server = WSGIServer(listener=(rest_server_host, rest_server_port), application=app, log=logging)
-with open(path, 'w') as f:
-    logging.info(f'Service is ready, create file at {path}')
 http_server.serve_forever()
diff --git a/dbrepo-semantics-service/service_ready b/dbrepo-semantics-service/service_ready
deleted file mode 100644
index 52b578bd32..0000000000
--- a/dbrepo-semantics-service/service_ready
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-if [ -f "${READY_FILE}" ]; then
-  echo "service is ready and accepting connections"
-  exit 0
-fi
-exit 1
\ No newline at end of file
-- 
GitLab