Merge pull request #387 from vkahhh/main

fix: Oktopus web UI crashes when run multiple MTPs
This commit is contained in:
Leandro Machado 2025-12-12 06:17:43 -03:00 committed by GitHub
commit e8568ff094
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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
}