| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- package main
- import (
- _ "net/http/pprof"
- "os/exec"
- "runtime"
- "time"
- jsoniter "github.com/json-iterator/go"
- "github.com/sirupsen/logrus"
- "github.com/thinkgos/timing/v3"
- "lc/common/util"
- )
- var json = jsoniter.ConfigCompatibleWithStandardLibrary
- var pool *util.Pool
- var IDGen util.IdWorker
- var version = "1.4.1"
- var appName = "ipole"
- func Stat(args ...interface{}) interface{} {
- lastGC := time.Now()
- for {
- if time.Now().Sub(lastGC) > time.Minute {
- timing.Count()
- runtime.GC()
- lastGC = time.Now()
- }
- time.Sleep(time.Second)
- }
- }
- func GetNextUint64() uint64 {
- u64, err := IDGen.NextId()
- if err != nil {
- logrus.Errorf("IDGen.NextId发生错误:%s", err.Error())
- u64 = util.MlNow().Unix()
- }
- return uint64(u64)
- }
- // SyncTime 每半小时同步一次时间
- func SyncTime(args ...interface{}) interface{} {
- for {
- err := exec.Command("ntpclient", "-h", "106.52.134.22", "-s").Run()
- if err != nil {
- logrus.Errorf("时间同步失败:%s", err.Error())
- } else {
- logrus.Info("时间同步成功,当前时间:", util.MlNow().String())
- }
- time.Sleep(30 * time.Minute)
- }
- }
- func main() {
- runtime.GOMAXPROCS(runtime.NumCPU() * 2)
- util.InitLogrus("release")
- logrus.Infof("当前程序版本:%s", appName+" "+version)
- if err := loadAppConfig(); err != nil {
- logrus.Errorf("loadAppConfig错误:%s", err.Error())
- return
- }
- if err := loadSerialConfig(); err != nil {
- logrus.Errorf("loadAppConfig错误:%s", err.Error())
- return
- }
- _ = IDGen.InitIdWorker(1000, 1)
- GetMQTTMgr()
- InitRedis(&util.RedisConfig{Redis_Address: appConfig.Edge.Redis.Server, Redis_Password: appConfig.Edge.Redis.Password})
- defer UnInitRedis()
- //打开串口
- GetSerialMgr().AddSerialPorts(serialConfig.Serial)
- //创建设备并启动数据处理流程
- for k := range serialConfig.Serial {
- if devinfos, err := LoadDev(k); err == nil {
- GetDeviceMgr().AddDevices(devinfos)
- }
- }
- pool = util.NewPool(10)
- pool.Add(SyncTime, 0)
- pool.Add(WatchDevConfig, 1)
- pool.Add(WatchModelConfig, 2)
- pool.Add(WatchConfConfig, 3)
- pool.Add(GetMQTTMgr().MQTTMessageHandle, 4)
- pool.Add(GetMQTTMgr().MQTTConnectMgr, 5)
- pool.Add(Stat, 6)
- pool.Run()
- pool.Wait()
- }
|