mao-service-discovery 1.6.0-commit-2023-07-24-04-37-15.0 → 1.6.0-commit-2023-07-24-06-22-14.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.
Files changed (82) hide show
  1. package/MaoServerDiscovery +0 -0
  2. package/package.json +1 -1
  3. package/.github/dependabot.yml +0 -11
  4. package/.github/workflows/codeql-analysis.yml +0 -75
  5. package/.github/workflows/docker-image.yml +0 -24
  6. package/.github/workflows/docker-publish.yml +0 -94
  7. package/.github/workflows/go.yml +0 -29
  8. package/.github/workflows/go_static.yml +0 -29
  9. package/.github/workflows/npm-publish-release.yml +0 -36
  10. package/.github/workflows/npm-publish.yml +0 -32
  11. package/Dockerfile +0 -19
  12. package/LICENSE +0 -201
  13. package/MODULES.md +0 -39
  14. package/README.md +0 -54
  15. package/bak/index.html +0 -42
  16. package/bak/receiveProcessIcmpLoopV4V6.bak +0 -73
  17. package/bak/test/test-icmp-ka-module.go +0 -297
  18. package/bak/test/test-tech.go +0 -110
  19. package/bak/using_etcd/main.go +0 -165
  20. package/cmd/api/aux-data-module.go +0 -14
  21. package/cmd/api/config-module.go +0 -11
  22. package/cmd/api/email-module.go +0 -14
  23. package/cmd/api/gateway-module.go +0 -23
  24. package/cmd/api/grpc-ka-module.go +0 -29
  25. package/cmd/api/icmp-ka-module.go +0 -26
  26. package/cmd/api/restful-server-module.go +0 -13
  27. package/cmd/api/topo-module.go +0 -31
  28. package/cmd/api/wechat-module.go +0 -18
  29. package/cmd/general_client.go +0 -366
  30. package/cmd/lib/AuxDataProcessor/aux-data-processor-module.go +0 -64
  31. package/cmd/lib/AuxDataProcessor/env-temp-processor.go +0 -63
  32. package/cmd/lib/AuxDataProcessor/env-temp-processor_test.go +0 -30
  33. package/cmd/lib/Config/config-yaml-module.go +0 -303
  34. package/cmd/lib/Config/config-yaml-module_test.go +0 -308
  35. package/cmd/lib/Email/login-auth.go +0 -35
  36. package/cmd/lib/Email/login-auth_test.go +0 -13
  37. package/cmd/lib/Email/smtp-email-module.go +0 -229
  38. package/cmd/lib/Email/smtp-email-module_test.go +0 -12
  39. package/cmd/lib/GrpcKa/grpc-detect-module.go +0 -269
  40. package/cmd/lib/GrpcKa/grpc-detect-module_test.go +0 -26
  41. package/cmd/lib/IcmpKa/icmp-detect-module.go +0 -545
  42. package/cmd/lib/IcmpKa/icmp-detect-module_test.go +0 -23
  43. package/cmd/lib/InfluxDB/influxdb-util.go +0 -72
  44. package/cmd/lib/MaoCommon/gps.go +0 -15
  45. package/cmd/lib/MaoCommon/service-registry-util.go +0 -59
  46. package/cmd/lib/MaoCommon/service-registry.go +0 -14
  47. package/cmd/lib/MaoCommon/service-registry_test.go +0 -30
  48. package/cmd/lib/MaoEnhancedGolang/smtp.go +0 -438
  49. package/cmd/lib/Restful/restful-server-impl.go +0 -87
  50. package/cmd/lib/Soap/soap-tplink-util.go +0 -186
  51. package/cmd/lib/Soap/soap-tplink-util_test.go +0 -45
  52. package/cmd/lib/Soap/tplink-gateway-module.go +0 -200
  53. package/cmd/server.go +0 -327
  54. package/go.mod +0 -38
  55. package/go.sum +0 -222
  56. package/grpc.maojianwei.com/server/discovery/api/generate_api_from_protobuf.sh +0 -1
  57. package/grpc.maojianwei.com/server/discovery/api/mao-server-discovery.pb.go +0 -403
  58. package/grpc.maojianwei.com/server/discovery/api/mao-server-discovery.proto +0 -35
  59. package/grpc.maojianwei.com/server/discovery/api/mao-server-discovery_grpc.pb.go +0 -207
  60. package/incubator/OnosTopoShow/onos-topo-module.go +0 -347
  61. package/incubator/Wechat/wechat-message-module.go +0 -267
  62. package/incubator/Wechat/wechat-message-module_test.go +0 -108
  63. package/main.go +0 -383
  64. package/notebook/notebook.txt +0 -8
  65. package/resource/index-email.html +0 -67
  66. package/resource/index-icmp.html +0 -41
  67. package/resource/index-onos.html +0 -38
  68. package/resource/index-server.html +0 -57
  69. package/resource/index-wechat.html +0 -64
  70. package/resource/jquery-3.6.0.min.js +0 -2
  71. package/screenshot/2-cli-output.png +0 -0
  72. package/screenshot/2-cli-parameters.png +0 -0
  73. package/screenshot/2-json-format.png +0 -0
  74. package/screenshot/2-readable-format.png +0 -0
  75. package/screenshot/client-server-mode-1.png +0 -0
  76. package/screenshot/client-server-mode-2.png +0 -0
  77. package/screenshot/client-server-mode-production.png +0 -0
  78. package/screenshot/show_using_etcd.png +0 -0
  79. package/statically_linked_compilation.sh +0 -2
  80. package/util/mao_log.go +0 -42
  81. package/util/mao_log_test.go +0 -73
  82. package/util/mao_util.go +0 -53
@@ -1,11 +0,0 @@
1
- package MaoApi
2
-
3
- var (
4
- ConfigModuleRegisterName = "api-config-module"
5
- )
6
-
7
- type ConfigModule interface {
8
- GetConfig(path string) (object interface{}, errCode int)
9
- PutConfig(path string, data interface{}) (success bool, errCode int)
10
- }
11
-
@@ -1,14 +0,0 @@
1
- package MaoApi
2
-
3
- var (
4
- EmailModuleRegisterName = "email-module"
5
- )
6
-
7
- type EmailMessage struct {
8
- Subject string
9
- Content string
10
- }
11
-
12
- type EmailModule interface {
13
- SendEmail(message *EmailMessage)
14
- }
@@ -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
- }
@@ -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
- }
@@ -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
- }
@@ -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
- }