From 016a249153de2bf0e5e24f90e729b99a042a58e9 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Thu, 15 Jan 2026 11:13:49 +0100 Subject: [PATCH] added tools and bugfix --- glance-system/glance-helper.yaml | 55 ++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/glance-system/glance-helper.yaml b/glance-system/glance-helper.yaml index bebb3ab..a15f514 100644 --- a/glance-system/glance-helper.yaml +++ b/glance-system/glance-helper.yaml @@ -27,7 +27,7 @@ spec: spec: containers: - name: glance-helper - image: python:3.12-slim + image: python:3.12-bookworm imagePullPolicy: IfNotPresent env: - name: IDOKEP_URL @@ -39,21 +39,29 @@ spec: - name: TANDOOR_PUBLIC_URL value: https://tandoor.dooplex.hu - name: TANDOOR_TOKEN - value: 'tda_8a8b169c_5d1f_4962_83a2_0f2719c7d61a' + value: tda_8a8b169c_5d1f_4962_83a2_0f2719c7d61a - name: GLANCE_HELPER_PUBLIC_URL value: https://glance-helper.dooplex.hu - name: DATA_DIR value: /data - name: GLANCE_HELPER_KEY - value: 'oplQqnLnJK2vErRVYJpvVUcSDBOSbCHZSbsYY2bwSifgTMfT' + value: oplQqnLnJK2vErRVYJpvVUcSDBOSbCHZSbsYY2bwSifgTMfT ports: - containerPort: 8000 command: - /bin/sh - -lc args: - - 'pip install --no-cache-dir fastapi uvicorn requests beautifulsoup4 prometheus-client - && + - 'set -eux; + + apt-get update; + + apt-get install -y --no-install-recommends curl ca-certificates iputils-ping + dnsutils; + + rm -rf /var/lib/apt/lists/*; + + pip install --no-cache-dir fastapi uvicorn requests beautifulsoup4 prometheus-client; python -c "import uvicorn; uvicorn.run(''app:APP'', host=''0.0.0.0'', port=8000)" @@ -79,24 +87,31 @@ metadata: namespace: glance-system data: app.py: "import os\nimport time\nimport re\nfrom typing import List, Dict, Any,\ - \ Optional\n\nimport json\nimport random\nfrom datetime import datetime\nfrom zoneinfo import ZoneInfo\nfrom pathlib import Path\nfrom urllib.parse import urlparse, urlunparse\n\nimport requests\nfrom bs4 import BeautifulSoup\nfrom fastapi import\ - \ FastAPI, Response, Request, HTTPException, Query\nfrom fastapi.responses import\ - \ JSONResponse, RedirectResponse\nfrom prometheus_client import Counter, Histogram,\ - \ Gauge, generate_latest, CONTENT_TYPE_LATEST\n\nAPP = FastAPI()\n\nIDOKEP_URL\ - \ = os.getenv(\n \"IDOKEP_URL\",\n \"https://www.idokep.hu/idojaras/Budapest%20VIII.%20ker\"\ + \ Optional\n\nimport json\nimport random\nfrom datetime import datetime\nfrom\ + \ zoneinfo import ZoneInfo\nfrom pathlib import Path\nfrom urllib.parse import\ + \ urlparse, urlunparse\n\nimport requests\nfrom bs4 import BeautifulSoup\nfrom\ + \ fastapi import FastAPI, Response, Request, HTTPException, Query\nfrom fastapi.responses\ + \ import JSONResponse, RedirectResponse\nfrom prometheus_client import Counter,\ + \ Histogram, Gauge, generate_latest, CONTENT_TYPE_LATEST\n\nAPP = FastAPI()\n\n\ + IDOKEP_URL = os.getenv(\n \"IDOKEP_URL\",\n \"https://www.idokep.hu/idojaras/Budapest%20VIII.%20ker\"\ ,\n)\nPLACE_NAME = os.getenv(\"PLACE_NAME\", \"Budapest VIII. ker\")\nSOURCE_NAME\ \ = \"Id\u0151k\xE9p\"\n\nUA = os.getenv(\n \"USER_AGENT\",\n \"Mozilla/5.0\ \ (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome Safari\",\n\ - )\n\n# Prometheus metrics (optional)\nSCRAPES = Counter(\"idokep_scrapes_total\"\ - , \"Total Id\u0151k\xE9p scrapes\", [\"place\", \"status\"])\nSCRAPE_SECONDS =\ - \ Histogram(\"idokep_scrape_seconds\", \"Id\u0151k\xE9p scrape duration in seconds\"\ - , [\"place\"])\nCURRENT_TEMP = Gauge(\"idokep_current_temp_c\", \"Current temperature\ - \ in Celsius\", [\"place\"])\nDAILY_TMIN = Gauge(\"idokep_daily_tmin_c\", \"Daily\ - \ minimum temperature in Celsius\", [\"place\", \"dow\"])\nDAILY_TMAX = Gauge(\"\ - idokep_daily_tmax_c\", \"Daily maximum temperature in Celsius\", [\"place\", \"\ - dow\"])\nHOURLY_TEMP = Gauge(\"idokep_hourly_temp_c\", \"Hourly temperature in\ - \ Celsius\", [\"place\", \"time\"])\n\n\ndef _abs_url(maybe_relative: Optional[str])\ - \ -> Optional[str]:\n if not maybe_relative:\n return None\n if maybe_relative.startswith(\"\ + )\n\n# Glance-helper config\nDATA_DIR = os.getenv(\"DATA_DIR\", \"/data\")\nTANDOOR_INTERNAL_URL\ + \ = os.getenv(\"TANDOOR_INTERNAL_URL\", \"\").rstrip(\"/\")\nTANDOOR_PUBLIC_URL\ + \ = os.getenv(\"TANDOOR_PUBLIC_URL\", \"\").rstrip(\"/\")\nGLANCE_HELPER_PUBLIC_URL\ + \ = os.getenv(\"GLANCE_HELPER_PUBLIC_URL\", \"\").rstrip(\"/\")\nGLANCE_HELPER_KEY\ + \ = os.getenv(\"GLANCE_HELPER_KEY\", \"\")\n\n\n# Prometheus metrics (optional)\n\ + SCRAPES = Counter(\"idokep_scrapes_total\", \"Total Id\u0151k\xE9p scrapes\",\ + \ [\"place\", \"status\"])\nSCRAPE_SECONDS = Histogram(\"idokep_scrape_seconds\"\ + , \"Id\u0151k\xE9p scrape duration in seconds\", [\"place\"])\nCURRENT_TEMP =\ + \ Gauge(\"idokep_current_temp_c\", \"Current temperature in Celsius\", [\"place\"\ + ])\nDAILY_TMIN = Gauge(\"idokep_daily_tmin_c\", \"Daily minimum temperature in\ + \ Celsius\", [\"place\", \"dow\"])\nDAILY_TMAX = Gauge(\"idokep_daily_tmax_c\"\ + , \"Daily maximum temperature in Celsius\", [\"place\", \"dow\"])\nHOURLY_TEMP\ + \ = Gauge(\"idokep_hourly_temp_c\", \"Hourly temperature in Celsius\", [\"place\"\ + , \"time\"])\n\n\ndef _abs_url(maybe_relative: Optional[str]) -> Optional[str]:\n\ + \ if not maybe_relative:\n return None\n if maybe_relative.startswith(\"\ http://\") or maybe_relative.startswith(\"https://\"):\n return maybe_relative\n\ \ # Id\u0151k\xE9p uses /assets/... paths\n return \"https://www.idokep.hu\"\ \ + maybe_relative\n\n\ndef _to_int_temp(s: str) -> Optional[float]:\n if not\