review code.
This commit is contained in:
100
internal/logic/boot.go
Normal file
100
internal/logic/boot.go
Normal file
@@ -0,0 +1,100 @@
|
||||
package logic
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
)
|
||||
|
||||
var (
|
||||
COLLECTOR_URL = "http://localhost:5000/status"
|
||||
COLLECTION_INTERVAL = 30
|
||||
)
|
||||
|
||||
func Boot() {
|
||||
log.Println("=== QMT数据采集器启动 ===")
|
||||
|
||||
log.Printf("采集地址: %s", COLLECTOR_URL)
|
||||
log.Printf("采集间隔: %d秒", COLLECTION_INTERVAL)
|
||||
|
||||
// 创建采集器
|
||||
coll := NewCollector(COLLECTOR_URL)
|
||||
|
||||
// 创建cron调度器
|
||||
c := cron.New(cron.WithSeconds())
|
||||
|
||||
// 构建cron表达式 (每N秒执行一次)
|
||||
cronSpec := fmt.Sprintf("@every %ds", COLLECTION_INTERVAL)
|
||||
log.Printf("定时任务表达式: %s", cronSpec)
|
||||
|
||||
// 添加定时任务
|
||||
_, err := c.AddFunc(cronSpec, func() {
|
||||
runCollection(coll)
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("添加定时任务失败: %v", err)
|
||||
}
|
||||
|
||||
// 启动调度器
|
||||
c.Start()
|
||||
log.Println("定时任务已启动")
|
||||
|
||||
// 等待退出信号
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-quit
|
||||
|
||||
log.Println("收到退出信号,正在关闭...")
|
||||
c.Stop()
|
||||
log.Println("采集器已停止")
|
||||
}
|
||||
|
||||
// runCollection 执行一次数据采集和存储
|
||||
func runCollection(coll *Collector) {
|
||||
// 检查是否为开市时间
|
||||
now := time.Now()
|
||||
if !IsTradingTime(now) {
|
||||
return
|
||||
}
|
||||
|
||||
log.Println("开始采集...")
|
||||
|
||||
// 采集数据并检查变化
|
||||
status, dataHash, changed, err := coll.CollectAndCheck()
|
||||
if err != nil {
|
||||
log.Printf("采集失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Printf("数据哈希: %s", dataHash)
|
||||
log.Printf("数据是否变化: %v", changed)
|
||||
|
||||
// 如果数据没有变化,只记录日志
|
||||
if !changed {
|
||||
log.Println("数据未变化,跳过存储")
|
||||
return
|
||||
}
|
||||
|
||||
// 数据有变化,保存到数据库
|
||||
log.Println("数据已变化,开始存储到数据库...")
|
||||
if err := SaveData(status); err != nil {
|
||||
log.Printf("保存数据失败: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 记录成功的日志
|
||||
// if err := store.SaveCollectionLog(dataHash, ymd, true, "数据保存成功"); err != nil {
|
||||
// log.Printf("保存采集日志失败: %v", err)
|
||||
// }
|
||||
|
||||
log.Printf("数据存储成功 - 资产账户: %s, 订单数: %d, 持仓数: %d, 行情数: %d",
|
||||
status.Data.Assets.AccountID,
|
||||
len(status.Data.Orders),
|
||||
len(status.Data.Positions),
|
||||
len(status.Data.TickData))
|
||||
}
|
||||
Reference in New Issue
Block a user