diff --git a/Dockerfile b/Dockerfile index b98491b..d976bb8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,21 @@ -FROM python:3.9-slim-bookworm +# FROM python:3.9-slim-bookworm +ARG BUILD_FROM +FROM $BUILD_FROM # Install cron -RUN apt-get update && apt-get -y install cron +# RUN apt-get update && apt-get -y install cron +# Install python3 and cron (dcron) +RUN apk add --no-cache \ + python3 \ + py3-pip \ + dcron WORKDIR /app +RUN python3 -m venv /app/venv +ENV PATH="/app/venv/bin:$PATH" +RUN source /app/venv/bin/activate + COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt diff --git a/config.yaml b/config.yaml index 6919746..06720a7 100644 --- a/config.yaml +++ b/config.yaml @@ -1,5 +1,5 @@ name: GoogleSheet Bot -version: "1.0.1" +version: "1.0.8" slug: googlesheet_bot description: Bot do automatyzacji zadań w Arkuszach Google. arch: @@ -19,3 +19,7 @@ schema: credentials_json: str run_hours: str debug: bool +# environment: +# CONFIG_CREDENTIALS_JSON: "{options.credentials_json}" +# CONFIG_RUN_HOURS: "{options.run_hours}" +# CONFIG_DEBUG: "{options.debug}" diff --git a/entrypoint.sh b/entrypoint.sh index e5c52a8..6b3c280 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,39 +1,62 @@ -#!/bin/bash +#!/usr/bin/with-contenv bashio set -e + +CONFIG_PATH=/data/options.json + +RUN_HOURS=$(bashio::config 'run_hours') +DEBUG_MODE=$(bashio::config 'debug') +CREDENTIALS_JSON=$(bashio::config 'credentials_json') + echo "---------------------------------" echo "Strefa czasowa kontenera:" echo "Date: $(date)" -echo "Tryb debugowania: ${CONFIG_DEBUG:-'false'}" -echo "DEBUG: CONFIG_RUN_HOURS='${CONFIG_RUN_HOURS}'" +echo "DEBUG: RUN_HOURS='${RUN_HOURS}'" +echo "DEBUG: DEBUG_MODE='${DEBUG_MODE}'" echo "---------------------------------" # Odczytaj opcję 'credentials_json' z konfiguracji dodatku i utwórz plik # Home Assistant udostępnia opcje jako zmienne środowiskowe z prefiksem CONFIG_ -echo "${CONFIG_CREDENTIALS_JSON}" > /app/credentials.json +if [ -n "${CREDENTIALS_JSON}" ]; then + echo "${CREDENTIALS_JSON}" > /app/credentials.json + echo "✅ Plik credentials.json został utworzony." +else + echo "⚠️ Brak danych w CREDENTIALS_JSON – plik credentials.json nie został utworzony!" +fi -echo "✅ Plik credentials.json został utworzony." # Odczytaj i oczyść godziny uruchomienia z konfiguracji -RUN_HOURS_CLEAN=$(echo "${CONFIG_RUN_HOURS}" | tr -d '"' | tr -d "'[:space:]") +RUN_HOURS_CLEAN=$(echo "${RUN_HOURS}" | tr -d '"' | tr -d "'[:space:]") if [ -z "$RUN_HOURS_CLEAN" ]; then echo "⚠️ Brak konfiguracji godzin! Używam wartości domyślnej: 9,13,16" RUN_HOURS_CLEAN="9,13,16" fi -# Odczytaj godziny uruchomienia z konfiguracji i stwórz zadania crona echo "Tworzę zadania crona dla godzin: ${RUN_HOURS_CLEAN}" -{ - # Główne zadanie aplikacji - echo "0 ${RUN_HOURS_CLEAN} * * * cd /app && /usr/local/bin/python main.py >> /proc/1/fd/1 2>/proc/1/fd/2"; - # Zadanie "heartbeat" - co godzinę wypisuje datę do logów - echo "* * * * * date >> /proc/1/fd/1 2>/proc/1/fd/2"; -} | crontab - -echo "✅ Zadania crona zostały załadowane (główne zadanie + cogodzinny heartbeat)." +# Tworzymy tymczasowy plik z zadaniami crona +CRONFILE=$(mktemp) + +# Główne zadanie aplikacji +echo "0 ${RUN_HOURS_CLEAN} * * * cd /app && /app/venv/bin/python main.py >> /proc/1/fd/1 2>/proc/1/fd/2" >> "$CRONFILE" + +# Zadanie heartbeat tylko jeśli DEBUG=true +if [ "${DEBUG_MODE:-false}" = "true" ]; then + echo "* * * * * date >> /proc/1/fd/1 2>/proc/1/fd/2" >> "$CRONFILE" + echo "✅ Dodano heartbeat do crona (DEBUG=true)" +else + echo "ℹ️ DEBUG jest wyłączony lub nieustawiony — heartbeat pominięty" +fi + +# Wczytanie zadań do crontaba +crontab "$CRONFILE" +rm "$CRONFILE" + +echo "✅ Zadania crona zostały załadowane." # Uruchom usługę cron na pierwszym planie, aby kontener się nie zamknął echo "🚀 Uruchamiam usługę cron..." -cron -f \ No newline at end of file +# cron -f +exec crond -f -l 2 diff --git a/processing.py b/processing.py index a32b8c4..8e45f5b 100644 --- a/processing.py +++ b/processing.py @@ -64,20 +64,23 @@ def process_row(row, mayo, counter): if not link: return None - logging.info(f"\n🔗 Sprawdzam: {link}") + logging.debug(f"\n🔗 Sprawdzam: {link}") try: info = mayo.get_order_info(link) order_number = info["order_number"] model = info["model"] - logging.info(f"Nr z arkusza: {nr_zam}") - logging.info(f"Nr ze strony: {order_number}") - logging.info(f"Model: {model}") if normalize(order_number) == normalize(nr_zam): - logging.info("✅ Numer się zgadza") + logging.debug("✅ Numer się zgadza") + logging.debug(f"Nr z arkusza: {nr_zam}") + logging.debug(f"Nr ze strony: {order_number}") + logging.debug(f"Model: {model}") else: logging.warning("⚠️ Numer NIE pasuje!") + logging.warning(f"Nr z arkusza: {nr_zam}") + logging.warning(f"Nr ze strony: {order_number}") + logging.warning(f"Model: {model}") row_data = [ counter,