fix: Oktopus web UI crashes when run multiple MTPs
This commit is contained in:
parent
b810e4ca45
commit
803d2a76bf
|
|
@ -39,36 +39,66 @@ func getMtp(mtp string) db.MTP {
|
|||
}
|
||||
|
||||
func parseDeviceInfoMsg(sn, subject string, data []byte, mtp db.MTP) db.Device {
|
||||
var record usp_record.Record
|
||||
var message usp_msg.Msg
|
||||
var record usp_record.Record
|
||||
var message usp_msg.Msg
|
||||
|
||||
err := proto.Unmarshal(data, &record)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
err = proto.Unmarshal(record.GetNoSessionContext().Payload, &message)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
err := proto.Unmarshal(data, &record)
|
||||
if err != nil {
|
||||
log.Println("Error unmarshaling USP Record:", err)
|
||||
return db.Device{}
|
||||
}
|
||||
|
||||
var device db.Device
|
||||
msg := message.Body.MsgBody.(*usp_msg.Body_Response).Response.GetGetResp()
|
||||
err = proto.Unmarshal(record.GetNoSessionContext().Payload, &message)
|
||||
if err != nil {
|
||||
log.Println("Error unmarshaling USP Message:", err)
|
||||
return db.Device{}
|
||||
}
|
||||
|
||||
device.Vendor = msg.ReqPathResults[0].ResolvedPathResults[0].ResultParams["Manufacturer"]
|
||||
device.Model = msg.ReqPathResults[1].ResolvedPathResults[0].ResultParams["ModelName"]
|
||||
device.Version = msg.ReqPathResults[2].ResolvedPathResults[0].ResultParams["SoftwareVersion"]
|
||||
device.ProductClass = msg.ReqPathResults[4].ResolvedPathResults[0].ResultParams["ProductClass"]
|
||||
device.SN = sn
|
||||
switch db.MTP(mtp) {
|
||||
case db.MQTT:
|
||||
device.Mqtt = db.Online
|
||||
case db.WEBSOCKETS:
|
||||
device.Websockets = db.Online
|
||||
case db.STOMP:
|
||||
device.Stomp = db.Online
|
||||
}
|
||||
var device db.Device
|
||||
|
||||
device.Status = db.Online
|
||||
respBody, isResponse := message.Body.MsgBody.(*usp_msg.Body_Response)
|
||||
|
||||
return device
|
||||
if !isResponse {
|
||||
log.Printf("Ignored message for DeviceInfo: Expected Body_Response but got %T", message.Body.MsgBody)
|
||||
return device
|
||||
}
|
||||
|
||||
msg := respBody.Response.GetGetResp()
|
||||
if msg == nil {
|
||||
log.Println("Ignored message: Response does not contain GetResp")
|
||||
return device
|
||||
}
|
||||
|
||||
if len(msg.ReqPathResults) < 5 {
|
||||
log.Printf("Error: Expected 5 params in GetResp, got %d", len(msg.ReqPathResults))
|
||||
return device
|
||||
}
|
||||
|
||||
if len(msg.ReqPathResults[0].ResolvedPathResults) > 0 {
|
||||
device.Vendor = msg.ReqPathResults[0].ResolvedPathResults[0].ResultParams["Manufacturer"]
|
||||
}
|
||||
if len(msg.ReqPathResults[1].ResolvedPathResults) > 0 {
|
||||
device.Model = msg.ReqPathResults[1].ResolvedPathResults[0].ResultParams["ModelName"]
|
||||
}
|
||||
if len(msg.ReqPathResults[2].ResolvedPathResults) > 0 {
|
||||
device.Version = msg.ReqPathResults[2].ResolvedPathResults[0].ResultParams["SoftwareVersion"]
|
||||
}
|
||||
if len(msg.ReqPathResults[4].ResolvedPathResults) > 0 {
|
||||
device.ProductClass = msg.ReqPathResults[4].ResolvedPathResults[0].ResultParams["ProductClass"]
|
||||
}
|
||||
|
||||
device.SN = sn
|
||||
|
||||
switch db.MTP(mtp) {
|
||||
case db.MQTT:
|
||||
device.Mqtt = db.Online
|
||||
case db.WEBSOCKETS:
|
||||
device.Websockets = db.Online
|
||||
case db.STOMP:
|
||||
device.Stomp = db.Online
|
||||
}
|
||||
|
||||
device.Status = db.Online
|
||||
|
||||
return device
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user