Sync Loogle Bot 2025-12-26 15:02
This commit is contained in:
@@ -11,7 +11,7 @@ import subprocess
|
||||
import tempfile
|
||||
import time
|
||||
from logging.handlers import RotatingFileHandler
|
||||
from typing import Optional
|
||||
from typing import Optional, List, Tuple
|
||||
|
||||
DEBUG = os.environ.get("DEBUG", "0").strip() == "1"
|
||||
|
||||
@@ -38,8 +38,14 @@ CONTAINER_DB_PATH = (os.environ.get("SPEEDTEST_CONTAINER_DB_PATH") or "/config/d
|
||||
WARN_DOWN = 400
|
||||
WARN_UP = 100
|
||||
|
||||
# Unità download/upload nel DB:
|
||||
# - default: byte/s => Mbps = (val*8)/1e6
|
||||
# - se già bit/s: SPEEDTEST_VALUES_ARE_BITS=1
|
||||
VALUES_ARE_BITS = os.environ.get("SPEEDTEST_VALUES_ARE_BITS", "0").strip() == "1"
|
||||
|
||||
# Quante righe recenti leggere dal DB (poi filtriamo in Python sulle ultime 24h)
|
||||
MAX_ROWS = int(os.environ.get("SPEEDTEST_MAX_ROWS", "2000").strip())
|
||||
|
||||
|
||||
def setup_logger() -> logging.Logger:
|
||||
logger = logging.getLogger("daily_report")
|
||||
@@ -127,22 +133,39 @@ def _to_mbps(val) -> float:
|
||||
return (v * 8.0) / 1_000_000.0
|
||||
|
||||
|
||||
def _parse_created_at_utc(created_at) -> datetime.datetime:
|
||||
def _parse_created_at_utc(created_at) -> Optional[datetime.datetime]:
|
||||
"""
|
||||
Robust parsing:
|
||||
- ISO con Z / offset
|
||||
- "YYYY-MM-DD HH:MM:SS[.ms]" (assumiamo UTC se naive, perché spesso il DB è UTC)
|
||||
"""
|
||||
try:
|
||||
if isinstance(created_at, datetime.datetime):
|
||||
dt = created_at
|
||||
else:
|
||||
s = str(created_at).replace("Z", "+00:00")
|
||||
s = str(created_at).strip()
|
||||
if not s:
|
||||
return None
|
||||
|
||||
# normalizza Z
|
||||
s = s.replace("Z", "+00:00")
|
||||
|
||||
# prova ISO (anche con T)
|
||||
try:
|
||||
dt = datetime.datetime.fromisoformat(s)
|
||||
except Exception:
|
||||
# fallback: "YYYY-MM-DD HH:MM:SS(.ms)"
|
||||
s2 = s.split(".")[0].replace("T", " ")
|
||||
dt = datetime.datetime.strptime(s2, "%Y-%m-%d %H:%M:%S")
|
||||
|
||||
if dt.tzinfo is None:
|
||||
# assumi UTC se naive
|
||||
dt = dt.replace(tzinfo=datetime.timezone.utc)
|
||||
else:
|
||||
dt = dt.astimezone(datetime.timezone.utc)
|
||||
return dt
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def find_local_db_path() -> str:
|
||||
@@ -186,20 +209,22 @@ def docker_copy_db_to_temp() -> str:
|
||||
def generate_report(db_path: str) -> Optional[str]:
|
||||
now_utc = datetime.datetime.now(datetime.timezone.utc)
|
||||
window_start_utc = now_utc - datetime.timedelta(hours=24)
|
||||
window_start_str = window_start_utc.isoformat(timespec="seconds")
|
||||
|
||||
try:
|
||||
conn = sqlite3.connect(db_path)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# NOTA: non filtriamo su created_at (string compare fragile).
|
||||
# Prendiamo le ultime MAX_ROWS righe completate e filtriamo in Python.
|
||||
query = """
|
||||
SELECT download, upload, ping, created_at
|
||||
FROM results
|
||||
WHERE created_at >= ?
|
||||
AND status = 'completed'
|
||||
ORDER BY created_at ASC
|
||||
WHERE status = 'completed'
|
||||
ORDER BY created_at DESC
|
||||
LIMIT ?
|
||||
"""
|
||||
cursor.execute(query, (window_start_str,))
|
||||
rows = cursor.fetchall()
|
||||
cursor.execute(query, (MAX_ROWS,))
|
||||
raw_rows = cursor.fetchall()
|
||||
except Exception as e:
|
||||
LOGGER.exception("Errore DB (%s): %s", db_path, e)
|
||||
return None
|
||||
@@ -209,8 +234,37 @@ def generate_report(db_path: str) -> Optional[str]:
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if not raw_rows:
|
||||
LOGGER.info("Nessun test trovato.")
|
||||
return None
|
||||
|
||||
# Filtra realmente per datetime (ultime 24h) e ordina crescente
|
||||
rows: List[Tuple[datetime.datetime, float, float, float]] = []
|
||||
for d_raw, u_raw, ping_raw, created_at in raw_rows:
|
||||
dt_utc = _parse_created_at_utc(created_at)
|
||||
if not dt_utc:
|
||||
continue
|
||||
if dt_utc < window_start_utc or dt_utc > now_utc:
|
||||
continue
|
||||
|
||||
d_mbps = _to_mbps(d_raw)
|
||||
u_mbps = _to_mbps(u_raw)
|
||||
try:
|
||||
ping_ms = float(ping_raw)
|
||||
except Exception:
|
||||
ping_ms = 0.0
|
||||
|
||||
rows.append((dt_utc, d_mbps, u_mbps, ping_ms))
|
||||
|
||||
rows.sort(key=lambda x: x[0])
|
||||
|
||||
LOGGER.debug("DB rows read=%s filtered_24h=%s (start=%s now=%s)",
|
||||
len(raw_rows), len(rows),
|
||||
window_start_utc.isoformat(timespec="seconds"),
|
||||
now_utc.isoformat(timespec="seconds"))
|
||||
|
||||
if not rows:
|
||||
LOGGER.info("Nessun test trovato nelle ultime 24h.")
|
||||
LOGGER.info("Nessun test nelle ultime 24h dopo filtro datetime.")
|
||||
return None
|
||||
|
||||
header = "ORA | Dn | Up | Pg |!"
|
||||
@@ -228,14 +282,7 @@ def generate_report(db_path: str) -> Optional[str]:
|
||||
msg += header + "\n"
|
||||
msg += sep + "\n"
|
||||
|
||||
for d_raw, u_raw, ping_raw, created_at in rows:
|
||||
d_mbps = _to_mbps(d_raw)
|
||||
u_mbps = _to_mbps(u_raw)
|
||||
try:
|
||||
ping_ms = float(ping_raw)
|
||||
except Exception:
|
||||
ping_ms = 0.0
|
||||
|
||||
for dt_utc, d_mbps, u_mbps, ping_ms in rows:
|
||||
total_down += d_mbps
|
||||
total_up += u_mbps
|
||||
count += 1
|
||||
@@ -245,25 +292,18 @@ def generate_report(db_path: str) -> Optional[str]:
|
||||
issues += 1
|
||||
flag = "!"
|
||||
|
||||
try:
|
||||
dt_utc = _parse_created_at_utc(created_at)
|
||||
dt_local = dt_utc.astimezone()
|
||||
time_str = dt_local.strftime("%H:%M")
|
||||
except Exception:
|
||||
time_str = "--:--"
|
||||
time_str = dt_utc.astimezone().strftime("%H:%M")
|
||||
|
||||
msg += f"{time_str:<5}|{int(round(d_mbps)):>5}|{int(round(u_mbps)):>5}|{int(round(ping_ms)):>4}|{flag}\n"
|
||||
|
||||
msg += "```\n"
|
||||
|
||||
if count > 0:
|
||||
avg_d = total_down / count
|
||||
avg_u = total_up / count
|
||||
|
||||
icon_d = "✅" if avg_d >= WARN_DOWN else "⚠️"
|
||||
icon_u = "✅" if avg_u >= WARN_UP else "⚠️"
|
||||
|
||||
# Ø al posto di "MEDIA:" per accorciare ed evitare wrap
|
||||
msg += f"Ø ⬇️{icon_d}`{avg_d:.0f} Mbps` ⬆️{icon_u}`{avg_u:.0f} Mbps`"
|
||||
|
||||
if issues > 0:
|
||||
|
||||
84
services/telegram-bot/dpc_log.txt
Normal file
84
services/telegram-bot/dpc_log.txt
Normal file
@@ -0,0 +1,84 @@
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
--- Controllo Protezione Civile ---
|
||||
Errore DPC: 404 Client Error: Not Found for url: https://raw.githubusercontent.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica/master/files/geojson/today.json
|
||||
111
services/telegram-bot/freeze_log.txt
Normal file
111
services/telegram-bot/freeze_log.txt
Normal file
@@ -0,0 +1,111 @@
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.8°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.7°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.1°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.8°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.9°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.2°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.5°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.9°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 3.7°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 2.8°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 3.0°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 3.9°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 3.7°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 3.8°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.2°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.4°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.3°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.1°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.0°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.7°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.8°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.1°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.2°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.0°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.1°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.2°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.2°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.3°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.1°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.7°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.9°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.3°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.3°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.8°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.3°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.3°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.5°C
|
||||
--- Controllo Gelo ---
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.9°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.8°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.6°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.5°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.3°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.5°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.2°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.7°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.2°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.5°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.4°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.5°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.5°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 5.2°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.4°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 7.0°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 6.0°C
|
||||
--- Controllo Gelo ---
|
||||
Nessun gelo. Minima: 4.8°C
|
||||
119
services/telegram-bot/net_quality.py
Normal file
119
services/telegram-bot/net_quality.py
Normal file
@@ -0,0 +1,119 @@
|
||||
import subprocess
|
||||
import re
|
||||
import os
|
||||
import json
|
||||
import time
|
||||
import urllib.request
|
||||
import urllib.parse
|
||||
|
||||
# --- CONFIGURAZIONE ---
|
||||
BOT_TOKEN="8155587974:AAF9OekvBpixtk8ZH6KoIc0L8edbhdXt7A4"
|
||||
CHAT_ID="64463169"
|
||||
|
||||
# BERSAGLIO (Cloudflare è solitamente il più stabile per i ping)
|
||||
TARGET_HOST = "1.1.1.1"
|
||||
|
||||
# SOGLIE DI ALLARME
|
||||
LIMIT_LOSS = 5.0 # % di pacchetti persi (sopra il 5% è grave)
|
||||
LIMIT_JITTER = 30.0 # ms di deviazione (sopra 30ms lagga la voce/gioco)
|
||||
|
||||
# File di stato
|
||||
STATE_FILE = "/home/daniely/docker/telegram-bot/quality_state.json"
|
||||
|
||||
def send_telegram(msg):
|
||||
if "INSERISCI" in TELEGRAM_BOT_TOKEN: return
|
||||
url = f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage"
|
||||
for chat_id in TELEGRAM_CHAT_IDS:
|
||||
try:
|
||||
payload = {"chat_id": chat_id, "text": msg, "parse_mode": "Markdown"}
|
||||
data = urllib.parse.urlencode(payload).encode('utf-8')
|
||||
req = urllib.request.Request(url, data=data)
|
||||
with urllib.request.urlopen(req) as r: pass
|
||||
time.sleep(0.2)
|
||||
except: pass
|
||||
|
||||
def load_state():
|
||||
if os.path.exists(STATE_FILE):
|
||||
try:
|
||||
with open(STATE_FILE, 'r') as f: return json.load(f)
|
||||
except: pass
|
||||
return {"alert_active": False}
|
||||
|
||||
def save_state(active):
|
||||
try:
|
||||
with open(STATE_FILE, 'w') as f: json.dump({"alert_active": active}, f)
|
||||
except: pass
|
||||
|
||||
def measure_quality():
|
||||
print("--- Avvio Test Qualità Linea ---")
|
||||
|
||||
# Esegue 50 ping rapidi (0.2s intervallo)
|
||||
# -q: quiet (solo riepilogo finale)
|
||||
# -c 50: conta 50 pacchetti
|
||||
# -i 0.2: intervallo rapido
|
||||
# -w 15: timeout massimo 15 secondi
|
||||
cmd = f"ping -c 50 -i 0.2 -q -w 15 {TARGET_HOST}"
|
||||
|
||||
try:
|
||||
output = subprocess.check_output(cmd, shell=True).decode('utf-8')
|
||||
except subprocess.CalledProcessError as e:
|
||||
# Se ping fallisce completamente (es. internet down), catturiamo l'output comunque se c'è
|
||||
output = e.output.decode('utf-8') if e.output else ""
|
||||
if not output:
|
||||
print("Errore critico: Nessuna connessione.")
|
||||
return
|
||||
|
||||
# Parsing Packet Loss
|
||||
# Cerca pattern: "X% packet loss"
|
||||
loss_match = re.search(r'(\d+)% packet loss', output)
|
||||
loss = int(loss_match.group(1)) if loss_match else 100
|
||||
|
||||
# Parsing Jitter (mdev)
|
||||
# Output tipico: rtt min/avg/max/mdev = 10.1/12.5/40.2/5.1 ms
|
||||
# mdev è la 4a cifra
|
||||
jitter = 0.0
|
||||
rtt_match = re.search(r'rtt min/avg/max/mdev = ([\d\.]+)/([\d\.]+)/([\d\.]+)/([\d\.]+)', output)
|
||||
|
||||
if rtt_match:
|
||||
avg_ping = float(rtt_match.group(2))
|
||||
jitter = float(rtt_match.group(4))
|
||||
else:
|
||||
avg_ping = 0.0
|
||||
|
||||
print(f"Risultati: Loss={loss}% | Jitter={jitter}ms | AvgPing={avg_ping}ms")
|
||||
|
||||
# --- LOGICA ALLARME ---
|
||||
state = load_state()
|
||||
was_active = state.get("alert_active", False)
|
||||
|
||||
is_bad = (loss >= LIMIT_LOSS) or (jitter >= LIMIT_JITTER)
|
||||
|
||||
if is_bad:
|
||||
if not was_active:
|
||||
# NUOVO ALLARME
|
||||
msg = f"📉 **DEGRADO QUALITÀ LINEA**\n\n"
|
||||
if loss >= LIMIT_LOSS:
|
||||
msg += f"🔴 **Packet Loss:** `{loss}%` (Soglia {LIMIT_LOSS}%)\n"
|
||||
if jitter >= LIMIT_JITTER:
|
||||
msg += f"⚠️ **Jitter (Instabilità):** `{jitter}ms` (Soglia {LIMIT_JITTER}ms)\n"
|
||||
|
||||
msg += f"\n_Ping Medio: {avg_ping}ms_"
|
||||
send_telegram(msg)
|
||||
save_state(True)
|
||||
print("Allarme inviato.")
|
||||
else:
|
||||
print("Qualità ancora scarsa (già notificato).")
|
||||
|
||||
elif was_active and not is_bad:
|
||||
# RECOVERY
|
||||
msg = f"✅ **QUALITÀ LINEA RIPRISTINATA**\n\n"
|
||||
msg += f"I parametri sono rientrati nella norma.\n"
|
||||
msg += f"Ping: `{avg_ping}ms` | Jitter: `{jitter}ms` | Loss: `{loss}%`"
|
||||
send_telegram(msg)
|
||||
save_state(False)
|
||||
print("Recovery inviata.")
|
||||
else:
|
||||
print("Linea OK.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
measure_quality()
|
||||
144
services/telegram-bot/quality_log.txt
Normal file
144
services/telegram-bot/quality_log.txt
Normal file
@@ -0,0 +1,144 @@
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=12.687ms | AvgPing=19.192ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.493ms | AvgPing=9.06ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.519ms | AvgPing=9.025ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.162ms | AvgPing=9.233ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=12.028ms | AvgPing=19.646ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.211ms | AvgPing=9.209ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.356ms | AvgPing=9.197ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.354ms | AvgPing=9.186ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=8.078ms | AvgPing=12.949ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.23ms | AvgPing=9.206ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.207ms | AvgPing=9.209ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.227ms | AvgPing=9.205ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=11.425ms | AvgPing=17.953ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.358ms | AvgPing=9.125ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.175ms | AvgPing=9.22ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.367ms | AvgPing=9.138ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=10.52ms | AvgPing=15.462ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.292ms | AvgPing=9.195ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.286ms | AvgPing=9.224ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.253ms | AvgPing=9.19ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=10.33ms | AvgPing=15.269ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.391ms | AvgPing=9.183ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.201ms | AvgPing=9.239ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.224ms | AvgPing=9.186ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=11.447ms | AvgPing=17.307ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.303ms | AvgPing=9.212ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.302ms | AvgPing=9.225ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.295ms | AvgPing=9.147ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=11.598ms | AvgPing=17.61ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.221ms | AvgPing=9.234ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.212ms | AvgPing=9.219ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.277ms | AvgPing=9.186ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=11.891ms | AvgPing=18.959ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.195ms | AvgPing=9.22ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.541ms | AvgPing=9.011ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.449ms | AvgPing=9.132ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=10.053ms | AvgPing=15.767ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.513ms | AvgPing=9.008ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.295ms | AvgPing=9.196ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.351ms | AvgPing=9.208ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=12.356ms | AvgPing=19.349ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.238ms | AvgPing=9.219ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.486ms | AvgPing=9.251ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=0.293ms | AvgPing=9.174ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=2.634ms | AvgPing=10.486ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=3.088ms | AvgPing=10.236ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=1.246ms | AvgPing=9.522ms
|
||||
Linea OK.
|
||||
--- Avvio Test Qualità Linea ---
|
||||
Risultati: Loss=0% | Jitter=2.186ms | AvgPing=9.577ms
|
||||
Linea OK.
|
||||
370
services/telegram-bot/snow_log.txt
Normal file
370
services/telegram-bot/snow_log.txt
Normal file
@@ -0,0 +1,370 @@
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area Max: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0.0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0.0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0.0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 21:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 00:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 03:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 06:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 09:00 ---
|
||||
Nessuna neve. Casa: 0.0cm, Area: 0.0cm
|
||||
--- Check Meteo 12:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 15:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
--- Check Meteo 18:00 ---
|
||||
Nessuna neve. Casa: 0cm, Area: 0.0cm
|
||||
182
services/telegram-bot/student_log.txt
Normal file
182
services/telegram-bot/student_log.txt
Normal file
@@ -0,0 +1,182 @@
|
||||
--- Analisi Studente Bologna ---
|
||||
Bologna tranquilla. Nessun report.
|
||||
--- Analisi Studente Bologna ---
|
||||
Bologna tranquilla. Nessun report.
|
||||
--- Analisi Studente Bologna ---
|
||||
Bologna tranquilla. Nessun report.
|
||||
--- Analisi Studente Bologna ---
|
||||
Bologna tranquilla. Nessun report.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
--- Analisi Studente Bologna ---
|
||||
Nessuna allerta.
|
||||
Reference in New Issue
Block a user