#!/bin/bash

# Zabbix Agent 2 一键安装脚本
# 适用于 RHEL/CentOS 7 系统
# 需要以root权限执行

set -euo pipefail

# 定义颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 恢复默认颜色

# 打印带时间戳的信息
log_info() {
    echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] INFO: $1${NC}"
}

# 打印成功信息
log_success() {
    echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS: $1${NC}"
}

# 打印错误信息并退出
log_error() {
    echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}" >&2
    exit 1
}

# 检查root权限
check_root() {
    if [ "$EUID" -ne 0 ]; then
        log_error "请使用root权限执行本脚本"
    fi
}

# 安装Zabbix仓库
install_repo() {
    log_info "正在安装Zabbix官方仓库..."
    local repo_url="https://repo.zabbix.com/zabbix/7.0/rhel/7/x86_64/zabbix-release-latest-7.0.el7.noarch.rpm"
    
    if rpm -Uvh "$repo_url"; then
        log_success "仓库安装成功"
    else
        log_error "仓库安装失败，请检查网络连接或URL有效性"
    fi

    log_info "清理YUM缓存..."
    if yum clean all > /dev/null; then
        log_success "缓存清理完成"
    else
        log_error "缓存清理失败"
    fi
}

# 安装Zabbix Agent 2
install_agent() {
    log_info "正在安装Zabbix Agent 2..."
    if yum install -y zabbix-agent2; then
        log_success "Zabbix Agent 2安装成功"
    else
        log_error "Zabbix Agent 2安装失败"
    fi
}

# 安装可选插件
install_plugins() {
    local plugins=(
        zabbix-agent2-plugin-mongodb
        zabbix-agent2-plugin-mssql
        zabbix-agent2-plugin-postgresql
    )

    log_info "正在安装可选插件..."
    if yum install -y "${plugins[@]}"; then
        log_success "插件安装成功"
    else
        log_error "插件安装失败"
    fi
}

# 配置并启动服务
setup_service() {
    log_info "正在启动Zabbix Agent 2服务..."
    if systemctl restart zabbix-agent2; then
        log_success "服务启动成功"
    else
        log_error "服务启动失败"
    fi

    log_info "设置开机自启..."
    if systemctl enable zabbix-agent2; then
        log_success "开机自启设置成功"
    else
        log_error "开机自启设置失败"
    fi
}

# 显示最终状态
show_status() {
    echo -e "\n${GREEN}安装完成！${NC}"
    echo -e "${YELLOW}后续操作建议："
    echo -e "1. 编辑配置文件: /etc/zabbix/zabbix_agent2.conf"
    echo -e "2. 设置 Server=[Zabbix Server IP] 或 ActiveServer=[Zabbix Server IP]"
    echo -e "3. 重启服务: systemctl restart zabbix-agent2"
    echo -e "4. 检查服务状态: systemctl status zabbix-agent2${NC}\n"
}

# 主执行流程
main() {
    check_root
    install_repo
    install_agent
    install_plugins
    setup_service
    show_status
}

# 执行主函数
main
