Compare commits
5 Commits
74801ad710
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5994e18efa | ||
|
|
5205dd5c5c | ||
|
|
ead3683e4c | ||
|
|
8f300e0154 | ||
| 6e92022e67 |
11
deploy.sh
11
deploy.sh
@@ -11,7 +11,7 @@ NC='\033[0m' # No Color
|
|||||||
REPO_URL="https://git.tvstart.ru/ychernenko/KHL.git"
|
REPO_URL="https://git.tvstart.ru/ychernenko/KHL.git"
|
||||||
TARGET_DIR="/root/KHL"
|
TARGET_DIR="/root/KHL"
|
||||||
SERVICE_NAME="khl-data.service"
|
SERVICE_NAME="khl-data.service"
|
||||||
TARGET_ENV="/mnt/aescript/.env"
|
TARGET_ENV="/mnt/khl/.env"
|
||||||
|
|
||||||
show_help() {
|
show_help() {
|
||||||
echo "Использование: $0 -r <релиз> [-h]"
|
echo "Использование: $0 -r <релиз> [-h]"
|
||||||
@@ -42,7 +42,7 @@ log_debug() {
|
|||||||
|
|
||||||
# Функция проверки зависимостей системы
|
# Функция проверки зависимостей системы
|
||||||
check_dependencies() {
|
check_dependencies() {
|
||||||
local deps=("git" "python3" "pip3" "netstat" "systemctl")
|
local deps=("git" "python3" "pip" "netstat" "systemctl")
|
||||||
local missing=()
|
local missing=()
|
||||||
|
|
||||||
for dep in "${deps[@]}"; do
|
for dep in "${deps[@]}"; do
|
||||||
@@ -78,13 +78,13 @@ install_packages() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! command -v pip3 &> /dev/null; then
|
if ! command -v pip &> /dev/null; then
|
||||||
log_error "pip3 не установлен!"
|
log_error "pip не установлен!"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "Версия Python: $(python3 --version)"
|
log_info "Версия Python: $(python3 --version)"
|
||||||
log_info "Версия pip: $(pip3 --version)"
|
log_info "Версия pip: $(pip --version)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Функция загрузки кода
|
# Функция загрузки кода
|
||||||
@@ -503,6 +503,7 @@ main() {
|
|||||||
log_info ""
|
log_info ""
|
||||||
log_info "Для просмотра логов:"
|
log_info "Для просмотра логов:"
|
||||||
log_info " journalctl -u $SERVICE_NAME -f"
|
log_info " journalctl -u $SERVICE_NAME -f"
|
||||||
|
log_info " journalctl -t KHL -f"
|
||||||
log_info ""
|
log_info ""
|
||||||
log_info "Управление сервисом:"
|
log_info "Управление сервисом:"
|
||||||
log_info " Перезапуск: systemctl restart $SERVICE_NAME"
|
log_info " Перезапуск: systemctl restart $SERVICE_NAME"
|
||||||
|
|||||||
100
get_data.py
100
get_data.py
@@ -1,8 +1,4 @@
|
|||||||
<<<<<<< HEAD
|
|
||||||
from fastapi import FastAPI, HTTPException, Query
|
|
||||||
=======
|
|
||||||
from fastapi import FastAPI, HTTPException, Query, Request
|
from fastapi import FastAPI, HTTPException, Query, Request
|
||||||
>>>>>>> c60caaa8aaad763cf7605dcd2c4502b8dfc3be84
|
|
||||||
from fastapi.responses import Response, JSONResponse, HTMLResponse, StreamingResponse
|
from fastapi.responses import Response, JSONResponse, HTMLResponse, StreamingResponse
|
||||||
from fastapi.encoders import jsonable_encoder
|
from fastapi.encoders import jsonable_encoder
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
@@ -19,10 +15,7 @@ import nasio
|
|||||||
import logging
|
import logging
|
||||||
import logging.config
|
import logging.config
|
||||||
import platform
|
import platform
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
import json
|
import json
|
||||||
>>>>>>> c60caaa8aaad763cf7605dcd2c4502b8dfc3be84
|
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
|
|
||||||
|
|
||||||
@@ -36,18 +29,7 @@ _latest_lock = Lock()
|
|||||||
_stop_event = Event()
|
_stop_event = Event()
|
||||||
_worker_thread: Thread | None = None
|
_worker_thread: Thread | None = None
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
# Загружаем переменные из .env
|
|
||||||
if load_dotenv(dotenv_path="/mnt/khl/.env", verbose=True):
|
|
||||||
print("Добавить в лог что был найден файл окружения!!")
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
load_dotenv()
|
|
||||||
print("Добавить в лог что не был найден файл окружения!!")
|
|
||||||
|
|
||||||
=======
|
|
||||||
pprint(f"Локальный файл окружения ={load_dotenv(verbose=True)}")
|
pprint(f"Локальный файл окружения ={load_dotenv(verbose=True)}")
|
||||||
>>>>>>> c60caaa8aaad763cf7605dcd2c4502b8dfc3be84
|
|
||||||
api_user = os.getenv("API_USER")
|
api_user = os.getenv("API_USER")
|
||||||
api_pass = os.getenv("API_PASS")
|
api_pass = os.getenv("API_PASS")
|
||||||
league = os.getenv("LEAGUE")
|
league = os.getenv("LEAGUE")
|
||||||
@@ -749,11 +731,6 @@ def _norm_name(s: str | None) -> str:
|
|||||||
return ""
|
return ""
|
||||||
return str(s).strip().casefold()
|
return str(s).strip().casefold()
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
@app.get("/info")
|
|
||||||
def info():
|
|
||||||
=======
|
|
||||||
def _load_buf():
|
def _load_buf():
|
||||||
buf = nasio.load_bio(user=USER, password=PASSWORD,
|
buf = nasio.load_bio(user=USER, password=PASSWORD,
|
||||||
nas_ip=SERVER_NAME, nas_port="443", path=PATH)
|
nas_ip=SERVER_NAME, nas_port="443", path=PATH)
|
||||||
@@ -764,7 +741,6 @@ def _load_buf():
|
|||||||
|
|
||||||
@app.get("/info")
|
@app.get("/info")
|
||||||
async def info(format: str = "xlsx", sheet: str = "TEAMS"):
|
async def info(format: str = "xlsx", sheet: str = "TEAMS"):
|
||||||
>>>>>>> c60caaa8aaad763cf7605dcd2c4502b8dfc3be84
|
|
||||||
# 1) Проверяем, выбран ли матч
|
# 1) Проверяем, выбран ли матч
|
||||||
global current_season
|
global current_season
|
||||||
if not selected_game_id:
|
if not selected_game_id:
|
||||||
@@ -793,81 +769,6 @@ async def info(format: str = "xlsx", sheet: str = "TEAMS"):
|
|||||||
away_name = str(row.get("visitorName_en", "")).strip()
|
away_name = str(row.get("visitorName_en", "")).strip()
|
||||||
|
|
||||||
# 3) Подтягиваем справочник команд из Excel (лист TEAMS)
|
# 3) Подтягиваем справочник команд из Excel (лист TEAMS)
|
||||||
<<<<<<< HEAD
|
|
||||||
try:
|
|
||||||
binary_bytes: bytes = nasio.load_bio(
|
|
||||||
user=USER,
|
|
||||||
password=PASSWORD,
|
|
||||||
nas_ip=SERVER_NAME,
|
|
||||||
nas_port="443",
|
|
||||||
path=PATH,
|
|
||||||
# sheet="TEAMS"
|
|
||||||
)
|
|
||||||
buf = io.BytesIO(binary_bytes)
|
|
||||||
headers = {
|
|
||||||
"Content-Length": str(len(binary_bytes)),
|
|
||||||
"Cache-Control": "no-cache, no-store, must-revalidate",
|
|
||||||
"Pragma": "no-cache",
|
|
||||||
# можно подсунуть имя файла (если парсеру это важно)
|
|
||||||
"Content-Disposition": 'inline; filename="MATCH.xlsm"',
|
|
||||||
}
|
|
||||||
return StreamingResponse(
|
|
||||||
buf,
|
|
||||||
media_type="application/vnd.ms-excel.sheet.macroEnabled.12",
|
|
||||||
headers=headers,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Оставляем только полезные поля (подгони под свой файл)
|
|
||||||
keep = ["Team", "Logo", "Short", "HexPodl", "HexBase", "HexText"]
|
|
||||||
keep = [c for c in keep if c in teams_df.columns]
|
|
||||||
teams_df = teams_df.loc[:, keep].copy()
|
|
||||||
|
|
||||||
# 4) Нормализованные ключи для джоина по имени
|
|
||||||
teams_df["__key"] = teams_df["Team"].apply(_norm_name)
|
|
||||||
|
|
||||||
def _pick_team_info(name: str) -> dict:
|
|
||||||
key = _norm_name(name)
|
|
||||||
hit = teams_df.loc[teams_df["__key"] == key]
|
|
||||||
if hit.empty:
|
|
||||||
# не нашли точное совпадение — вернём только название
|
|
||||||
return {"Team": name}
|
|
||||||
rec = hit.iloc[0].to_dict()
|
|
||||||
rec.pop("__key", None)
|
|
||||||
# заменим NaN/inf на None, чтобы JSON не падал
|
|
||||||
for k, v in list(rec.items()):
|
|
||||||
if pd.isna(v) or v in (np.inf, -np.inf):
|
|
||||||
rec[k] = None
|
|
||||||
return rec
|
|
||||||
|
|
||||||
home_info = _pick_team_info(home_name)
|
|
||||||
away_info = _pick_team_info(away_name)
|
|
||||||
date_obj = datetime.strptime(row.get("datetime_str", ""), "%d.%m.%Y %H:%M")
|
|
||||||
try:
|
|
||||||
full_format = date_obj.strftime("%B %-d, %Y")
|
|
||||||
except ValueError:
|
|
||||||
full_format = date_obj.strftime("%B %#d, %Y")
|
|
||||||
|
|
||||||
payload = [
|
|
||||||
{
|
|
||||||
"selected_id": int(selected_game_id),
|
|
||||||
"tournament_id": (
|
|
||||||
int(current_tournament_id) if current_tournament_id else None
|
|
||||||
),
|
|
||||||
"datetime": str(full_format),
|
|
||||||
"arena": str(row.get("arena_en", "")),
|
|
||||||
"arena_city": str(row.get("arena_city_en", "")),
|
|
||||||
"home": home_info,
|
|
||||||
"home_city": str(row.get("homeCity_en", "")),
|
|
||||||
"away": away_info,
|
|
||||||
"away_city": str(row.get("visitorCity_en", "")),
|
|
||||||
"season": current_season,
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
return JSONResponse(content=payload)
|
|
||||||
except Exception as ex:
|
|
||||||
pprint(ex)
|
|
||||||
=======
|
|
||||||
src = _load_buf()
|
src = _load_buf()
|
||||||
|
|
||||||
if format == "xlsx":
|
if format == "xlsx":
|
||||||
@@ -969,7 +870,6 @@ async def info(format: str = "xlsx", sheet: str = "TEAMS"):
|
|||||||
# return JSONResponse(content=payload)
|
# return JSONResponse(content=payload)
|
||||||
# except Exception as ex:
|
# except Exception as ex:
|
||||||
# pprint(ex)
|
# pprint(ex)
|
||||||
>>>>>>> c60caaa8aaad763cf7605dcd2c4502b8dfc3be84
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user