diff --git a/7project/backend/app/app.py b/7project/backend/app/app.py index 6bb0e5d..124ab69 100644 --- a/7project/backend/app/app.py +++ b/7project/backend/app/app.py @@ -1,3 +1,4 @@ +import json import logging import os import sys @@ -65,7 +66,6 @@ fastApi.include_router(auth_router) fastApi.include_router(categories_router) fastApi.include_router(transactions_router) - for h in list(logging.root.handlers): logging.root.removeHandler(h) @@ -78,7 +78,6 @@ _log_handler.setFormatter(_formatter) logging.root.setLevel(logging.INFO) logging.root.addHandler(_log_handler) - for _name in ("uvicorn", "uvicorn.error", "uvicorn.access"): _logger = logging.getLogger(_name) _logger.handlers = [_log_handler] @@ -161,16 +160,9 @@ async def authenticated_route(user: User = Depends(current_active_verified_user) return {"message": f"Hello {user.email}!"} -@fastApi.get("/debug/scrape/csas/all", tags=["debug"]) -async def debug_scrape_csas_all(): - logging.info("[Debug] Queueing CSAS scrape for all users via HTTP endpoint (Celery)") +@fastApi.get("/_cron", include_in_schema=False) +async def handle_cron(request: Request): + logging.info("[Cron] Triggering scheduled tasks via HTTP endpoint") + logging.info(json.dumps(request.headers)) task = load_all_transactions.delay() return {"status": "queued", "action": "csas_scrape_all", "task_id": getattr(task, 'id', None)} - - -@fastApi.post("/debug/scrape/csas/{user_id}", tags=["debug"]) -async def debug_scrape_csas_user(user_id: str, user: User = Depends(current_active_verified_user)): - logging.info("[Debug] Queueing CSAS scrape for single user via HTTP endpoint (Celery) | user_id=%s", user_id) - task = load_transactions.delay(user_id) - return {"status": "queued", "action": "csas_scrape_single", "user_id": user_id, - "task_id": getattr(task, 'id', None)} diff --git a/7project/charts/myapp-chart/templates/cron.yaml b/7project/charts/myapp-chart/templates/cron.yaml new file mode 100644 index 0000000..5c57284 --- /dev/null +++ b/7project/charts/myapp-chart/templates/cron.yaml @@ -0,0 +1,25 @@ +{{ - if .Values.cron.enabled }} +apiVersion: batch/v1 +kind: CronJob +metadata: + name: cronjob +spec: + schedule: {{ .Values.cron.schedule | quote }} + concurrencyPolicy: {{ .Values.cron.concurrencyPolicy | quote }} + jobTemplate: + spec: + template: + spec: + containers: + - name: cronjob + image: curlimages/curl:latest + imagePullPolicy: IfNotPresent + args: + - -sS + - -o + - /dev/null + - -w + - "%{http_code}" + - "{{ printf "%s://%s.%s.svc.cluster.local" .Values.cron.scheme .Values.app.name .Release.Namespace | quote }}{{ .Values.cron.endpoint }}" + restartPolicy: OnFailure +{{ - end }} \ No newline at end of file diff --git a/7project/charts/myapp-chart/values-prod.yaml b/7project/charts/myapp-chart/values-prod.yaml index b7100de..d0cd82c 100644 --- a/7project/charts/myapp-chart/values-prod.yaml +++ b/7project/charts/myapp-chart/values-prod.yaml @@ -5,3 +5,6 @@ app: worker: replicas: 3 + +cron: + enabled: true diff --git a/7project/charts/myapp-chart/values.yaml b/7project/charts/myapp-chart/values.yaml index d20fa70..b3bdb8c 100644 --- a/7project/charts/myapp-chart/values.yaml +++ b/7project/charts/myapp-chart/values.yaml @@ -35,6 +35,13 @@ worker: # Queue name for Celery worker and for CRD Queue mailQueueName: "mail_queue" +cron: + enabled: false + schedule: "*/5 * * * *" # every 5 minutes + scheme: "http" + endpoint: "/_cron" + concurrencyPolicy: "Forbid" + service: port: 80