Compare commits

...

2 Commits

Author SHA1 Message Date
herel b3426f7493 feat: add health check endpoint and suppress health check logs
Added a /health endpoint for application health monitoring

Implemented logging filter to suppress health check requests from logs

Updated Dockerfile and Kubernetes deployment to use the new health check endpoint

Incremented production image tag version
2025-09-04 00:42:53 +02:00
herel cadc34f797 chore: update dependencies and bump version to 1.0.5 2025-09-04 00:37:14 +02:00
5 changed files with 56 additions and 16 deletions
+3 -3
View File
@@ -1,5 +1,5 @@
# Use Python 3.11 slim image as base
FROM python:3.11-slim
# Use Python 3.13 slim image as base
FROM python:3.13-slim
# Set working directory
WORKDIR /app
@@ -42,7 +42,7 @@ EXPOSE 8000
# Health check
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8000/ || exit 1
CMD curl -f http://localhost:8000/health || exit 1
# Run the application
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
+17
View File
@@ -14,6 +14,17 @@ from fastapi.templating import Jinja2Templates
from pydantic import BaseModel
from fpdf import FPDF
import logging
# Custom filter to exclude health check logs
class HealthCheckFilter(logging.Filter):
def filter(self, record: logging.LogRecord) -> bool:
# Exclude health check requests from logs
return "GET /health " not in record.getMessage()
# Apply the filter to Uvicorn's access logger
logging.getLogger("uvicorn.access").addFilter(HealthCheckFilter())
app = FastAPI()
# S3 Configuration
@@ -464,6 +475,12 @@ async def bulk_download(filenames: str = Form(...)):
return {"error": f"Error downloading files: {str(e)}"}
@app.get("/health")
async def health_check():
"""Health check endpoint that returns the status of the application"""
return {"status": "healthy"}
if __name__ == "__main__":
import uvicorn
+2 -2
View File
@@ -46,7 +46,7 @@ spec:
# Liveness probe
livenessProbe:
httpGet:
path: /
path: /health
port: 8000
initialDelaySeconds: 90
periodSeconds: 10
@@ -55,7 +55,7 @@ spec:
# Readiness probe
readinessProbe:
httpGet:
path: /
path: /health
port: 8000
initialDelaySeconds: 5
periodSeconds: 10
@@ -13,7 +13,7 @@ resources:
images:
- name: math-exercises
newName: harbor.cl1.parano.ch/library/math-exercice
newTag: 1.0.2
newTag: 1.0.7
# Production-specific labels
+27 -4
View File
@@ -1,9 +1,32 @@
annotated-types==0.7.0
anyio==4.10.0
boto3==1.26.160
boto3-stubs==1.40.23
botocore==1.29.165
botocore-stubs==1.40.23
click==8.2.1
defusedxml==0.7.1
fastapi==0.116.1
fonttools==4.59.2
fpdf2==2.8.4
h11==0.16.0
idna==3.10
Jinja2==3.1.4
jmespath==1.0.1
MarkupSafe==3.0.2
pillow==11.3.0
fastapi==0.115.0
uvicorn==0.30.6
jinja2==3.1.4
pydantic==2.11.7
pydantic_core==2.33.2
python-dateutil==2.9.0.post0
python-multipart==0.0.9
boto3==1.34.0
s3transfer==0.6.2
six==1.17.0
sniffio==1.3.1
starlette==0.47.3
types-awscrt==0.27.6
types-fpdf2==2.8.4.20250822
types-s3transfer==0.13.1
typing-inspection==0.4.1
typing_extensions==4.15.0
urllib3==1.26.20
uvicorn==0.30.6