API refactor
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-10-07 16:25:52 +09:00
parent 76d0d86211
commit 91c7e04474
1171 changed files with 81940 additions and 44117 deletions

139
run_gateway_with_dependencies.sh Executable file
View File

@@ -0,0 +1,139 @@
#!/bin/bash
# Скрипт для запуска API Gateway с зависимостями для приложения Women Safety
# Устанавливаем цветные сообщения
GREEN="\033[1;32m"
BLUE="\033[1;34m"
YELLOW="\033[1;33m"
RED="\033[1;31m"
RESET="\033[0m"
echo -e "${BLUE}🚀 Запуск API Gateway и необходимых сервисов...${RESET}"
# Переход в директорию проекта
cd "$(dirname "$0")" || { echo -e "${RED}Не удалось перейти в директорию проекта${RESET}"; exit 1; }
# Активация виртуального окружения, если оно существует
if [ -d "venv" ]; then
echo -e "${YELLOW}🔄 Активация виртуального окружения venv...${RESET}"
source venv/bin/activate
elif [ -d ".venv" ]; then
echo -e "${YELLOW}🔄 Активация виртуального окружения .venv...${RESET}"
source .venv/bin/activate
else
echo -e "${YELLOW}⚠️ Виртуальное окружение не найдено, продолжаем без него...${RESET}"
fi
# Установка переменной PYTHONPATH
export PYTHONPATH="${PWD}:${PYTHONPATH}"
# Функция для проверки, запущен ли сервис на указанном порту
check_service() {
local port=$1
local service_name=$2
if lsof -ti:$port > /dev/null 2>&1; then
echo -e "${GREEN}✅ Сервис $service_name уже запущен на порту $port${RESET}"
return 0
else
echo -e "${YELLOW}⚠️ Сервис $service_name не запущен на порту $port${RESET}"
return 1
fi
}
# Функция для запуска сервиса
start_service() {
local port=$1
local service_path=$2
local service_name=$3
echo -e "${BLUE}🚀 Запуск $service_name на порту $port...${RESET}"
cd "$service_path" || { echo -e "${RED}Не удалось перейти в директорию $service_path${RESET}"; return 1; }
# Запускаем сервис в фоновом режиме
python -m uvicorn main:app --host 0.0.0.0 --port $port &
local pid=$!
# Ждем 3 секунды и проверяем, запустился ли сервис
sleep 3
if kill -0 $pid 2>/dev/null; then
echo -e "${GREEN}✅ Сервис $service_name успешно запущен (PID: $pid)${RESET}"
# Возвращаемся в корневую директорию
cd "$(dirname "$0")" || { echo -e "${RED}Не удалось вернуться в корневую директорию${RESET}"; exit 1; }
return 0
else
echo -e "${RED}Не удалось запустить сервис $service_name${RESET}"
# Возвращаемся в корневую директорию
cd "$(dirname "$0")" || { echo -e "${RED}Не удалось вернуться в корневую директорию${RESET}"; exit 1; }
return 1
fi
}
# Проверяем и запускаем пользовательский сервис (создаёт таблицы пользователей)
if ! check_service 8001 "User Service"; then
start_service 8001 "./services/user_service" "User Service"
fi
# Проверяем и запускаем сервис календаря
if ! check_service 8004 "Calendar Service"; then
start_service 8004 "./services/calendar_service" "Calendar Service"
fi
# Проверяем и запускаем сервис оповещений об экстренных ситуациях
if ! check_service 8002 "Emergency Service"; then
start_service 8002 "./services/emergency_service" "Emergency Service"
fi
# Проверяем и запускаем сервис локаций
if ! check_service 8003 "Location Service"; then
start_service 8003 "./services/location_service" "Location Service"
fi
# Проверяем и запускаем сервис уведомлений
if ! check_service 8005 "Notification Service"; then
start_service 8005 "./services/notification_service" "Notification Service"
fi
# Ждем несколько секунд, чтобы сервисы успели инициализироваться
echo -e "${YELLOW}⏳ Ожидаем инициализацию сервисов (5 сек)...${RESET}"
sleep 5
# Функция для проверки здоровья сервиса
check_health() {
local url=$1
local service_name=$2
if curl -s "$url" > /dev/null 2>&1; then
echo -e "${GREEN}✅ Проверка здоровья $service_name успешна${RESET}"
return 0
else
echo -e "${RED}❌ Проверка здоровья $service_name не удалась${RESET}"
return 1
fi
}
# Проверяем здоровье запущенных сервисов
check_health "http://localhost:8001/health" "User Service"
check_health "http://localhost:8002/health" "Emergency Service"
check_health "http://localhost:8003/health" "Location Service"
check_health "http://localhost:8004/health" "Calendar Service"
check_health "http://localhost:8005/health" "Notification Service"
# Теперь запускаем API Gateway
echo -e "${BLUE}🔄 Запуск API Gateway на порту 8000...${RESET}"
# Порт для API Gateway
API_GATEWAY_PORT=8000
# Проверяем, не занят ли порт уже
if lsof -ti:$API_GATEWAY_PORT > /dev/null 2>&1; then
echo -e "${YELLOW}⚠️ Порт $API_GATEWAY_PORT уже занят, освобождаем...${RESET}"
lsof -ti:$API_GATEWAY_PORT | xargs kill -9
sleep 1
fi
# Запускаем API Gateway в текущем терминале (не в фоне)
echo -e "${GREEN}✅ Запуск API Gateway...${RESET}"
cd services/api_gateway || { echo -e "${RED}Не удалось перейти в директорию API Gateway${RESET}"; exit 1; }
python -m uvicorn main:app --host 0.0.0.0 --port $API_GATEWAY_PORT --reload