| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- package main
- import (
- "net/http"
- _ "net/http/pprof"
- "os"
- "os/exec"
- "os/signal"
- "runtime"
- "syscall"
- "time"
- jsoniter "github.com/json-iterator/go"
- "github.com/sanbornm/go-selfupdate/selfupdate"
- "github.com/sirupsen/logrus"
- "github.com/thinkgos/timing/v3"
- "lc/common/util"
- )
- var json = jsoniter.ConfigCompatibleWithStandardLibrary
- var gopool *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)
- }
- return 0
- }
- func GetNextUint64() uint64 {
- u64, err := IDGen.NextId()
- if err != nil {
- logrus.Errorf("IDGen.NextId发生错误:%s", err.Error())
- u64 = util.MlNow().Unix()
- }
- return uint64(u64)
- }
- func EnableUpdate() {
- var updater = &selfupdate.Updater{
- CurrentVersion: version,
- ApiURL: "http://106.52.134.22:8180/",
- BinURL: "http://106.52.134.22:8180/",
- DiffURL: "http://106.52.134.22:8180/",
- Dir: "update/",
- CmdName: appname, // app name
- }
- if updater != nil {
- go updater.BackgroundRun()
- }
- }
- // WatchGoforever 每十分钟查看一次goforever是否启动 hxz
- func WatchGoforever(args ...interface{}) interface{} {
- for {
- time.Sleep(1 * time.Minute)
- isRun, err := CheckProRunning("goforever")
- if err != nil {
- logrus.Errorf("检查goforever命令失败:%s", err.Error())
- } else {
- if !isRun {
- //这里重启goforever
- //err := exec.Command("/usr/app/goforever/goforever", "&").Run()
- //err := exec.Command("/bin/sh", "-c", "/usr/app/goforever/goforever ./goforever &").Run()
- err := exec.Command("/bin/sh", "-c", "/usr/app/goforever ./goforever &").Run()
- if err != nil {
- logrus.Errorf("重启goforever出错: %s", err.Error())
- } else {
- logrus.Info("重启goforever成功,当前时间:", util.MlNow().String())
- }
- } else {
- logrus.Info("goforever进程正在运行:", util.MlNow().String())
- }
- }
- }
- }
- // 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 SignalProcess(args ...interface{}) interface{} {
- for {
- ch := make(chan os.Signal)
- signal.Notify(ch, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGQUIT)
- logrus.Info("检测到退出信号:", <-ch)
- }
- return 0
- }
- // func HttpProcess(w http.ResponseWriter, r *http.Request) {
- // if GetMonitorStatus().GetMonitorRunStatus() {
- // fmt.Fprintf(w, "1")
- // } else {
- // fmt.Fprintf(w, "0")
- // }
- // }
- func main() {
- runtime.GOMAXPROCS(runtime.NumCPU() * 2)
- util.InitLogrus("release")
- go func() {
- logrus.Infoln(http.ListenAndServe(":9999", nil))
- }()
- logrus.Infof("当前程序版本:%s", appname+" "+version)
- if err := loadAppConfig(); err != nil {
- logrus.Errorf("loadAppConfig错误:%s", err.Error())
- return
- }
- //升级检查
- if appConfig.Upgrade {
- EnableUpdate()
- }
- 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()
- InitCloudMqttSubscribeTopics()
- //打开串口
- GetSerialMgr().AddSerialPorts(serialConfig.Serial)
- //创建设备并启动数据处理流程
- for k := range serialConfig.Serial {
- if devinfos, err := LoadDev(k); err == nil {
- GetDeviceMgr().AddDevices(devinfos)
- }
- }
- gopool = util.NewPool(10)
- gopool.Add(SyncTime, 0)
- // gopool.Add(WatchGoforever, 0)
- // gopool.Add(SignalProcess, 8)
- gopool.Add(WatchDevConfig, 1)
- gopool.Add(WatchModelConfig, 2)
- gopool.Add(WatchConfConfig, 3)
- gopool.Add(GetMQTTMgr().MQTTMessageHandle, 4)
- gopool.Add(GetMQTTMgr().MQTTConnectMgr, 5)
- gopool.Add(Stat, 6)
- gopool.Add(RadarReceive, 7)
- gopool.Run()
- gopool.Wait()
- }
|