EasyAudioEncode/main.go
2025-12-25 17:01:46 +08:00

112 lines
2.6 KiB
Go

package main
import (
"encoding/json"
"expvar"
"flag"
"fmt"
"os"
"path/filepath"
"strconv"
"time"
"easyaudioencode/internal/app"
"easyaudioencode/internal/conf"
"git.lnton.com/lnton/pkg/system"
)
var (
buildVersion = "0.0.1" // 构建版本号
gitBranch = "dev" // git 分支
gitHash = "debug" // git 提交点哈希值
release string // 发布模式 true/false
buildTime string // 构建时间戳
)
// 自定义配置目录
var configDir = flag.String("conf", "./configs", "config directory, eg: -conf /configs/")
// 默认使用随机端口
// 可使用-http-port指定端口
// 可医用-http-port = -1 使用配置文件的端口
var httpPort = flag.Int("http-port", 0, "HTTP server port; 0 uses random")
func getBuildRelease() bool {
v, _ := strconv.ParseBool(release)
return v
}
func main() {
flag.Parse()
// 初始化配置
var bc conf.Bootstrap
fileDir, _ := system.Abs(*configDir)
_ = os.MkdirAll(fileDir, 0o755)
filePath := filepath.Join(fileDir, "config.toml")
configIsNotExistWrite(filePath)
if err := conf.SetupConfig(&bc, filePath); err != nil {
panic(err)
}
LoadEnvConfig(&bc)
// 根据启动参数设置端口
if *httpPort >= 0 {
bc.Server.HTTP.Port = *httpPort
}
bc.Debug = !getBuildRelease()
bc.BuildVersion = buildVersion
bc.ConfigDir = fileDir
bc.ConfigPath = filePath
{
expvar.NewString("version").Set(buildVersion)
expvar.NewString("git_branch").Set(gitBranch)
expvar.NewString("git_hash").Set(gitHash)
expvar.NewString("build_time").Set(buildTime)
expvar.Publish("timestamp", expvar.Func(func() any {
return time.Now().Format(time.DateTime)
}))
}
app.Run(&bc)
}
// configIsNotExistWrite 配置文件不存在时,回写配置
func configIsNotExistWrite(path string) {
if _, err := os.Stat(path); os.IsNotExist(err) {
if err := conf.WriteConfig(conf.DefaultConfig(), path); err != nil {
system.ErrPrintf("WriteConfig", "err", err)
}
}
}
type EnvPlugin struct {
HostGrpcPort int `json:"host_grpc_port"`
EasyAudioEncodePort int `json:"easy_audio_encode_port"`
}
func LoadEnvConfig(bc *conf.Bootstrap) {
easygbsAPI := os.Getenv("EASYGBS_API")
fmt.Printf("环境变量EASYGBS_API='%s'", easygbsAPI)
if easygbsAPI != "" {
bc.Plugin.HttpAPI = easygbsAPI
}
pluginConfigs := os.Getenv("PLUGIN_CONFIGS")
cp := EnvPlugin{}
if err := json.Unmarshal([]byte(pluginConfigs), &cp); err != nil {
return
}
fmt.Printf("环境变量PLUGIN_CONFIGS='%s'", pluginConfigs)
// 将环境变量的值更新到全局
if cp.HostGrpcPort > 0 {
bc.Plugin.GrpcPort = cp.HostGrpcPort
}
if cp.EasyAudioEncodePort > 0 {
bc.Server.HTTP.Port = cp.EasyAudioEncodePort
}
}