You've already forked VptPassiveAdapter
feat(config): 更新配置文件并新增自定义时间类型
- 修改 config.yaml 中的 API 地址、存储配置及设备信息 - 新增 Viid 配置项支持新功能模块 - 在 go.mod 和 go.sum 中更新依赖包版本,引入新的第三方库 - 添加 model/custom_time.go 文件实现自定义时间类型的 JSON 序列化与反序列化 - 调整 DTO 结构体以适配新的配置项 - 升级 OTLP 导出器相关依赖并移除旧的标准输出导出器 - 引入 Gin 框架及相关中间件提升服务性能 - 更新 Protobuf 和 gRPC 相关依赖至最新版本 - 增加 zap 日志库和 lumberjack 日志轮转支持 - 添加 sonic、json-iterator 等高性能 JSON 处理库优化数据解析效率 - 引入 testify 断言库增强测试代码可读性 - 更新 sync 包版本提高并发安全性 - 添加 mock 工具支持单元测试模拟对象 - 引入 validator/v10 实现请求参数校验功能 - 更新 crypto、net、text 等标准库依赖确保安全性和兼容性 - 增加 mimetype 库用于文件类型识别 - 引入 quic-go 支持 HTTP/3 协议通信 - 添加 base64x
This commit is contained in:
110
main.go
110
main.go
@@ -8,12 +8,17 @@ import (
|
||||
"ZhenTuLocalPassiveAdapter/logger"
|
||||
"ZhenTuLocalPassiveAdapter/telemetry"
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
"go.uber.org/zap"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
var tracer = otel.Tracer("vpt")
|
||||
@@ -65,6 +70,60 @@ func startTask(device config.DeviceMapping, task dto.Task) {
|
||||
zap.String("deviceNo", task.DeviceNo))
|
||||
}
|
||||
|
||||
func runTaskLoop(ctx context.Context) {
|
||||
ticker := time.NewTicker(2 * time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
case <-ticker.C:
|
||||
// 执行任务
|
||||
tasks, err := api.SyncTask()
|
||||
if err == nil {
|
||||
for _, task := range tasks {
|
||||
logger.Info("开始处理任务",
|
||||
zap.String("taskID", task.TaskID),
|
||||
zap.String("deviceNo", task.DeviceNo),
|
||||
zap.String("startTime", task.StartTime.Format("2006-01-02 15:04:05")),
|
||||
zap.String("endTime", task.EndTime.Format("2006-01-02 15:04:05")))
|
||||
// 处理任务
|
||||
for _, device := range config.Config.Devices {
|
||||
if device.DeviceNo == task.DeviceNo {
|
||||
// 处理任务
|
||||
go startTask(device, task)
|
||||
break // 提前返回,避免不必要的循环
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.Error("同步任务失败", zap.Error(err))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func startViidServer() {
|
||||
if !config.Config.Viid.Enabled {
|
||||
return
|
||||
}
|
||||
|
||||
gin.SetMode(gin.ReleaseMode)
|
||||
r := gin.Default()
|
||||
|
||||
// Register Routes
|
||||
api.RegisterVIIDRoutes(r)
|
||||
|
||||
addr := fmt.Sprintf(":%d", config.Config.Viid.Port)
|
||||
logger.Info("VIID Server starting", zap.String("addr", addr))
|
||||
go func() {
|
||||
if err := r.Run(addr); err != nil {
|
||||
logger.Error("VIID Server failed", zap.Error(err))
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func main() {
|
||||
// 初始化日志
|
||||
err := logger.Init()
|
||||
@@ -85,6 +144,7 @@ func main() {
|
||||
return
|
||||
}
|
||||
defer shutdown(ctx)
|
||||
|
||||
if config.Config.Record.Storage.Type == "local" {
|
||||
_, err = os.Stat(config.Config.Record.Storage.Path)
|
||||
if err != nil {
|
||||
@@ -96,30 +156,24 @@ func main() {
|
||||
} else {
|
||||
logger.Info("录像文件夹配置为OSS")
|
||||
}
|
||||
// 每两秒定时执行
|
||||
for {
|
||||
// 执行任务
|
||||
tasks, err := api.SyncTask()
|
||||
if err == nil {
|
||||
for _, task := range tasks {
|
||||
logger.Info("开始处理任务",
|
||||
zap.String("taskID", task.TaskID),
|
||||
zap.String("deviceNo", task.DeviceNo),
|
||||
zap.String("startTime", task.StartTime.Format("2006-01-02 15:04:05")),
|
||||
zap.String("endTime", task.EndTime.Format("2006-01-02 15:04:05")))
|
||||
// 处理任务
|
||||
for _, device := range config.Config.Devices {
|
||||
if device.DeviceNo == task.DeviceNo {
|
||||
// 处理任务
|
||||
go startTask(device, task)
|
||||
break // 提前返回,避免不必要的循环
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
logger.Error("同步任务失败", zap.Error(err))
|
||||
}
|
||||
// 等待两秒
|
||||
<-time.After(2 * time.Second)
|
||||
}
|
||||
|
||||
// Start VIID Server
|
||||
startViidServer()
|
||||
|
||||
// Context for graceful shutdown
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
// Handle Signals
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
// Start Task Loop
|
||||
go runTaskLoop(ctx)
|
||||
|
||||
// Wait for signal
|
||||
<-sigChan
|
||||
logger.Info("Received shutdown signal")
|
||||
cancel()
|
||||
logger.Info("Shutdown complete")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user