refactor: project architecture refactor, container splitting
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
import os
|
||||
import sys
|
||||
from urllib.parse import urlsplit
|
||||
|
||||
_BANNER_TEMPLATE = """
|
||||
~ ~ ~ r e m n a w a v e ~ ~ ~
|
||||
|
||||
███╗ ███╗██╗███╗ ██╗██╗███████╗██╗ ██╗ ██████╗ ██████╗
|
||||
████╗ ████║██║████╗ ██║██║██╔════╝██║ ██║██╔═══██╗██╔══██╗
|
||||
██╔████╔██║██║██╔██╗ ██║██║███████╗███████║██║ ██║██████╔╝
|
||||
██║╚██╔╝██║██║██║╚██╗██║██║╚════██║██╔══██║██║ ██║██╔═══╝
|
||||
██║ ╚═╝ ██║██║██║ ╚████║██║███████║██║ ██║╚██████╔╝██║
|
||||
╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝
|
||||
|
||||
container :: {service}
|
||||
{details}
|
||||
https://github.com/3252a8/remnawave-minishop
|
||||
"""
|
||||
|
||||
|
||||
def _env(name: str, default: str = "-") -> str:
|
||||
return os.getenv(name) or default
|
||||
|
||||
|
||||
def _bool_env(name: str) -> str:
|
||||
value = _env(name, "").lower()
|
||||
if value in {"1", "true", "yes", "on"}:
|
||||
return "on"
|
||||
if value in {"0", "false", "no", "off"}:
|
||||
return "off"
|
||||
return _env(name)
|
||||
|
||||
|
||||
def _redis_target() -> str:
|
||||
value = _env("REDIS_URL")
|
||||
try:
|
||||
parsed = urlsplit(value)
|
||||
except ValueError:
|
||||
return "-"
|
||||
if not parsed.hostname:
|
||||
return "-"
|
||||
port = f":{parsed.port}" if parsed.port else ""
|
||||
db = parsed.path.lstrip("/") or "0"
|
||||
return f"{parsed.hostname}{port}/{db}"
|
||||
|
||||
|
||||
def _postgres_target() -> str:
|
||||
return f"{_env('POSTGRES_HOST')}:{_env('POSTGRES_PORT', '5432')}/{_env('POSTGRES_DB')}"
|
||||
|
||||
|
||||
def _detail_line(text: str) -> str:
|
||||
return f" {text[:64]}"
|
||||
|
||||
|
||||
def _service_details(service: str) -> str:
|
||||
image_tag = _env("IMAGE_TAG", "local")
|
||||
log_level = _env("LOG_LEVEL", "INFO")
|
||||
common = [f"image tag :: {image_tag}", f"log level :: {log_level}"]
|
||||
if service == "backend":
|
||||
lines = [
|
||||
*common,
|
||||
f"webhooks :: :{_env('WEB_SERVER_PORT', '8080')}",
|
||||
f"webapp api :: {_bool_env('WEBAPP_ENABLED')} / :{_env('WEBAPP_SERVER_PORT', '8081')}",
|
||||
f"postgres :: {_postgres_target()}",
|
||||
f"redis :: {_redis_target()}",
|
||||
]
|
||||
elif service == "worker":
|
||||
panel_sync_interval = _env("WORKER_PANEL_SYNC_INTERVAL_SECONDS")
|
||||
panel_sync_interval = f"{panel_sync_interval}s" if panel_sync_interval != "-" else "-"
|
||||
lines = [
|
||||
*common,
|
||||
f"queue concurrency :: {_env('WEBHOOK_QUEUE_CONCURRENCY', '1')}",
|
||||
f"panel sync interval :: {panel_sync_interval}",
|
||||
f"tariffs config :: {_env('TARIFFS_CONFIG_PATH', '-')}",
|
||||
f"postgres :: {_postgres_target()}",
|
||||
f"redis :: {_redis_target()}",
|
||||
]
|
||||
elif service == "migrate":
|
||||
lines = [
|
||||
*common,
|
||||
"mode :: one-shot migrations",
|
||||
f"postgres :: {_postgres_target()}",
|
||||
"data dir :: /app/data",
|
||||
]
|
||||
else:
|
||||
lines = common
|
||||
return "\n".join(_detail_line(line) for line in lines)
|
||||
|
||||
|
||||
def print_startup_banner(service: str) -> None:
|
||||
normalized_service = service.lower()
|
||||
banner = (
|
||||
_BANNER_TEMPLATE.format(
|
||||
service=normalized_service.upper(),
|
||||
details=_service_details(normalized_service),
|
||||
)
|
||||
+ "\n"
|
||||
)
|
||||
try:
|
||||
sys.stdout.write(banner)
|
||||
sys.stdout.flush()
|
||||
except UnicodeEncodeError:
|
||||
try:
|
||||
sys.stdout.buffer.write(banner.encode("utf-8"))
|
||||
sys.stdout.buffer.flush()
|
||||
except Exception:
|
||||
pass
|
||||
except Exception:
|
||||
pass
|
||||
Reference in New Issue
Block a user