File size: 5,076 Bytes
6fefda3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#!/bin/bash

# JetBrains AI Proxy 启动脚本
# 支持自动配置发现和多种配置方式

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 打印带颜色的消息
print_info() {
    echo -e "${BLUE}ℹ️  $1${NC}"
}

print_success() {
    echo -e "${GREEN}✅ $1${NC}"
}

print_warning() {
    echo -e "${YELLOW}⚠️  $1${NC}"
}

print_error() {
    echo -e "${RED}❌ $1${NC}"
}

# 检查可执行文件
check_executable() {
    if [ ! -f "./jetbrains-ai-proxy" ]; then
        print_error "可执行文件 './jetbrains-ai-proxy' 不存在"
        print_info "请先编译项目: go build -o jetbrains-ai-proxy"
        exit 1
    fi
    
    if [ ! -x "./jetbrains-ai-proxy" ]; then
        print_info "设置可执行权限..."
        chmod +x ./jetbrains-ai-proxy
    fi
}

# 检查配置
check_configuration() {
    print_info "检查配置..."
    
    # 检查是否存在配置文件
    config_files=(
        "config.json"
        "config/config.json"
        "configs/config.json"
        ".config/jetbrains-ai-proxy.json"
    )
    
    config_found=false
    for config_file in "${config_files[@]}"; do
        if [ -f "$config_file" ]; then
            print_success "找到配置文件: $config_file"
            config_found=true
            break
        fi
    done
    
    # 检查环境变量
    env_configured=false
    if [ -n "$JWT_TOKENS" ] || [ -n "$JWT_TOKEN" ]; then
        if [ -n "$BEARER_TOKEN" ]; then
            print_success "检测到环境变量配置"
            env_configured=true
        else
            print_warning "检测到JWT tokens但缺少BEARER_TOKEN环境变量"
        fi
    fi
    
    # 检查.env文件
    if [ -f ".env" ]; then
        print_success "找到 .env 文件"
        env_configured=true
    fi
    
    # 如果没有找到任何配置,生成示例配置
    if [ "$config_found" = false ] && [ "$env_configured" = false ]; then
        print_warning "未找到配置文件或环境变量配置"
        print_info "生成示例配置文件..."
        
        if ./jetbrains-ai-proxy --generate-config; then
            print_success "示例配置文件已生成"
            print_info "请编辑 config/config.json 或 .env.example 文件"
            print_info "然后重新运行此脚本"
            exit 0
        else
            print_error "生成示例配置失败"
            exit 1
        fi
    fi
}

# 显示配置信息
show_config() {
    print_info "当前配置信息:"
    ./jetbrains-ai-proxy --print-config
}

# 启动服务
start_service() {
    print_info "启动 JetBrains AI Proxy..."
    
    # 如果有命令行参数,直接传递
    if [ $# -gt 0 ]; then
        print_info "使用命令行参数: $*"
        exec ./jetbrains-ai-proxy "$@"
    else
        # 使用配置文件启动
        exec ./jetbrains-ai-proxy
    fi
}

# 显示帮助信息
show_help() {
    echo "JetBrains AI Proxy 启动脚本"
    echo ""
    echo "用法:"
    echo "  $0                          # 使用配置文件启动"
    echo "  $0 [options]                # 使用命令行参数启动"
    echo "  $0 --help                   # 显示帮助信息"
    echo "  $0 --config                 # 显示当前配置"
    echo "  $0 --generate               # 生成示例配置文件"
    echo ""
    echo "配置方式 (优先级从高到低):"
    echo "  1. 命令行参数"
    echo "  2. 环境变量"
    echo "  3. 配置文件 (config.json, config/config.json 等)"
    echo "  4. 默认值"
    echo ""
    echo "示例:"
    echo "  # 生成配置文件"
    echo "  $0 --generate"
    echo ""
    echo "  # 使用配置文件启动"
    echo "  $0"
    echo ""
    echo "  # 使用命令行参数启动"
    echo "  $0 -c \"jwt1,jwt2,jwt3\" -k \"bearer_token\" -s random"
    echo ""
    echo "  # 使用环境变量启动"
    echo "  export JWT_TOKENS=\"jwt1,jwt2,jwt3\""
    echo "  export BEARER_TOKEN=\"your_token\""
    echo "  $0"
    echo ""
    echo "管理端点:"
    echo "  GET  /health    - 健康检查"
    echo "  GET  /config    - 配置信息"
    echo "  GET  /stats     - 统计信息"
    echo "  POST /reload    - 重载配置"
}

# 主函数
main() {
    echo "🚀 JetBrains AI Proxy 启动脚本"
    echo "================================"
    
    # 处理特殊参数
    case "${1:-}" in
        --help|-h)
            show_help
            exit 0
            ;;
        --config)
            check_executable
            show_config
            exit 0
            ;;
        --generate)
            check_executable
            ./jetbrains-ai-proxy --generate-config
            exit 0
            ;;
    esac
    
    # 检查可执行文件
    check_executable
    
    # 检查配置
    check_configuration
    
    # 启动服务
    start_service "$@"
}

# 捕获中断信号
trap 'print_info "正在停止服务..."; exit 0' INT TERM

# 运行主函数
main "$@"