mao-service-discovery 1.6.0-commit-2023-07-24-04-37-15.0 → 1.6.0-commit-2023-07-24-06-26-38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MaoServerDiscovery +0 -0
- package/package.json +1 -1
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/codeql-analysis.yml +0 -75
- package/.github/workflows/docker-image.yml +0 -24
- package/.github/workflows/docker-publish.yml +0 -94
- package/.github/workflows/go.yml +0 -29
- package/.github/workflows/go_static.yml +0 -29
- package/.github/workflows/npm-publish-release.yml +0 -36
- package/.github/workflows/npm-publish.yml +0 -32
- package/Dockerfile +0 -19
- package/LICENSE +0 -201
- package/MODULES.md +0 -39
- package/README.md +0 -54
- package/bak/index.html +0 -42
- package/bak/receiveProcessIcmpLoopV4V6.bak +0 -73
- package/bak/test/test-icmp-ka-module.go +0 -297
- package/bak/test/test-tech.go +0 -110
- package/bak/using_etcd/main.go +0 -165
- package/cmd/api/aux-data-module.go +0 -14
- package/cmd/api/config-module.go +0 -11
- package/cmd/api/email-module.go +0 -14
- package/cmd/api/gateway-module.go +0 -23
- package/cmd/api/grpc-ka-module.go +0 -29
- package/cmd/api/icmp-ka-module.go +0 -26
- package/cmd/api/restful-server-module.go +0 -13
- package/cmd/api/topo-module.go +0 -31
- package/cmd/api/wechat-module.go +0 -18
- package/cmd/general_client.go +0 -366
- package/cmd/lib/AuxDataProcessor/aux-data-processor-module.go +0 -64
- package/cmd/lib/AuxDataProcessor/env-temp-processor.go +0 -63
- package/cmd/lib/AuxDataProcessor/env-temp-processor_test.go +0 -30
- package/cmd/lib/Config/config-yaml-module.go +0 -303
- package/cmd/lib/Config/config-yaml-module_test.go +0 -308
- package/cmd/lib/Email/login-auth.go +0 -35
- package/cmd/lib/Email/login-auth_test.go +0 -13
- package/cmd/lib/Email/smtp-email-module.go +0 -229
- package/cmd/lib/Email/smtp-email-module_test.go +0 -12
- package/cmd/lib/GrpcKa/grpc-detect-module.go +0 -269
- package/cmd/lib/GrpcKa/grpc-detect-module_test.go +0 -26
- package/cmd/lib/IcmpKa/icmp-detect-module.go +0 -545
- package/cmd/lib/IcmpKa/icmp-detect-module_test.go +0 -23
- package/cmd/lib/InfluxDB/influxdb-util.go +0 -72
- package/cmd/lib/MaoCommon/gps.go +0 -15
- package/cmd/lib/MaoCommon/service-registry-util.go +0 -59
- package/cmd/lib/MaoCommon/service-registry.go +0 -14
- package/cmd/lib/MaoCommon/service-registry_test.go +0 -30
- package/cmd/lib/MaoEnhancedGolang/smtp.go +0 -438
- package/cmd/lib/Restful/restful-server-impl.go +0 -87
- package/cmd/lib/Soap/soap-tplink-util.go +0 -186
- package/cmd/lib/Soap/soap-tplink-util_test.go +0 -45
- package/cmd/lib/Soap/tplink-gateway-module.go +0 -200
- package/cmd/server.go +0 -327
- package/go.mod +0 -38
- package/go.sum +0 -222
- package/grpc.maojianwei.com/server/discovery/api/generate_api_from_protobuf.sh +0 -1
- package/grpc.maojianwei.com/server/discovery/api/mao-server-discovery.pb.go +0 -403
- package/grpc.maojianwei.com/server/discovery/api/mao-server-discovery.proto +0 -35
- package/grpc.maojianwei.com/server/discovery/api/mao-server-discovery_grpc.pb.go +0 -207
- package/incubator/OnosTopoShow/onos-topo-module.go +0 -347
- package/incubator/Wechat/wechat-message-module.go +0 -267
- package/incubator/Wechat/wechat-message-module_test.go +0 -108
- package/main.go +0 -383
- package/notebook/notebook.txt +0 -8
- package/resource/index-email.html +0 -67
- package/resource/index-icmp.html +0 -41
- package/resource/index-onos.html +0 -38
- package/resource/index-server.html +0 -57
- package/resource/index-wechat.html +0 -64
- package/resource/jquery-3.6.0.min.js +0 -2
- package/screenshot/2-cli-output.png +0 -0
- package/screenshot/2-cli-parameters.png +0 -0
- package/screenshot/2-json-format.png +0 -0
- package/screenshot/2-readable-format.png +0 -0
- package/screenshot/client-server-mode-1.png +0 -0
- package/screenshot/client-server-mode-2.png +0 -0
- package/screenshot/client-server-mode-production.png +0 -0
- package/screenshot/show_using_etcd.png +0 -0
- package/statically_linked_compilation.sh +0 -2
- package/util/mao_log.go +0 -42
- package/util/mao_log_test.go +0 -73
- package/util/mao_util.go +0 -53
package/cmd/api/config-module.go
DELETED
package/cmd/api/email-module.go
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
package MaoApi
|
|
2
|
-
|
|
3
|
-
var (
|
|
4
|
-
GatewayModuleRegisterName = "gateway-module"
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
const (
|
|
8
|
-
GATEWAY_MEASUREMENT = "Gateway"
|
|
9
|
-
GATEWAY_TAG_GEO = "Geo"
|
|
10
|
-
GATEWAY_FIELD_BytesReceivedSpeed = "BytesReceivedSpeed"
|
|
11
|
-
GATEWAY_FIELD_BytesReceived = "BytesReceived"
|
|
12
|
-
GATEWAY_FIELD_BytesSentSpeed = "BytesSentSpeed"
|
|
13
|
-
GATEWAY_FIELD_BytesSent = "BytesSent"
|
|
14
|
-
GATEWAY_FIELD_PacketsReceivedSpeed = "PacketsReceivedSpeed"
|
|
15
|
-
GATEWAY_FIELD_PacketsReceived = "PacketsReceived"
|
|
16
|
-
GATEWAY_FIELD_PacketsSentSpeed = "PacketsSentSpeed"
|
|
17
|
-
GATEWAY_FIELD_PacketsSent = "PacketsSent"
|
|
18
|
-
GATEWAY_FIELD_Uptime = "Uptime"
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
type GatewayModule interface {
|
|
22
|
-
//SendEmail(message *EmailMessage)
|
|
23
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
package MaoApi
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"time"
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
var (
|
|
8
|
-
GrpcKaModuleRegisterName = "api-grpc-ka-module"
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
type GrpcServiceNode struct {
|
|
12
|
-
Hostname string
|
|
13
|
-
ReportTimes uint64
|
|
14
|
-
|
|
15
|
-
Ips []string
|
|
16
|
-
RealClientAddr string
|
|
17
|
-
|
|
18
|
-
OtherData string
|
|
19
|
-
|
|
20
|
-
ServerDateTime string
|
|
21
|
-
LocalLastSeen time.Time
|
|
22
|
-
Alive bool
|
|
23
|
-
|
|
24
|
-
RttDuration time.Duration // nanosecond, uint64
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
type GrpcKaModule interface {
|
|
28
|
-
GetServiceInfo() []*GrpcServiceNode
|
|
29
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
package MaoApi
|
|
2
|
-
|
|
3
|
-
import "time"
|
|
4
|
-
|
|
5
|
-
var (
|
|
6
|
-
IcmpKaModuleRegisterName = "api-icmp-ka-module"
|
|
7
|
-
)
|
|
8
|
-
|
|
9
|
-
type MaoIcmpService struct {
|
|
10
|
-
Address string
|
|
11
|
-
|
|
12
|
-
Alive bool
|
|
13
|
-
LastSeen time.Time
|
|
14
|
-
|
|
15
|
-
DetectCount uint64
|
|
16
|
-
ReportCount uint64
|
|
17
|
-
|
|
18
|
-
RttDuration time.Duration
|
|
19
|
-
RttOutboundTimestamp time.Time
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
type IcmpKaModule interface {
|
|
23
|
-
AddService(serviceIPv4v6 string)
|
|
24
|
-
DelService(serviceIPv4v6 string)
|
|
25
|
-
GetServices() []*MaoIcmpService
|
|
26
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
package MaoApi
|
|
2
|
-
|
|
3
|
-
import "github.com/gin-gonic/gin"
|
|
4
|
-
|
|
5
|
-
var (
|
|
6
|
-
RestfulServerRegisterName = "api-restful-server-module"
|
|
7
|
-
)
|
|
8
|
-
|
|
9
|
-
type RestfulServerModule interface {
|
|
10
|
-
RegisterUiPage(relativePath string, handlers ...gin.HandlerFunc)
|
|
11
|
-
RegisterGetApi(relativePath string, handlers ...gin.HandlerFunc)
|
|
12
|
-
RegisterPostApi(relativePath string, handlers ...gin.HandlerFunc)
|
|
13
|
-
}
|
package/cmd/api/topo-module.go
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
package MaoApi
|
|
2
|
-
|
|
3
|
-
import "time"
|
|
4
|
-
|
|
5
|
-
type EventType int
|
|
6
|
-
|
|
7
|
-
const (
|
|
8
|
-
SOURCE_GRPC = "gRPC"
|
|
9
|
-
SOURCE_ICMP = "ICMP"
|
|
10
|
-
)
|
|
11
|
-
const (
|
|
12
|
-
SERVICE_UP EventType = iota + 1
|
|
13
|
-
SERVICE_DOWN
|
|
14
|
-
SERVICE_DELETE
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
var (
|
|
18
|
-
TopoModuleRegisterName = "onos-topo-module"
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
type TopoEvent struct {
|
|
22
|
-
EventType EventType
|
|
23
|
-
EventSource string
|
|
24
|
-
|
|
25
|
-
ServiceName string
|
|
26
|
-
Timestamp time.Time
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
type TopoModule interface {
|
|
30
|
-
SendEvent(event *TopoEvent)
|
|
31
|
-
}
|
package/cmd/api/wechat-module.go
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
package MaoApi
|
|
2
|
-
|
|
3
|
-
var (
|
|
4
|
-
WechatModuleRegisterName = "wechat-module"
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
type WechatMessage struct {
|
|
8
|
-
|
|
9
|
-
Receivers []string // length == 0 stands for all receivers; nil stands for unspecified.
|
|
10
|
-
|
|
11
|
-
Title string
|
|
12
|
-
ContentHttp string
|
|
13
|
-
Url string
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
type WechatModule interface {
|
|
17
|
-
SendWechatMessage(message *WechatMessage)
|
|
18
|
-
}
|
package/cmd/general_client.go
DELETED
|
@@ -1,366 +0,0 @@
|
|
|
1
|
-
package branch
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"MaoServerDiscovery/cmd/lib/MaoCommon"
|
|
5
|
-
pb "MaoServerDiscovery/grpc.maojianwei.com/server/discovery/api"
|
|
6
|
-
util "MaoServerDiscovery/util"
|
|
7
|
-
"encoding/json"
|
|
8
|
-
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
|
|
9
|
-
influxdb2Api "github.com/influxdata/influxdb-client-go/v2/api"
|
|
10
|
-
"strings"
|
|
11
|
-
|
|
12
|
-
"context"
|
|
13
|
-
"google.golang.org/grpc"
|
|
14
|
-
"net"
|
|
15
|
-
"os/exec"
|
|
16
|
-
"strconv"
|
|
17
|
-
"time"
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
const (
|
|
21
|
-
c_MODULE_NAME = "General-Client"
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
var (
|
|
25
|
-
envTemp float64
|
|
26
|
-
gpsLast *MaoCommon.GpsData
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
func nat66UploadInfluxdb(writeAPI *influxdb2Api.WriteAPI, v6In uint64, v6Out uint64) {
|
|
30
|
-
// write point asynchronously
|
|
31
|
-
(*writeAPI).WritePoint(
|
|
32
|
-
influxdb2.NewPointWithMeasurement("NAT66_Gateway").
|
|
33
|
-
AddTag("Geo", "Beijing-HQ").
|
|
34
|
-
AddField("v6In", v6In).
|
|
35
|
-
AddField("v6Out", v6Out).
|
|
36
|
-
SetTime(time.Now()))
|
|
37
|
-
// Not flush writes, avoid blocking my thread, then the lib's thread will block itself.
|
|
38
|
-
//(*writeAPI).Flush()
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/*
|
|
42
|
-
return v6In,v6Out,error
|
|
43
|
-
*/
|
|
44
|
-
func getNat66GatewayData() (uint64, uint64, error) {
|
|
45
|
-
ccc := exec.Command("/bin/bash", "-c", "ip6tables -nvxL FORWARD | grep MaoIPv6In | awk '{printf $2}'")
|
|
46
|
-
ininin, err := ccc.CombinedOutput()
|
|
47
|
-
if err != nil {
|
|
48
|
-
util.MaoLogM(util.ERROR, c_MODULE_NAME, "Fail to get MaoIPv6In, %s", err.Error())
|
|
49
|
-
return 0, 0, err
|
|
50
|
-
}
|
|
51
|
-
ccc = exec.Command("/bin/bash", "-c", "ip6tables -nvxL FORWARD | grep MaoIPv6Out | awk '{printf $2}'")
|
|
52
|
-
outoutout, err := ccc.CombinedOutput()
|
|
53
|
-
if err != nil {
|
|
54
|
-
util.MaoLogM(util.ERROR, c_MODULE_NAME, "Fail to get MaoIPv6Out, %s", err.Error())
|
|
55
|
-
return 0, 0, err
|
|
56
|
-
}
|
|
57
|
-
v6In, err := strconv.ParseUint(string(ininin), 10, 64)
|
|
58
|
-
if err != nil {
|
|
59
|
-
util.MaoLogM(util.ERROR, c_MODULE_NAME, "Fail to parse MaoIPv6In, %s", err.Error())
|
|
60
|
-
return 0, 0, err
|
|
61
|
-
}
|
|
62
|
-
v6Out, err := strconv.ParseUint(string(outoutout), 10, 64)
|
|
63
|
-
if err != nil {
|
|
64
|
-
util.MaoLogM(util.ERROR, c_MODULE_NAME, "Fail to parse MaoIPv6Out, %s", err.Error())
|
|
65
|
-
return 0, 0, err
|
|
66
|
-
}
|
|
67
|
-
util.MaoLogM(util.DEBUG, c_MODULE_NAME, "v6In: %d , v6Out: %d", v6In, v6Out)
|
|
68
|
-
return v6In, v6Out, nil
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
func envTempUploadInfluxdb(writeAPI *influxdb2Api.WriteAPI, envTemperature float64) {
|
|
74
|
-
// write point asynchronously
|
|
75
|
-
(*writeAPI).WritePoint(
|
|
76
|
-
influxdb2.NewPointWithMeasurement("Temperature").
|
|
77
|
-
AddTag("Geo", "Beijing-HQ").
|
|
78
|
-
AddField("env", envTemperature).
|
|
79
|
-
SetTime(time.Now()))
|
|
80
|
-
// Not flush writes, avoid blocking my thread, then the lib's thread will block itself.
|
|
81
|
-
//(*writeAPI).Flush()
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
func updateEnvironmentTemperature() {
|
|
85
|
-
for {
|
|
86
|
-
ccc := exec.Command("/bin/bash", "-c", "cat /sys/bus/w1/devices/28-00141093caff/w1_slave")
|
|
87
|
-
w1Data, err := ccc.CombinedOutput()
|
|
88
|
-
if err == nil {
|
|
89
|
-
|
|
90
|
-
w1DataSplit := strings.Split(string(w1Data), "\n")
|
|
91
|
-
if len(w1DataSplit) == 3 {
|
|
92
|
-
|
|
93
|
-
tempText := strings.Split(w1DataSplit[1], "=")
|
|
94
|
-
if len(tempText) == 2 {
|
|
95
|
-
|
|
96
|
-
temp, err := strconv.ParseFloat(tempText[1], 64)
|
|
97
|
-
if err == nil {
|
|
98
|
-
envTemp = temp / 1000
|
|
99
|
-
util.MaoLogM(util.DEBUG, c_MODULE_NAME, "Get envTemp: %f, %f", temp, envTemp)
|
|
100
|
-
} else {
|
|
101
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to parse temperature text, %s", err.Error())
|
|
102
|
-
}
|
|
103
|
-
} else {
|
|
104
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to parse 1-line protocol data slice, %s", err.Error())
|
|
105
|
-
}
|
|
106
|
-
} else {
|
|
107
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to parse 1-line protocol data, %s", err.Error())
|
|
108
|
-
}
|
|
109
|
-
} else {
|
|
110
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to get 1-line protocol data, %s", err.Error())
|
|
111
|
-
}
|
|
112
|
-
time.Sleep(500 * time.Millisecond)
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
func gpsDataUploadInfluxdb(writeAPI *influxdb2Api.WriteAPI, gpsData *MaoCommon.GpsData) {
|
|
117
|
-
// write point asynchronously
|
|
118
|
-
(*writeAPI).WritePoint(
|
|
119
|
-
influxdb2.NewPointWithMeasurement("GPS").
|
|
120
|
-
AddTag("Geo", "Beijing-HQ").
|
|
121
|
-
AddField("GPS_Timestamp", gpsData.Timestamp).
|
|
122
|
-
AddField("GPS_Latitude", gpsData.Latitude).
|
|
123
|
-
AddField("GPS_Longitude", gpsData.Longitude).
|
|
124
|
-
AddField("GPS_Altitude", gpsData.Altitude).
|
|
125
|
-
AddField("GPS_Satellite", gpsData.Satellite).
|
|
126
|
-
AddField("GPS_Hdop", gpsData.Hdop).
|
|
127
|
-
AddField("GPS_Vdop", gpsData.Vdop).
|
|
128
|
-
SetTime(time.Now()))
|
|
129
|
-
// Not flush writes, avoid blocking my thread, then the lib's thread will block itself.
|
|
130
|
-
//(*writeAPI).Flush()
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
func updateGpsInfo(gpsApiData string) (*MaoCommon.GpsData) {
|
|
134
|
-
|
|
135
|
-
var err1 error
|
|
136
|
-
var err2 error
|
|
137
|
-
var err3 error
|
|
138
|
-
var err4 error
|
|
139
|
-
|
|
140
|
-
newGps := &MaoCommon.GpsData{}
|
|
141
|
-
|
|
142
|
-
items := strings.Split(gpsApiData, ";")
|
|
143
|
-
for _, item := range items {
|
|
144
|
-
|
|
145
|
-
kv := strings.Split(item, "=")
|
|
146
|
-
switch kv[0] {
|
|
147
|
-
case "GPS":
|
|
148
|
-
datas := strings.Split(kv[1], ",")
|
|
149
|
-
if datas[0] == "lost" || datas[0] == "init" {
|
|
150
|
-
return nil
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
newGps.Latitude, err1 = strconv.ParseFloat(datas[0], 64)
|
|
154
|
-
newGps.Longitude, err2 = strconv.ParseFloat(datas[1], 64)
|
|
155
|
-
newGps.Altitude, err3 = strconv.ParseFloat(datas[2], 64)
|
|
156
|
-
newGps.Satellite, err4 = strconv.ParseUint(datas[3], 10, 64)
|
|
157
|
-
|
|
158
|
-
if err1 != nil || err2 != nil || err3 != nil || err4 != nil {
|
|
159
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to parse GPS data, %s; %s; %s; %s",
|
|
160
|
-
err1.Error(), err2.Error(), err3.Error(), err4.Error())
|
|
161
|
-
return nil
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
case "GpsTime":
|
|
165
|
-
newGps.Timestamp = kv[1]
|
|
166
|
-
|
|
167
|
-
case "GPS_Precision":
|
|
168
|
-
datas := strings.Split(kv[1], ",")
|
|
169
|
-
newGps.Hdop, err1 = strconv.ParseFloat(datas[0], 64)
|
|
170
|
-
newGps.Vdop, err2 = strconv.ParseFloat(datas[1], 64)
|
|
171
|
-
|
|
172
|
-
if err1 != nil || err2 != nil {
|
|
173
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to parse GPS_Precision data, %s; %s",
|
|
174
|
-
err1.Error(), err2.Error())
|
|
175
|
-
return nil
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return newGps
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
func readAndUpdateGpsInfo() {
|
|
183
|
-
for {
|
|
184
|
-
ccc := exec.Command("/bin/bash", "-c", "cat /home/pi/MaoTemp/monitorAPI.html")
|
|
185
|
-
gpsData, err := ccc.CombinedOutput()
|
|
186
|
-
if err == nil {
|
|
187
|
-
gpsLast = updateGpsInfo(string(gpsData))
|
|
188
|
-
} else {
|
|
189
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to get GPS API data, %s", err.Error())
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
time.Sleep(1 * time.Second)
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
func supportRttMeasure(rttStreamClient pb.MaoServerDiscovery_RttMeasureClient, silent bool) {
|
|
197
|
-
util.MaoLogM(util.INFO, c_MODULE_NAME, "Enable RTT measure feature.")
|
|
198
|
-
for {
|
|
199
|
-
// After sending echo response, we have some time (measure interval) to get latest hostname
|
|
200
|
-
hostname, err := util.GetHostname()
|
|
201
|
-
if err != nil {
|
|
202
|
-
hostname = "Mao-Unknown"
|
|
203
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to get hostname for RTT measure, %s", err.Error())
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
rttEchoRequest, err := rttStreamClient.Recv()
|
|
207
|
-
if err != nil {
|
|
208
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to receive RTT echo request, %s", err.Error())
|
|
209
|
-
return
|
|
210
|
-
}
|
|
211
|
-
err = rttStreamClient.Send(&pb.RttEchoResponse{Ack: rttEchoRequest.GetSeq(), Hostname: hostname})
|
|
212
|
-
if err != nil {
|
|
213
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to send RTT echo request, %s", err.Error())
|
|
214
|
-
return
|
|
215
|
-
}
|
|
216
|
-
if silent == false {
|
|
217
|
-
util.MaoLogM(util.INFO, c_MODULE_NAME, "RTT Measure: sent echo response with ack %d", rttEchoRequest.GetSeq())
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
func RunGeneralClient(report_server_addr *net.IP, report_server_port uint32, report_interval uint32, silent bool,
|
|
223
|
-
influxdbUrl string, influxdbOrgBucket string, influxdbToken string,
|
|
224
|
-
nat66Gateway bool, nat66Persistent bool,
|
|
225
|
-
gpsMonitor bool, gpsPersistent bool,
|
|
226
|
-
envTempMonitor bool, envTempPersistent bool,
|
|
227
|
-
minLogLevel util.MaoLogLevel) {
|
|
228
|
-
|
|
229
|
-
util.InitMaoLog(minLogLevel)
|
|
230
|
-
|
|
231
|
-
var influxdbClient influxdb2.Client
|
|
232
|
-
var influxdbWriteAPI influxdb2Api.WriteAPI
|
|
233
|
-
if nat66Persistent || gpsPersistent || envTempPersistent {
|
|
234
|
-
util.MaoLogM(util.INFO, c_MODULE_NAME, "Initiate influxdb client ...")
|
|
235
|
-
influxdbClient = influxdb2.NewClient(influxdbUrl, influxdbToken)
|
|
236
|
-
defer influxdbClient.Close()
|
|
237
|
-
influxdbWriteAPI = influxdbClient.WriteAPI(influxdbOrgBucket, influxdbOrgBucket)
|
|
238
|
-
}
|
|
239
|
-
if envTempMonitor {
|
|
240
|
-
go updateEnvironmentTemperature()
|
|
241
|
-
}
|
|
242
|
-
if gpsMonitor {
|
|
243
|
-
go readAndUpdateGpsInfo()
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
util.MaoLogM(util.INFO, c_MODULE_NAME, "Connect to center ...")
|
|
247
|
-
for {
|
|
248
|
-
serverAddr := util.GetAddrPort(report_server_addr, report_server_port)
|
|
249
|
-
util.MaoLogM(util.INFO, c_MODULE_NAME, "Connect to %s ...", serverAddr)
|
|
250
|
-
|
|
251
|
-
ctx, cancelCtx := context.WithTimeout(context.Background(), 3 * time.Second)
|
|
252
|
-
connect, err := grpc.DialContext(ctx, serverAddr, grpc.WithInsecure(), grpc.WithBlock())
|
|
253
|
-
if err != nil {
|
|
254
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Retry, %s ...", err.Error())
|
|
255
|
-
continue
|
|
256
|
-
}
|
|
257
|
-
cancelCtx()
|
|
258
|
-
util.MaoLogM(util.INFO, c_MODULE_NAME, "Connected.")
|
|
259
|
-
|
|
260
|
-
client := pb.NewMaoServerDiscoveryClient(connect)
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
clientCommonContext, cancelCommonContext := context.WithCancel(context.Background())
|
|
264
|
-
rttStreamClient, err := client.RttMeasure(clientCommonContext)
|
|
265
|
-
if err != nil {
|
|
266
|
-
util.MaoLogM(util.ERROR, c_MODULE_NAME, "Fail to get rttStreamClient, %s", err.Error())
|
|
267
|
-
cancelCommonContext()
|
|
268
|
-
continue
|
|
269
|
-
}
|
|
270
|
-
go supportRttMeasure(rttStreamClient, silent)
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
reportStreamClient, err := client.Report(clientCommonContext)
|
|
274
|
-
if err != nil {
|
|
275
|
-
util.MaoLogM(util.ERROR, c_MODULE_NAME, "Fail to get reportStreamClient, %s", err.Error())
|
|
276
|
-
cancelCommonContext()
|
|
277
|
-
continue
|
|
278
|
-
}
|
|
279
|
-
util.MaoLogM(util.INFO, c_MODULE_NAME, "Got reportStreamClient.")
|
|
280
|
-
|
|
281
|
-
count := 1
|
|
282
|
-
for {
|
|
283
|
-
dataOk := true
|
|
284
|
-
hostname, err := util.GetHostname()
|
|
285
|
-
if err != nil {
|
|
286
|
-
hostname = "Mao-Unknown"
|
|
287
|
-
dataOk = false
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
ips, err := util.GetUnicastIp()
|
|
291
|
-
if err != nil {
|
|
292
|
-
ips = []string{"Mao-Fail", err.Error()}
|
|
293
|
-
dataOk = false
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
util.MaoLogM(util.DEBUG, c_MODULE_NAME, "%d: To send", count)
|
|
297
|
-
report := &pb.ServerReport{
|
|
298
|
-
Ok: dataOk,
|
|
299
|
-
Hostname: hostname,
|
|
300
|
-
Ips: ips,
|
|
301
|
-
NowDatetime: time.Now().String(),
|
|
302
|
-
AuxData: "",
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
auxDataMap := make(map[string]interface{})
|
|
306
|
-
|
|
307
|
-
if nat66Gateway {
|
|
308
|
-
v6In, v6Out, err := getNat66GatewayData()
|
|
309
|
-
if err == nil {
|
|
310
|
-
auxDataMap["v6In"] = v6In
|
|
311
|
-
auxDataMap["v6Out"] = v6Out
|
|
312
|
-
if nat66Persistent {
|
|
313
|
-
nat66UploadInfluxdb(&influxdbWriteAPI, v6In, v6Out)
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
if envTempMonitor {
|
|
318
|
-
env := envTemp
|
|
319
|
-
auxDataMap["envTemp"] = env
|
|
320
|
-
auxDataMap["envGeo"] = "Beijing-HQ"
|
|
321
|
-
auxDataMap["envTime"] = time.Now().Format(time.RFC3339Nano) // RFC3339Nano, most precise format
|
|
322
|
-
if envTempPersistent {
|
|
323
|
-
envTempUploadInfluxdb(&influxdbWriteAPI, env)
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
if gpsMonitor {
|
|
327
|
-
gpsNow := gpsLast
|
|
328
|
-
if gpsNow != nil {
|
|
329
|
-
auxDataMap["GPS_Timestamp"] = gpsNow.Timestamp
|
|
330
|
-
auxDataMap["GPS_Latitude"] = gpsNow.Latitude
|
|
331
|
-
auxDataMap["GPS_Longitude"] = gpsNow.Longitude
|
|
332
|
-
auxDataMap["GPS_Altitude"] = gpsNow.Altitude
|
|
333
|
-
auxDataMap["GPS_Satellite"] = gpsNow.Satellite
|
|
334
|
-
auxDataMap["GPS_Hdop"] = gpsNow.Hdop
|
|
335
|
-
auxDataMap["GPS_Vdop"] = gpsNow.Vdop
|
|
336
|
-
|
|
337
|
-
if gpsPersistent {
|
|
338
|
-
gpsDataUploadInfluxdb(&influxdbWriteAPI, gpsNow)
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
auxDataByte, err := json.Marshal(auxDataMap)
|
|
344
|
-
if err != nil {
|
|
345
|
-
util.MaoLogM(util.WARN, c_MODULE_NAME, "Fail to marshal auxDataMap to json format, %s", err.Error())
|
|
346
|
-
} else {
|
|
347
|
-
report.AuxData = string(auxDataByte)
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
err = reportStreamClient.Send(report)
|
|
351
|
-
if err != nil {
|
|
352
|
-
util.MaoLogM(util.ERROR, c_MODULE_NAME, "Fail to report, %s", err.Error())
|
|
353
|
-
break
|
|
354
|
-
}
|
|
355
|
-
if silent == false {
|
|
356
|
-
util.MaoLogM(util.INFO, c_MODULE_NAME, "ServerReport - %v", report)
|
|
357
|
-
}
|
|
358
|
-
util.MaoLogM(util.DEBUG, c_MODULE_NAME, "%d: Sent", count)
|
|
359
|
-
|
|
360
|
-
count++
|
|
361
|
-
time.Sleep(time.Duration(report_interval) * time.Millisecond)
|
|
362
|
-
}
|
|
363
|
-
cancelCommonContext()
|
|
364
|
-
time.Sleep(1 * time.Second)
|
|
365
|
-
}
|
|
366
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
package AuxDataProcessor
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
MaoApi "MaoServerDiscovery/cmd/api"
|
|
5
|
-
"MaoServerDiscovery/cmd/lib/MaoCommon"
|
|
6
|
-
"MaoServerDiscovery/util"
|
|
7
|
-
"time"
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
const (
|
|
11
|
-
MODULE_NAME = "GRPC-Detect-module"
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
type AuxDataProcessorModule struct {
|
|
15
|
-
processors []*MaoApi.AuxDataProcessor
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
func (a *AuxDataProcessorModule) AddProcessor(p *MaoApi.AuxDataProcessor) {
|
|
19
|
-
a.processors = append(a.processors, p)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
func (a *AuxDataProcessorModule) controlLoop() {
|
|
23
|
-
for {
|
|
24
|
-
time.Sleep(1 * time.Second)
|
|
25
|
-
|
|
26
|
-
grpcKaModule := MaoCommon.ServiceRegistryGetGrpcKaModule()
|
|
27
|
-
if grpcKaModule == nil {
|
|
28
|
-
util.MaoLogM(util.WARN, MODULE_NAME, "Fail to get GrpcKaModule")
|
|
29
|
-
continue
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
serviceNodes := grpcKaModule.GetServiceInfo()
|
|
33
|
-
for _, service := range serviceNodes {
|
|
34
|
-
for _, processor := range a.processors {
|
|
35
|
-
go (*processor).Process(service.OtherData)
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
func (a *AuxDataProcessorModule) InitAuxDataProcessor() {
|
|
42
|
-
a.processors = make([]*MaoApi.AuxDataProcessor, 0)
|
|
43
|
-
go a.controlLoop()
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
package AuxDataProcessor
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"MaoServerDiscovery/cmd/lib/InfluxDB"
|
|
5
|
-
"MaoServerDiscovery/util"
|
|
6
|
-
"encoding/json"
|
|
7
|
-
"time"
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
const (
|
|
11
|
-
p_EnvTemp_MODULE_NAME = "Env-Temperature-module"
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
type EnvTempProcessor struct {
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
type EnvTempData struct {
|
|
19
|
-
EnvGeo string `json:"envGeo"`
|
|
20
|
-
EnvTime string `json:"envTime"`
|
|
21
|
-
EnvTemp float32 `json:"envTemp"`
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
func (e EnvTempProcessor) Process(auxData string) {
|
|
25
|
-
|
|
26
|
-
auxDataMap := EnvTempData{}
|
|
27
|
-
err := json.Unmarshal([]byte(auxData), &auxDataMap)
|
|
28
|
-
if err != nil {
|
|
29
|
-
util.MaoLogM(util.WARN, p_EnvTemp_MODULE_NAME, "Fail to json.Unmarshal aux data. %s", err.Error())
|
|
30
|
-
return
|
|
31
|
-
}
|
|
32
|
-
if auxDataMap.EnvTime == "" {
|
|
33
|
-
return // not contain Environment Temperature data
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
envTime, err := time.Parse(time.RFC3339Nano, auxDataMap.EnvTime)
|
|
37
|
-
if err != nil {
|
|
38
|
-
util.MaoLogM(util.WARN, p_EnvTemp_MODULE_NAME, "Fail to parse time string as RFC3339Nano format, %s, err: %s", auxDataMap.EnvTime, err.Error())
|
|
39
|
-
return
|
|
40
|
-
}
|
|
41
|
-
util.MaoLogM(util.DEBUG, p_EnvTemp_MODULE_NAME, "Get temp %f, %s", auxDataMap.EnvTemp, time.Now().String())
|
|
42
|
-
|
|
43
|
-
InfluxDB.EnvTempUploadInfluxdb(auxDataMap.EnvGeo, envTime, auxDataMap.EnvTemp)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
package AuxDataProcessor
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"encoding/json"
|
|
5
|
-
"log"
|
|
6
|
-
"testing"
|
|
7
|
-
"time"
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
func TestEnvTempProcessor_Process(t *testing.T) {
|
|
11
|
-
tt := time.Now()
|
|
12
|
-
s := tt.Format(time.RFC3339Nano)
|
|
13
|
-
ttt, err := time.Parse(time.RFC3339Nano, s)
|
|
14
|
-
log.Println(tt, ttt)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
mmm := make(map[string]interface{})
|
|
18
|
-
mmm["envTemp"] = 26.588
|
|
19
|
-
mmm["v6In"] = 0x12345678ABCDEF96
|
|
20
|
-
mmm["v6Out"] = "Bigmao Radar"
|
|
21
|
-
|
|
22
|
-
b, err := json.Marshal(mmm)
|
|
23
|
-
if err != nil {
|
|
24
|
-
log.Println(err.Error())
|
|
25
|
-
} else {
|
|
26
|
-
sss := string(b)
|
|
27
|
-
log.Println(sss)
|
|
28
|
-
log.Println(b)
|
|
29
|
-
}
|
|
30
|
-
}
|