package main

import (
	commonConfig "cicv-data-closedloop/aarch64/pji/common/config"
	commonService "cicv-data-closedloop/aarch64/pji/common/service"
	"cicv-data-closedloop/aarch64/pji/common/variable"
	masterConfig "cicv-data-closedloop/aarch64/pji/master/package/config"
	masterService "cicv-data-closedloop/aarch64/pji/master/package/service"
	"cicv-data-closedloop/common/config/c_log"
	"cicv-data-closedloop/common/util"
	"runtime"
	"time"
)

var applicationName = "pji-master"

func init() {
	runtime.GOMAXPROCS(1)
	// 初始化日志配置
	c_log.InitLog(variable.LogDir, applicationName)
	// 初始化本地配置文件（第1处配置，在本地文件）
	commonConfig.InitLocalConfig(variable.LocalConfigPath)
	// 初始化Oss连接信息
	commonConfig.InitOssConfig()
	// 初始化业务逻辑配置信息，配置文件在oss上（第2处配置，在oss文件）
	commonConfig.InitCloudConfig()
	_ = util.RemoveSubFiles(commonConfig.CloudConfig.BagDataDir)
	_ = util.RemoveSubFiles(commonConfig.CloudConfig.BagCopyDir)
	go commonConfig.RefreshCloudConfig()
	// 初始化数据闭环平台的配置（第3处配置，在数据闭环平台接口）
	commonConfig.InitPlatformConfig()
	// 初始化ros节点
	commonConfig.InitRosConfig()
	// 发送资源占用信息
	go commonConfig.SendResourceUsage()
	// 维护data目录缓存的包数量
	go commonService.BagCacheClean()
	// 磁盘占用过高时根据缓存策略处理copy目录
	go commonService.DiskClean()
	masterConfig.InitTriggerConfig()
	commonConfig.InitKillSignalListener(commonConfig.CloudConfig.Hosts[0].Ip)
	// 等待重启，接收到重启信号，会把信号分发给以下channel
	go commonService.WaitKillSelf()
	// 先采集地图bag包
	masterService.CollectOneMsg()
}

func main() {

	// 1 负责打包数据到data目录
	go commonService.BagRecord(commonConfig.CloudConfig.Hosts[0].Name)
	time.Sleep(time.Duration(10) * time.Second)
	// 2 负责监控故障，并修改timeWindow
	go masterService.PrepareTimeWindowProducerQueue()
	// 3 将时间窗口内的包全部move出去，并等待当前时间窗口结束触发上传
	go masterService.RunTimeWindowProducerQueue()
	// 4 排队运行时间窗口
	go commonService.RunTimeWindowConsumerQueue(commonConfig.CloudConfig.Hosts[0].Name)

	// 阻塞主线程，等待其他线程执行。
	select {}
}
