支持多语言日志,增加心跳事件广播,兼容一开始缺少 vps 的流

This commit is contained in:
dexter
2023-04-04 20:10:49 +08:00
parent 5086fba6a3
commit bfde37db72
28 changed files with 438 additions and 575 deletions
+18 -6
View File
@@ -3,6 +3,7 @@ package config
import (
"net"
"net/http"
"os"
"reflect"
"strings"
"time"
@@ -43,11 +44,11 @@ func (config Config) CreateElem(eleType reflect.Type) reflect.Value {
}
func (config Config) Unmarshal(s any) {
defer func() {
if err := recover(); err != nil {
log.Error("Unmarshal error:", err)
}
}()
// defer func() {
// if err := recover(); err != nil {
// log.Error("Unmarshal error:", err)
// }
// }()
if s == nil {
return
}
@@ -106,6 +107,13 @@ func (config Config) Unmarshal(s any) {
fv.SetInt(0)
} else if d, err := time.ParseDuration(value.String()); err == nil {
fv.SetInt(int64(d))
} else {
if Global.LogLang == "zh" {
log.Errorf("%s 无效的时间值: %v 请添加单位(s,m,h,d),例如:100ms, 10s, 4m, 1h", k, value)
} else {
log.Errorf("%s invalid duration value: %v please add unit (s,m,h,d)eg: 100ms, 10s, 4m, 1h", k, value)
}
os.Exit(1)
}
continue
}
@@ -176,7 +184,11 @@ func (config Config) Merge(source Config) {
case Config:
m.Merge(v.(Config))
default:
log.Debug("merge", k, v)
if Global.LogLang == "zh" {
log.Debug("合并配置", k, ":", v)
} else {
log.Debug("merge", k, ":", v)
}
config[k] = v
}
} else {
+10 -2
View File
@@ -67,7 +67,11 @@ func (config *HTTP) Listen(ctx context.Context) error {
var g errgroup.Group
if config.ListenAddrTLS != "" && (config == &Global.HTTP || config.ListenAddrTLS != Global.ListenAddrTLS) {
g.Go(func() error {
log.Info("🌐 https listen at ", Blink(config.ListenAddrTLS))
if Global.LogLang == "zh" {
log.Info("🌐 https 监听在 ", Blink(config.ListenAddrTLS))
} else {
log.Info("🌐 https listen at ", Blink(config.ListenAddrTLS))
}
var server = http.Server{
Addr: config.ListenAddrTLS,
ReadTimeout: config.ReadTimeout,
@@ -80,7 +84,11 @@ func (config *HTTP) Listen(ctx context.Context) error {
}
if config.ListenAddr != "" && (config == &Global.HTTP || config.ListenAddr != Global.ListenAddr) {
g.Go(func() error {
log.Info("🌐 http listen at ", Blink(config.ListenAddr))
if Global.LogLang == "zh" {
log.Info("🌐 http 监听在 ", Blink(config.ListenAddr))
} else {
log.Info("🌐 http listen at ", Blink(config.ListenAddr))
}
var server = http.Server{
Addr: config.ListenAddr,
ReadTimeout: config.ReadTimeout,
+15 -3
View File
@@ -58,11 +58,19 @@ func (cfg *Engine) Remote(ctx context.Context) error {
var rMessage map[string]any
if err = json.Unmarshal(msg[:len(msg)-1], &rMessage); err == nil {
if rMessage["code"].(float64) != 0 {
log.Error("response from console server ", cfg.Server, " ", rMessage["msg"])
if Global.LogLang == "zh" {
log.Error("控制台服务器", cfg.Server, "返回错误", rMessage["msg"])
} else {
log.Error("response from console server ", cfg.Server, " ", rMessage["msg"])
}
return nil
} else {
cfg.reportStream = stream
log.Info("response from console server ", cfg.Server, " success ", rMessage)
if Global.LogLang == "zh" {
log.Info("连接到控制台服务器", cfg.Server, "成功", rMessage)
} else {
log.Info("response from console server ", cfg.Server, " success ", rMessage)
}
if v, ok := rMessage["enableReport"]; ok {
cfg.enableReport = v.(bool)
}
@@ -85,7 +93,11 @@ func (cfg *Engine) Remote(ctx context.Context) error {
if err != nil {
if wasConnected {
log.Error("connect to console server ", cfg.Server, " ", err)
if Global.LogLang == "zh" {
log.Error("连接到控制台服务器", cfg.Server, "失败", err)
} else {
log.Error("connect to console server ", cfg.Server, " ", err)
}
}
if ctx.Err() == nil {
go cfg.Remote(ctx)
+5 -1
View File
@@ -42,7 +42,11 @@ func (tcp *TCP) listen(l net.Listener, handler func(*net.TCPConn)) {
func (tcp *TCP) Listen(ctx context.Context, plugin TCPPlugin) error {
l, err := net.Listen("tcp", tcp.ListenAddr)
if err != nil {
log.Fatalf("%s: Listen error: %v", tcp.ListenAddr, err)
if Global.LogLang == "zh" {
log.Fatalf("%s: 监听失败: %v", tcp.ListenAddr, err)
} else {
log.Fatalf("%s: Listen error: %v", tcp.ListenAddr, err)
}
return err
}
count := tcp.ListenNum
+3 -1
View File
@@ -117,10 +117,12 @@ type Engine struct {
EnableSubEvent bool `default:"true"` //启用订阅事件,禁用可以提高性能
EnableAuth bool `default:"true"` //启用鉴权
Console
LogLevel string `default:"info"`
LogLang string `default:"zh"` //日志语言
LogLevel string `default:"info"` //日志级别
RTPReorderBufferLen int `default:"50"` //RTP重排序缓冲长度
SpeedLimit time.Duration `default:"500ms"` //速度限制最大等待时间
EventBusSize int `default:"10"` //事件总线大小
PulseInterval time.Duration `default:"5s"` //心跳事件间隔
enableReport bool `default:"false"` //启用报告,用于统计和监控
reportStream quic.Stream // console server connection
instanceId string // instance id 来自console