()
| 106 | } |
| 107 | |
| 108 | func main() { |
| 109 | fmt.Println("🚀 aster 星尘云枢 Production Server") |
| 110 | fmt.Println("================================") |
| 111 | |
| 112 | // Initialize store |
| 113 | // 支持通过环境变量配置存储类型: json (默认), mysql, redis |
| 114 | var st store.Store |
| 115 | var err error |
| 116 | |
| 117 | storeType := os.Getenv("ASTER_STORE_TYPE") |
| 118 | switch storeType { |
| 119 | case "mysql": |
| 120 | mysqlDSN := os.Getenv("ASTER_MYSQL_DSN") |
| 121 | if mysqlDSN == "" { |
| 122 | log.Fatalf("ASTER_MYSQL_DSN is required when ASTER_STORE_TYPE=mysql") |
| 123 | } |
| 124 | fmt.Printf("📁 Using MySQL store\n") |
| 125 | st, err = store.NewMySQLStore(store.MySQLConfig{ |
| 126 | DSN: mysqlDSN, |
| 127 | }) |
| 128 | |
| 129 | case "redis": |
| 130 | redisAddr := os.Getenv("ASTER_REDIS_ADDR") |
| 131 | if redisAddr == "" { |
| 132 | redisAddr = "localhost:6379" |
| 133 | } |
| 134 | redisPassword := os.Getenv("ASTER_REDIS_PASSWORD") |
| 135 | redisDB := 0 |
| 136 | if dbStr := os.Getenv("ASTER_REDIS_DB"); dbStr != "" { |
| 137 | _, _ = fmt.Sscanf(dbStr, "%d", &redisDB) |
| 138 | } |
| 139 | redisPrefix := os.Getenv("ASTER_REDIS_PREFIX") |
| 140 | if redisPrefix == "" { |
| 141 | redisPrefix = "aster:" |
| 142 | } |
| 143 | fmt.Printf("📁 Using Redis store: %s\n", redisAddr) |
| 144 | st, err = store.NewRedisStore(store.RedisConfig{ |
| 145 | Addr: redisAddr, |
| 146 | Password: redisPassword, |
| 147 | DB: redisDB, |
| 148 | Prefix: redisPrefix, |
| 149 | }) |
| 150 | |
| 151 | default: |
| 152 | // 默认使用 JSON Store |
| 153 | dataDir := os.Getenv("ASTER_DATA_DIR") |
| 154 | if dataDir == "" { |
| 155 | dataDir = ".data" |
| 156 | } |
| 157 | fmt.Printf("📁 Using JSON store: %s\n", dataDir) |
| 158 | st, err = store.NewJSONStore(dataDir) |
| 159 | } |
| 160 | if err != nil { |
| 161 | log.Fatalf("Failed to create store: %v", err) |
| 162 | } |
| 163 | |
| 164 | // Initialize tool registry |
| 165 | toolRegistry := tools.NewRegistry() |
nothing calls this directly
no test coverage detected