From 8324f872ef3a4d0c978a9b1d062800c6a1701c12 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期五, 01 十二月 2023 09:58:17 +0800 Subject: [PATCH] fix --- main.go | 121 +++++++++++++++++++++++++-------------- 1 files changed, 77 insertions(+), 44 deletions(-) diff --git a/main.go b/main.go index 00d2599..39420ab 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ import ( "apsClient/conf" + "apsClient/constvar" "apsClient/crontask" "apsClient/model" "apsClient/nsq" @@ -9,12 +10,11 @@ "apsClient/pkg/sqlitex" "apsClient/router" "apsClient/serf" - "apsClient/service/plc_address" + "apsClient/service" "fmt" + "log" "net/http" - "os" - "os/signal" - "syscall" + _ "net/http/pprof" "time" ) @@ -28,41 +28,65 @@ return } - if err := nsq.Init(); err != nil { - logx.Errorf("nsq Init err:%v", err) - return - } - - if err := crontask.InitTask(); err != nil { - logx.Errorf("crontab task Init err:%v", err) - return - } //鍔犺浇plc鍐欏叆鍦板潃 - plc_address.LoadAddressFromFile() - - ////鎻愬墠鍔犺浇浠诲姟 - //service.NewTaskService().GetTask() - - //go shutdown() + //plc_address.LoadAddressFromFile() // 鍚姩鏁版嵁鍚屾 var serfStartChan = make(chan bool) + // 闇�瑕佸悓姝ョ殑琛� var syncTables = []string{ "procedures", "process_model", "production_progress", "work_order", + "task_status_sync", + "device", + "device_plc", + "system_status", + "process_model_plc_address", + "reports_to_cloud", + "report_work", } agent := serf.InitAgent("apsClient", syncTables, sqlitex.GetDB()) agent.RegisterClusterEvent(serfClusterEvent) - go agent.Serve(serfStartChan) - <-serfStartChan + go agent.Serve(serfStartChan) + if !<-serfStartChan { + logx.Errorf("serf Init err, exit") + return + } + + //浠庢枃浠堕噷璇诲彇褰撳墠鐢熶骇璁惧id鑾峰彇璁惧鍒楄〃绗竴涓� + err := service.InitCurrentDeviceID(serf.Vasystem.ServerID) + if err != nil { + logx.Errorf("InitCurrentDeviceID error: %v, exit", err) + return + } + + go func() { + service.ReportsSystemDeviceToCloud(serf.Vasystem.ServerID) + }() // 鍒ゆ柇褰撳墠闆嗙兢鐘舵�� - //agent.ClusterStatus == "master" + logx.Infof("current agent.ClusterStatus:%v", agent.ClusterStatus) + log.Println("current agent.ClusterStatus:", agent.ClusterStatus) + + conf.Conf.SerfClusterStatus = agent.ClusterStatus + + if agent.ClusterStatus != "slave" { + if err := nsq.Init(); err != nil { + logx.Errorf("nsq Init err:%v", err) + return + } + + } + crontask.Once(agent.ClusterStatus != "slave") + if err := crontask.StartTask(agent.ClusterStatus != "slave"); err != nil { + logx.Errorf("crontab task Init err:%v", err) + return + } logx.Infof("apsClient start serve...") server := &http.Server{ @@ -74,29 +98,38 @@ logx.Error(server.ListenAndServe().Error()) } -func shutdown() { - quit := make(chan os.Signal, 1) - signal.Notify(quit, syscall.SIGKILL, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM) - <-quit - - logx.Infof("apsClient exited...") - os.Exit(0) -} - func serfClusterEvent(stat int) { + ChangeClusterStatus(stat) switch stat { - - case serf.EventCreateCluster: - // 鍒涘缓闆嗙兢 - case serf.EventJoinCluster: - // 鍔犲叆闆嗙兢 - case serf.EventLeaveCluster: - // 閫�鍑洪泦缇� - case serf.EventSlave2Master: - // 鍒囨崲涓轰富鑺傜偣 - case serf.EventMaster2Slave: - // 鍒囨崲涓哄瓙鑺傜偣 + case serf.EventCreateCluster, serf.EventSlave2Master, serf.EventLeaveCluster: + if err := nsq.Init(); err != nil { //寮�鍚痭sq + logx.Errorf("nsq Init err:%v", err) + return + } + crontask.Once(true) + if err := crontask.RestartTask(true); err != nil { //浠aster鏂瑰紡閲嶅惎task + logx.Errorf("crontab task Init err:%v", err) + return + } + case serf.EventJoinCluster, serf.EventMaster2Slave: + nsq.Stop() //鍏抽棴nsq + crontask.Once(false) + if err := crontask.RestartTask(false); err != nil { //浠ラ潪master鏂瑰紡閲嶅惎task + logx.Errorf("crontab task Init err:%v", err) + return + } } - fmt.Println("clusterEvent:", stat) -} \ No newline at end of file + logx.Infof("serf cluster event: %v", stat) +} + +func ChangeClusterStatus(stat int) { + switch stat { + case serf.EventSlave2Master, serf.EventCreateCluster: + conf.Conf.SerfClusterStatus = constvar.SerfClusterStatusMaster + case serf.EventLeaveCluster: + conf.Conf.SerfClusterStatus = constvar.SerfClusterStatusNull + case serf.EventJoinCluster, serf.EventMaster2Slave: + conf.Conf.SerfClusterStatus = constvar.SerfClusterStatusSlave + } +} -- Gitblit v1.8.0