zhangzengfei
2023-09-04 e8e536d1cb52d2126c8c7ce2ba1c7a76f7208678
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package service
 
import (
    "basic.com/pubsub/protomsg.git"
    "basic.com/valib/bhomeclient.git"
    "basic.com/valib/bhomedbapi.git"
    "encoding/json"
    "time"
    "vamicro/config"
    "vamicro/extend/util"
    "vamicro/system-service/models"
)
 
type ResourceConfigService struct {
 
}
 
func WatchEsAndWeedfsIp(bk bhomeclient.Broker) {
    for {
        initEsAndWeedfsIp(bk)
 
        InitAppPermissions()
 
        time.Sleep(3 * time.Second)
    }
}
 
func initEsAndWeedfsIp(bk bhomeclient.Broker) {
    devTyp := GetDevType(config.Server.DeviceType)
    bp := false
    if devTyp == DevType_Analysis { //只做分析(盒子),盒子必须加入集群才能正常工作
        var clusterE models.Cluster
        clusters, err := clusterE.FindAll()
        if err ==nil && clusters !=nil && len(clusters) >0 {
            c := clusters[0]
            var nodeE models.Node
            nodes, e := nodeE.FindNodesByClusterId(c.ClusterId)
            if e == nil && nodes !=nil && len(nodes) >0 {
                var ipArr []string
                for _,n :=range nodes {
                    if !n.IsDelete {
                        typ := GetDevType(n.DeviceType)
                        if typ == DevType_Storage || typ == DevType_Analysis_Storage {
                            if ip,b := util.IpCheck(n.NodeIp);b {
                                ipArr = append(ipArr, ip)
                            }
                        }
                    }
                }
                if len(ipArr) > 0 {
                    var localConf models.LocalConfig
                    err := localConf.Select()
                    if err == nil {
                        found := false
                        for _,ipStr := range ipArr {
                            if ipStr == localConf.AlarmIp {
                                found = true
                                break
                            }
                        }
                        if !found { //当前设置的ip不可用,设置一个新的ip
                            localConf.AlarmIp = ipArr[0]
                            localConf.WebPicIp = ipArr[0]
                            localConf.Update()
                            bp = true
                        }
                    }
                }
            }
        }
 
    } else if devTyp == DevType_Storage || devTyp == DevType_Analysis_Storage { //分析带存储或者只存储,取本机即可
        localIp, _, _ := util.GetLocalIP(config.Server.NetworkAdapter)
        if localIp != "" {
            var localConf models.LocalConfig
            err := localConf.Select()
            if err == nil {
                if localConf.AlarmIp != localIp || localConf.WebPicIp != localIp {
                    localConf.AlarmIp = localIp
                    localConf.WebPicIp = localIp
                    localConf.Update()
                    bp = true
                }
            }
        }
    }
    if bp {
        pMsg := protomsg.DbChangeMessage{
            Table:protomsg.TableChanged_T_Server,
            Action:protomsg.DbAction_Update,
        }
        pb, _ := json.Marshal(pMsg)
        bk.Publish(ProcName, pb)
    }
}
 
func (rcs *ResourceConfigService) Save(reqBody models.ResourceConfig) bool {
    b := false
    if reqBody.IpType == models.IpType_Local {
        localIp, _, _ := util.GetLocalIP(config.Server.NetworkAdapter)
        if localIp != reqBody.ServiceIp {
            reqBody.ServiceIp = localIp
        }
    }
 
    var tmpConfig models.ResourceConfig
    err := tmpConfig.Select()
    if err == nil {
        if reqBody.Update() {
            b = true
        }
    } else {
        if reqBody.Insert() {
            b = true
        }
    }
    if b {
        gbIp := reqBody.ServiceIp  //要么是本机ip,要么是漂移ip
        if gbIp != "" {
            //判断是否需要刷新国标,条件国标服务ip有变化
            var gbApi bhomedbapi.Gb28181Api
            flag, gbConfig := gbApi.Show()
            if flag {
                gbApi.Gb28181TreeRefresh(gbConfig.Id)
            }
        }
    }
    return b
}