From bc0b7e914a378b2c40f9d2ec2470b61a19c18288 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期五, 11 八月 2023 17:05:02 +0800 Subject: [PATCH] 修改上报的数据结构, 添加plc查询接口 --- msg/send.go | 3 config/config.go | 2 go.sum | 77 ++++++++++++ webserver/controller.go | 24 ++++ msg/msg.go | 2 collector/device.go | 30 +++++ webserver/router.go | 12 ++ go.mod | 25 ++++ main.go | 11 + util/jwt.go | 3 collector/collector.go | 117 +++++++++++-------- 11 files changed, 247 insertions(+), 59 deletions(-) diff --git a/collector/collector.go b/collector/collector.go index 12e8f2e..3fa392b 100644 --- a/collector/collector.go +++ b/collector/collector.go @@ -14,10 +14,12 @@ var tasksStore sync.Map type collectorProc struct { - device *msg.PLCDevice - cancel context.CancelFunc + device *msg.PLCDevice + cancel context.CancelFunc + plcConn *plc4go.PlcConnection } +// 鍒濆鍖栭噰闆嗕换鍔�, 璇锋眰璁惧鍒楄〃, 鎸夎澶囨坊鍔犻噰闆嗕换鍔� func InitTask() { logger.Debug("init task") devices, err := getDeviceList() @@ -53,78 +55,55 @@ tasksStore.Store(device.DeviceID, &proc) - go connectingDevice(ctx, device) + go connectingDevice(ctx, &proc) } -func connectingDevice(ctx context.Context, dev *msg.PLCDevice) { - plcResponse := msg.PLCResponse{ - DeviceID: dev.DeviceID, - DeviceName: dev.DeviceName, - DeviceIP: dev.DeviceIP, - Online: false, - } - +// 杩涘叆閲囬泦浠诲姟, 寮�濮嬪皾璇曡繛鎺ヨ澶�, 澶辫触鍚�30绉掗噸璇�, 鎴愬姛鍚庤繘鍏ュ惊鐜噰闆� +func connectingDevice(ctx context.Context, proc *collectorProc) { for { select { case <-ctx.Done(): - logger.Warn("plc device %s, ip: %s, end of connecting.", dev.DeviceName, dev.DeviceIP) + logger.Warn("plc device %s, ip: %s, end of connecting.", proc.device.DeviceName, proc.device.DeviceIP) return default: - plcConnection, err := NewModbusConnection(dev.DeviceIP) + plcConnection, err := NewModbusConnection(proc.device.DeviceIP) if err != nil { - logger.Warn("error connecting to PLC: %s, ip: %s", dev.DeviceName, dev.DeviceIP) - plcResponse.Online = false - msg.SendDeviceLiveData(&plcResponse) + logger.Warn("error connecting to PLC: %s, ip: %s", proc.device.DeviceName, proc.device.DeviceIP) + + // 涓婃姤璁惧绂荤嚎 + msg.SendDeviceLiveData(&msg.PLCResponse{ + DeviceID: proc.device.DeviceID, + DeviceName: proc.device.DeviceName, + DeviceIP: proc.device.DeviceIP, + Online: false, + }) + time.Sleep(30 * time.Second) } else { // 杩炴帴鎴愬姛鍚�, 寮�濮嬮噰闆嗘暟鎹�, 浼氬垽鏂繛鎺ユ槸鍚︽湁鏁�, 鏂紑鍚庝細閲囬泦浠诲姟浼氶��鍑�, 缁х画閲嶆柊灏濊瘯杩炴帴璁惧 - runCollectionTask(ctx, dev, plcConnection) + proc.plcConn = &plcConnection + runCollectionTask(ctx, proc) } } } } -func runCollectionTask(ctx context.Context, dev *msg.PLCDevice, conn plc4go.PlcConnection) { - // 鍒涘缓modbusTCP杩炴帴, 寰幆鏌ヨ鏁版嵁骞朵笂鎶� - plcResponse := msg.PLCResponse{ - DeviceID: dev.DeviceID, - DeviceName: dev.DeviceName, - DeviceIP: dev.DeviceIP, - Online: true, - } +func runCollectionTask(ctx context.Context, proc *collectorProc) { + dev := proc.device for { select { case <-ctx.Done(): logger.Warn("plc device %s, ip: %s, end of collection.", dev.DeviceName, dev.DeviceIP) - conn.Close() + (*proc.plcConn).Close() return default: - if !conn.IsConnected() { - logger.Warn("plc device %s, ip: %s, disconnected.", dev.DeviceName, dev.DeviceIP) - return - } + plcResponse := plc4xRequest(proc) - // 鏍规嵁璁剧疆鐨勫湴鍧�鏌ヨ鏁版嵁锛屼笂鎶� - plcResponse.Message = "" - for _, addr := range dev.Details { - result, err := ReadHoldingRegister(conn, addr.StartAddress, addr.Length) - if err != nil { - logger.Warn("plc device Read Holding Register error, %s", err.Error()) - plcResponse.Message = err.Error() - } else { - plcResponse.PLCData = append(plcResponse.PLCData, msg.PLCData{ - StartAddress: addr.StartAddress, - Length: addr.Length, - Type: addr.Type, - FieldName: addr.FieldName, - RawData: result, - }) - } - } + msg.SendDeviceLiveData(plcResponse) - msg.SendDeviceLiveData(&plcResponse) - if plcResponse.Message != "" { + // 鏃犳硶杩炴帴浜�, 閫�鍑洪噰闆�, 閲嶆柊杩炴帴 + if !plcResponse.Online { return } @@ -133,3 +112,43 @@ } } } + +func plc4xRequest(proc *collectorProc) *msg.PLCResponse { + conn := *proc.plcConn + dev := proc.device + + plcResponse := msg.PLCResponse{ + DeviceID: dev.DeviceID, + DeviceName: dev.DeviceName, + DeviceIP: dev.DeviceIP, + Online: true, + } + + if !conn.IsConnected() { + logger.Warn("plc device %s, ip: %s, disconnected.", dev.DeviceName, dev.DeviceIP) + plcResponse.Online = false + + return &plcResponse + } + + // 鏍规嵁璁剧疆鐨勫湴鍧�鏌ヨ鏁版嵁锛屼笂鎶� + for _, addr := range dev.Details { + result, err := ReadHoldingRegister(conn, addr.StartAddress, addr.Length) + readRequest := msg.PLCData{ + StartAddress: addr.StartAddress, + Length: addr.Length, + Type: addr.Type, + FieldName: addr.FieldName, + RawData: result, + } + + if err != nil { + logger.Warn("plc device Read Holding Register error, %s", err.Error()) + readRequest.Message = err.Error() + } + + plcResponse.PLCData = append(plcResponse.PLCData, readRequest) + } + + return &plcResponse +} diff --git a/collector/device.go b/collector/device.go index a9fc19e..9de3d33 100644 --- a/collector/device.go +++ b/collector/device.go @@ -51,3 +51,33 @@ return nil } + +func HandleDeviceReadRequest(device *msg.PLCDevice) *msg.PLCResponse { + procCache, ok := tasksStore.Load(device.DeviceID) + if ok { + if procCache.(*collectorProc).device.DeviceIP == device.DeviceIP { + return plc4xRequest(procCache.(*collectorProc)) + } + } + + plcConnection, err := NewModbusConnection(device.DeviceIP) + if err != nil { + logger.Warn("error connecting to PLC: %s, ip: %s", device.DeviceName, device.DeviceIP) + + // 涓婃姤璁惧绂荤嚎 + return &msg.PLCResponse{ + DeviceID: device.DeviceID, + DeviceName: device.DeviceName, + DeviceIP: device.DeviceIP, + Online: false, + } + } + + proc := collectorProc{ + device: device, + cancel: nil, + plcConn: &plcConnection, + } + + return plc4xRequest(&proc) +} diff --git a/config/config.go b/config/config.go index 9200865..143c96a 100644 --- a/config/config.go +++ b/config/config.go @@ -9,6 +9,7 @@ ) type Config struct { + ServePort string `json:"serve_port"` // 涓昏处鍙穒d, 鐢ㄤ簬璇锋眰web鎺ュ彛 ParentId string `json:"parent_id"` // 涓昏处鍙穒d, 鐢ㄤ簬璇锋眰web鎺ュ彛 JWTKey string `json:"jwt_key"` // 鐢熸垚jwt鐨刱ey NsqServer string `json:"nsq_server"` // nsq TCP鏈嶅姟绔湴鍧� @@ -24,6 +25,7 @@ var Options Config func DefaultConfig() { + Options.ServePort = "16860" Options.ParentId = "guangsheng" Options.JWTKey = "abcdefghijklmn" Options.NsqServer = "fai365.com:4150" diff --git a/go.mod b/go.mod index 242207f..23eb7ce 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ require ( github.com/apache/plc4x/plc4go v0.0.0-20230731062314-d0b9a9d01b04 github.com/fatedier/beego v1.7.2 + github.com/gin-gonic/gin v1.9.1 github.com/golang-jwt/jwt/v4 v4.5.0 github.com/nsqio/go-nsq v1.1.0 github.com/rs/zerolog v1.30.0 @@ -12,15 +13,37 @@ require ( github.com/IBM/netaddr v1.5.0 // indirect + github.com/bytedance/sonic v1.9.1 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect github.com/golang/snappy v0.0.1 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gopacket/gopacket v1.1.1 // indirect github.com/icza/bitio v1.1.0 // indirect github.com/jacobsa/go-serial v0.0.0-20180131005756-15cf729a72d4 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/leodido/go-urn v1.2.4 // indirect github.com/libp2p/go-reuseport v0.3.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect + golang.org/x/arch v0.3.0 // indirect + golang.org/x/crypto v0.11.0 // indirect golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb // indirect + golang.org/x/net v0.12.0 // indirect golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index c5a5e14..cb21de8 100644 --- a/go.sum +++ b/go.sum @@ -4,16 +4,42 @@ github.com/antchfx/xpath v0.0.0-20170515025933-1f3266e77307 h1:C735MoY/X+UOx6SECmHk5pVOj51h839Ph13pEoY8UmU= github.com/apache/plc4x/plc4go v0.0.0-20230731062314-d0b9a9d01b04 h1:0HYYkjoJotw8vjGCwFK7Y0CEpCbP3jSvOuDsmgjqHTs= github.com/apache/plc4x/plc4go v0.0.0-20230731062314-d0b9a9d01b04/go.mod h1:xz9DW4Goo2domdcwckV8/yViuANq12sV/3VDC2wJZls= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fatedier/beego v1.7.2 h1:kVw3oKiXccInqG+Z/7l8zyRQXrsCQEfcUxgzfGK+R8g= github.com/fatedier/beego v1.7.2/go.mod h1:wx3gB6dbIfBRcucp94PI9Bt3I0F2c/MyNEWuhzpWiwk= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopacket/gopacket v1.1.1 h1:zbx9F9d6A7sWNkFKrvMBZTfGgxFoY4NgUudFVVHMfcw= @@ -24,6 +50,13 @@ github.com/icza/mighty v0.0.0-20180919140131-cfd07d671de6/go.mod h1:xQig96I1VNBDIWGCdTt54nHt6EeI639SmHycLYL7FkA= github.com/jacobsa/go-serial v0.0.0-20180131005756-15cf729a72d4 h1:G2ztCwXov8mRvP0ZfjE6nAlaCX2XbykaeHdbT6KwDz0= github.com/jacobsa/go-serial v0.0.0-20180131005756-15cf729a72d4/go.mod h1:2RvX5ZjVtsznNZPEt4xwJXNJrM3VTZoQf7V6gk0ysvs= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/libp2p/go-reuseport v0.3.0 h1:iiZslO5byUYZEg9iCwJGf5h+sf1Agmqx2V2FDjPyvUw= github.com/libp2p/go-reuseport v0.3.0/go.mod h1:laea40AimhtfEqysZ71UpYj4S+R9VpH8PgqLo7L+SwI= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= @@ -31,10 +64,17 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/nsqio/go-nsq v1.1.0 h1:PQg+xxiUjA7V+TLdXw7nVrJ5Jbl3sN86EhGCQj4+FYE= github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -42,16 +82,49 @@ github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/subchen/go-xmldom v1.1.2 h1:7evI2YqfYYOnuj+PBwyaOZZYjl3iWq35P6KfBUw9jeU= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb h1:PaBZQdo+iSDyHT053FjUCgZQ/9uqVwPOcl7KSWhKn6w= golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/main.go b/main.go index a828d4b..c479135 100644 --- a/main.go +++ b/main.go @@ -1,13 +1,15 @@ package main import ( - "plc-recorder/msg" + "os" "runtime" "plc-recorder/collector" "plc-recorder/config" "plc-recorder/logger" + "plc-recorder/msg" "plc-recorder/nsqclient" + "plc-recorder/webserver" "github.com/rs/zerolog" ) @@ -35,10 +37,13 @@ // 璁㈤槄璁惧鍙樻洿 go nsqclient.InitNsqConsumer(config.Options.SubDeviceTopic, "plc-recorder", collector.HandleDeviceUpdate) + // 鍚姩閲囬泦浠诲姟 collector.InitTask() // 娴嬭瘯鏁版嵁 - go msg.TestSendDeviceLiveData() + if len(os.Args) > 1 && os.Args[1] == "-d" { + go msg.TestSendDeviceLiveData() + } - select {} + webserver.Serve(config.Options.ServePort) } diff --git a/msg/msg.go b/msg/msg.go index 09d2504..e4000ff 100644 --- a/msg/msg.go +++ b/msg/msg.go @@ -24,7 +24,6 @@ DeviceName string `json:"deviceName"` DeviceIP string `json:"deviceIp"` Online bool `json:"online"` - Message string `json:"message"` PLCData []PLCData `json:"plcData"` } @@ -34,6 +33,7 @@ Type string `json:"type"` // 鏁版嵁绫诲瀷 FieldName string `json:"fieldName"` // 瀵瑰簲绯荤粺瀛楁 RawData []byte `json:"rawData"` // 浠巔lc璇诲彇鐨勫師濮嬫暟鎹� + Message string `json:"message"` } type ApsDeviceApiResponse struct { diff --git a/msg/send.go b/msg/send.go index ba068d5..8290dda 100644 --- a/msg/send.go +++ b/msg/send.go @@ -2,12 +2,12 @@ import ( "encoding/json" - "plc-recorder/util" "time" "plc-recorder/config" "plc-recorder/logger" "plc-recorder/nsqclient" + "plc-recorder/util" ) func SendDeviceLiveData(response *PLCResponse) { @@ -37,7 +37,6 @@ DeviceName: "test", DeviceIP: "0.0.0.0", Online: true, - Message: "", PLCData: []PLCData{{ StartAddress: 100, Length: 1, diff --git a/util/jwt.go b/util/jwt.go index 431dac4..72bf305 100644 --- a/util/jwt.go +++ b/util/jwt.go @@ -1,9 +1,10 @@ package util import ( - "plc-recorder/config" "time" + "plc-recorder/config" + "github.com/golang-jwt/jwt/v4" ) diff --git a/webserver/controller.go b/webserver/controller.go new file mode 100644 index 0000000..530fd26 --- /dev/null +++ b/webserver/controller.go @@ -0,0 +1,24 @@ +package webserver + +import ( + "plc-recorder/collector" + "plc-recorder/msg" + + "github.com/gin-gonic/gin" +) + +func plcReadRequest(c *gin.Context) { + var req msg.PLCDevice + if err := c.ShouldBind(&req); err != nil { + c.JSON(401, gin.H{"msg": err.Error()}) + return + } + + rsp := collector.HandleDeviceReadRequest(&req) + + c.JSON(200, gin.H{ + "success": true, + "message": "", + "data": rsp, + }) +} diff --git a/webserver/router.go b/webserver/router.go new file mode 100644 index 0000000..6f99da5 --- /dev/null +++ b/webserver/router.go @@ -0,0 +1,12 @@ +package webserver + +import ( + "github.com/gin-gonic/gin" +) + +func Serve(port string) { + r := gin.Default() + r.POST("/device/liveData", plcReadRequest) + + r.Run(":" + port) +} -- Gitblit v1.8.0