You've already forked VptPassiveAdapter
Compare commits
4 Commits
7d587eac46
...
1dde8fb172
| Author | SHA1 | Date | |
|---|---|---|---|
| 1dde8fb172 | |||
| 5be16406e4 | |||
| b3cd5f4809 | |||
| 763e0d0382 |
@@ -2,3 +2,5 @@ dist/
|
|||||||
.idea/
|
.idea/
|
||||||
.exe
|
.exe
|
||||||
.claude
|
.claude
|
||||||
|
.gocache
|
||||||
|
.gomodcache
|
||||||
+7
-1
@@ -31,6 +31,7 @@ func SyncTask() ([]dto.Task, error) {
|
|||||||
logger.Error("序列化JSON失败", zap.Error(err))
|
logger.Error("序列化JSON失败", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
logger.Debug("发起任务同步请求", zap.String("url", url), zap.String("requestBody", string(jsonData)))
|
||||||
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
|
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("创建请求失败", zap.Error(err))
|
logger.Error("创建请求失败", zap.Error(err))
|
||||||
@@ -48,6 +49,9 @@ func SyncTask() ([]dto.Task, error) {
|
|||||||
logger.Error("读取响应体失败", zap.Error(err))
|
logger.Error("读取响应体失败", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
logger.Debug("任务同步响应",
|
||||||
|
zap.Int("httpStatusCode", resp.StatusCode),
|
||||||
|
zap.String("responseBody", string(body)))
|
||||||
|
|
||||||
// 解析响应体为 map
|
// 解析响应体为 map
|
||||||
var response dto.TaskListResponse
|
var response dto.TaskListResponse
|
||||||
@@ -59,7 +63,9 @@ func SyncTask() ([]dto.Task, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if response.Code != 200 {
|
if response.Code != 200 {
|
||||||
logger.Error("响应错误码", zap.Int("code", response.Code))
|
logger.Error("响应错误码",
|
||||||
|
zap.Int("code", response.Code),
|
||||||
|
zap.String("msg", response.Msg))
|
||||||
return nil, fmt.Errorf(response.Msg)
|
return nil, fmt.Errorf(response.Msg)
|
||||||
}
|
}
|
||||||
return response.Data, nil
|
return response.Data, nil
|
||||||
|
|||||||
@@ -60,6 +60,10 @@ func RegisterVIIDRoutes(r *gin.Engine) {
|
|||||||
sys.POST("/UnRegister", HandleUnRegister)
|
sys.POST("/UnRegister", HandleUnRegister)
|
||||||
sys.GET("/Time", HandleSystemTime)
|
sys.GET("/Time", HandleSystemTime)
|
||||||
}
|
}
|
||||||
|
extend := viid.Group("/Extend")
|
||||||
|
{
|
||||||
|
extend.POST("/SceneCapture", HandleSceneCapture)
|
||||||
|
}
|
||||||
viid.POST("/Faces", HandleUploadFaces)
|
viid.POST("/Faces", HandleUploadFaces)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,6 +82,10 @@ func HandleUnRegister(c *gin.Context) {
|
|||||||
proxyHelper(c, "/VIID/System/UnRegister")
|
proxyHelper(c, "/VIID/System/UnRegister")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func HandleSceneCapture(c *gin.Context) {
|
||||||
|
proxyHelper(c, "/VIID/Extend/SceneCapture")
|
||||||
|
}
|
||||||
|
|
||||||
func proxyHelper(c *gin.Context, path string) {
|
func proxyHelper(c *gin.Context, path string) {
|
||||||
resp, err := ProxyRequest(c.Request.Context(), c.Request.Method, path, c.Request.Body, c.Request.Header)
|
resp, err := ProxyRequest(c.Request.Context(), c.Request.Method, path, c.Request.Body, c.Request.Header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -39,3 +39,5 @@ preview:
|
|||||||
resolutions:
|
resolutions:
|
||||||
- 720
|
- 720
|
||||||
- 1080
|
- 1080
|
||||||
|
log:
|
||||||
|
level: "info" # debug/info/warn/error,排查问题时可临时改为 debug
|
||||||
|
|||||||
@@ -70,6 +70,11 @@ type PreviewConfig struct {
|
|||||||
HwAccel string `mapstructure:"hwaccel"`
|
HwAccel string `mapstructure:"hwaccel"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type LogConfig struct {
|
||||||
|
// Level 日志级别:debug/info/warn/error,默认 info。排查问题时可临时改为 debug。
|
||||||
|
Level string `mapstructure:"level"`
|
||||||
|
}
|
||||||
|
|
||||||
type MainConfig struct {
|
type MainConfig struct {
|
||||||
Api ApiConfig `mapstructure:"api"`
|
Api ApiConfig `mapstructure:"api"`
|
||||||
Record RecordConfig `mapstructure:"record"`
|
Record RecordConfig `mapstructure:"record"`
|
||||||
@@ -79,4 +84,5 @@ type MainConfig struct {
|
|||||||
DisconnectAction DisconnectActionConfig `mapstructure:"disconnectAction"`
|
DisconnectAction DisconnectActionConfig `mapstructure:"disconnectAction"`
|
||||||
Preview PreviewConfig `mapstructure:"preview"`
|
Preview PreviewConfig `mapstructure:"preview"`
|
||||||
AddSilentAudio bool `mapstructure:"addSilentAudio"`
|
AddSilentAudio bool `mapstructure:"addSilentAudio"`
|
||||||
|
Log LogConfig `mapstructure:"log"`
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-4
@@ -8,6 +8,9 @@ import (
|
|||||||
|
|
||||||
var Logger *zap.Logger
|
var Logger *zap.Logger
|
||||||
|
|
||||||
|
// atomicLevel 持有当前生效的日志级别,支持在配置加载完成后动态调整(无需重建 Logger)
|
||||||
|
var atomicLevel = zap.NewAtomicLevelAt(zap.InfoLevel)
|
||||||
|
|
||||||
func Init() error {
|
func Init() error {
|
||||||
config := zap.NewProductionConfig()
|
config := zap.NewProductionConfig()
|
||||||
config.OutputPaths = []string{"stdout"}
|
config.OutputPaths = []string{"stdout"}
|
||||||
@@ -25,9 +28,6 @@ func Init() error {
|
|||||||
// 创建写入器
|
// 创建写入器
|
||||||
w := zapcore.AddSync(lumberJackLogger)
|
w := zapcore.AddSync(lumberJackLogger)
|
||||||
|
|
||||||
// 设置日志级别
|
|
||||||
level := zap.NewAtomicLevelAt(zap.InfoLevel)
|
|
||||||
|
|
||||||
// 创建编码器配置
|
// 创建编码器配置
|
||||||
encoderConfig := zap.NewProductionEncoderConfig()
|
encoderConfig := zap.NewProductionEncoderConfig()
|
||||||
encoderConfig.TimeKey = "time"
|
encoderConfig.TimeKey = "time"
|
||||||
@@ -41,7 +41,7 @@ func Init() error {
|
|||||||
encoder := zapcore.NewConsoleEncoder(encoderConfig)
|
encoder := zapcore.NewConsoleEncoder(encoderConfig)
|
||||||
|
|
||||||
// 创建核心
|
// 创建核心
|
||||||
core := zapcore.NewCore(encoder, w, level)
|
core := zapcore.NewCore(encoder, w, atomicLevel)
|
||||||
|
|
||||||
// 创建日志记录器
|
// 创建日志记录器
|
||||||
Logger = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
|
Logger = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
|
||||||
@@ -49,6 +49,20 @@ func Init() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetLevel 动态调整日志级别,可在配置文件加载完成后调用(例如开启 debug 日志排查问题)。
|
||||||
|
// levelStr 支持 debug/info/warn/error 等,为空或非法值时保持当前级别不变并返回错误。
|
||||||
|
func SetLevel(levelStr string) error {
|
||||||
|
if levelStr == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var level zapcore.Level
|
||||||
|
if err := level.UnmarshalText([]byte(levelStr)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
atomicLevel.SetLevel(level)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func Info(message string, fields ...zap.Field) {
|
func Info(message string, fields ...zap.Field) {
|
||||||
Logger.Info(message, fields...)
|
Logger.Info(message, fields...)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -192,6 +192,7 @@ func runTaskLoop(ctx context.Context) {
|
|||||||
return
|
return
|
||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
// 执行任务
|
// 执行任务
|
||||||
|
logger.Debug("开始同步任务", zap.Int("deviceCount", len(config.Config.Devices)))
|
||||||
tasks, err := api.SyncTask()
|
tasks, err := api.SyncTask()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var connErr *api.ConnError
|
var connErr *api.ConnError
|
||||||
@@ -230,6 +231,7 @@ func runTaskLoop(ctx context.Context) {
|
|||||||
firstFailureTime = time.Time{}
|
firstFailureTime = time.Time{}
|
||||||
commandExecuted = false
|
commandExecuted = false
|
||||||
}
|
}
|
||||||
|
logger.Debug("同步任务完成", zap.Int("taskCount", len(tasks)))
|
||||||
for _, task := range tasks {
|
for _, task := range tasks {
|
||||||
logger.Info("开始处理任务",
|
logger.Info("开始处理任务",
|
||||||
zap.String("taskID", task.TaskID),
|
zap.String("taskID", task.TaskID),
|
||||||
@@ -237,13 +239,20 @@ func runTaskLoop(ctx context.Context) {
|
|||||||
zap.String("startTime", task.StartTime.Format("2006-01-02 15:04:05")),
|
zap.String("startTime", task.StartTime.Format("2006-01-02 15:04:05")),
|
||||||
zap.String("endTime", task.EndTime.Format("2006-01-02 15:04:05")))
|
zap.String("endTime", task.EndTime.Format("2006-01-02 15:04:05")))
|
||||||
// 处理任务
|
// 处理任务
|
||||||
|
matched := false
|
||||||
for _, device := range config.Config.Devices {
|
for _, device := range config.Config.Devices {
|
||||||
if device.DeviceNo == task.DeviceNo {
|
if device.DeviceNo == task.DeviceNo {
|
||||||
|
matched = true
|
||||||
// 处理任务
|
// 处理任务
|
||||||
go startTask(device, task)
|
go startTask(device, task)
|
||||||
break // 提前返回,避免不必要的循环
|
break // 提前返回,避免不必要的循环
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !matched {
|
||||||
|
logger.Warn("任务的设备编号未匹配到任何已配置设备,任务被跳过",
|
||||||
|
zap.String("taskID", task.TaskID),
|
||||||
|
zap.String("deviceNo", task.DeviceNo))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -283,6 +292,10 @@ func main() {
|
|||||||
logger.Fatal("加载配置文件失败", zap.Error(err))
|
logger.Fatal("加载配置文件失败", zap.Error(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if err := logger.SetLevel(config.Config.Log.Level); err != nil {
|
||||||
|
logger.Warn("日志级别配置无效,使用默认级别",
|
||||||
|
zap.String("level", config.Config.Log.Level), zap.Error(err))
|
||||||
|
}
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
shutdown, err := telemetry.InitTelemetry(ctx)
|
shutdown, err := telemetry.InitTelemetry(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user