#!/bin/bash
################################################################################
# config.sh.template — 服务监测模块配置模板
#
# 说明：
#   - 此文件为模板，由 executor 在运行时渲染（替换 __占位符__）后下发到目标机
#   - 容器名采用「模糊匹配模式」：MySQL/Redis 等模块用 grep -i 模式匹配实际容器名
#     （不同服务器容器名可能不同，因此用模式而非精确名）
#   - 密码为占位符，渲染时注入解密后的实际凭据（不在模板中硬编码）
#   - 阈值带默认值，可被目标级覆盖（executor 渲染时注入环境变量）
################################################################################

# ==================== 容器匹配模式 ====================
# 值为 grep -iE 的模式，模块内会用 docker ps | grep -iE "<pattern>" 模糊发现容器
declare -A CONTAINERS
CONTAINERS[mysql]="mysql"
CONTAINERS[redis]="redis"
CONTAINERS[emqx]="emqx"
CONTAINERS[java]="java|api"
CONTAINERS[nginx]="nginx"
CONTAINERS[nacos]="nacos"
CONTAINERS[python]="python"
CONTAINERS[python_voice]="python_voice"
CONTAINERS[ustorage]="ustorage|storage"
CONTAINERS[utracker]="utracker|tracker"

# ==================== 凭据（占位符，渲染时注入；值由 Python 端做 shell 安全引用） ====================
MYSQL_PASSWORD=__MYSQL_PASSWORD__
REDIS_PASSWORD=__REDIS_PASSWORD__

# ==================== 阈值（默认值，可被环境变量覆盖） ====================
# CPU 阈值（使用率百分比）
CPU_WARNING="${CPU_WARNING:-85}"
CPU_CRITICAL="${CPU_CRITICAL:-100}"

# 内存阈值
MEMORY_WARNING="${MEMORY_WARNING:-85}"
MEMORY_CRITICAL="${MEMORY_CRITICAL:-95}"

# 磁盘阈值
DISK_WARNING="${DISK_WARNING:-90}"
DISK_CRITICAL="${DISK_CRITICAL:-95}"

# 线程阈值
THREAD_WARNING="${THREAD_WARNING:-1000}"
THREAD_CRITICAL="${THREAD_CRITICAL:-3000}"

# ==================== 路径配置（可选，用于日志类模块，本期核心子集未用到） ====================
JAVA_LOG_PATH="${JAVA_LOG_PATH:-/data/services/api/*/log}"
PYTHON_LOG_PATH="${PYTHON_LOG_PATH:-/data/services/api/python*/log}"
NGINX_LOG_PATH="${NGINX_LOG_PATH:-/data/middleware/nginx/log}"
NACOS_LOG_PATH="${NACOS_LOG_PATH:-/data/middleware/nacos/logs}"

# ==================== 安全白名单 ====================
# SUID 文件白名单（逗号分隔）
SUID_WHITELIST="${SUID_WHITELIST:-/usr/bin/sudo,/usr/bin/passwd,/usr/bin/su,/usr/bin/ping,/usr/bin/mount,/usr/bin/umount,/usr/bin/newgrp,/usr/bin/chsh,/usr/bin/chfn,/usr/bin/gpasswd,/usr/lib/openssh/ssh-keysign,/usr/libexec/openssh/ssh-keysign}"

# 端口白名单 - 新平台（逗号分隔）
PORT_WHITELIST_NEW="${PORT_WHITELIST_NEW:-22,80,443,1883,3306,6379,8083,8084,8888,18083}"

# 端口白名单 - 旧平台（逗号分隔）
PORT_WHITELIST_OLD="${PORT_WHITELIST_OLD:-22,80,443,1883,3306,6379,8081,8082,8443,9001}"

# ==================== EMQX 端口配置 ====================
EMQX_MQTT_PORT="${EMQX_MQTT_PORT:-1883}"
EMQX_DASHBOARD_PORT="${EMQX_DASHBOARD_PORT:-18083}"

# ==================== 函数 ====================

# 获取配置值
get_config() {
    local key=$1
    echo "${!key}"
}

# 检查容器是否存在（精确匹配，保留兼容）
check_container() {
    local container=$1
    docker ps --format '{{.Names}}' 2>/dev/null | grep -q "^${container}$"
    return $?
}

# 获取容器 IP
get_container_ip() {
    local container=$1
    docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container" 2>/dev/null
}

# 获取 MySQL 密码
get_mysql_password() {
    echo "$MYSQL_PASSWORD"
}

# 获取 Redis 密码
get_redis_password() {
    echo "$REDIS_PASSWORD"
}

# 获取容器匹配模式
get_container_name() {
    local key=$1
    echo "${CONTAINERS[$key]}"
}

# 检查容器是否运行（精确匹配，保留兼容）
is_container_running() {
    local container=$1
    docker ps --format '{{.Names}}' 2>/dev/null | grep -q "^${container}$"
    return $?
}

# 模糊匹配发现容器：返回第一个匹配 grep -iE 模式的运行中容器名
# 用法：resolve_container <key>  （key 为 CONTAINERS 中的键，如 mysql）
resolve_container() {
    local key=$1
    local pattern="${CONTAINERS[$key]}"
    [ -z "$pattern" ] && return 1
    docker ps --format '{{.Names}}' 2>/dev/null | grep -iE "$pattern" | head -1
}

# ==================== 平台服务检测配置 ====================
# 格式: key:pattern,key:pattern（51_service_check.sh 使用）
# ujava 服务匹配模式（新平台容器内）
UJAVA_SERVICES="${UJAVA_SERVICES:-auth:ubains-auth.jar,gateway:ubains-gateway.jar,system:ubains-modules-system.jar,meeting:ubains-meeting-inner-api-1.0-SNAPSHOT.jar,mqtt:ubains-meeting-mqtt-1.0-SNAPSHOT.jar,quartz:ubains-meeting-quartz-1.0-SNAPSHOT.jar,message:ubains-meeting-message-scheduling-1.0-SNAPSHOT.jar}"

# ujava 宿主机服务（新平台）
UJAVA_HOST_SERVICES="${UJAVA_HOST_SERVICES:-extapi:ubains-meeting-api-1.0-SNAPSHOT.jar}"

# 传统平台 ujava 容器服务
UJAVA_OLD_CONTAINER_SERVICES="${UJAVA_OLD_CONTAINER_SERVICES:-nginx:nginx: master process,meeting:ubains-meeting-inner-api-1.0-SNAPSHOT.jar}"

# 传统平台 ujava 宿主机服务
UJAVA_OLD_HOST_SERVICES="${UJAVA_OLD_HOST_SERVICES:-extapi:ubains-meeting-api-1.0-SNAPSHOT.jar}"

# upython 端口列表（新平台，格式: port:process,port:process）
UPYTHON_PORTS_NEW="${UPYTHON_PORTS_NEW:-8000:uwsgi,11211:memcached}"

# upython_voice 端口列表（新平台）
UPYTHON_VOICE_PORTS_NEW="${UPYTHON_VOICE_PORTS_NEW:-8000:uwsgi,11211:memcached,8080:nginx,1883:mosquitto,9001:mosquitto}"

# upython 端口列表（传统平台）
UPYTHON_PORTS_OLD="${UPYTHON_PORTS_OLD:-8000:uwsgi,11211:memcached,8081:nginx,8443:nginx,8002:httpd}"

# ==================== 配置IP检测配置 ====================
# 服务器IP（运行时注入，用于IP允许列表）
SERVER_IP="${SERVER_IP:-}"
