More mesh log cleanup

This commit is contained in:
Garth Vander Houwen 2022-12-30 20:04:43 -08:00
parent 99ac6ed6cf
commit 804345d1f1
3 changed files with 32 additions and 65 deletions

View file

@ -695,11 +695,9 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
success = true
} catch {
context!.rollback()
let nsError = error as NSError
MeshLogger.log("💥 Unresolved Core Data error in Send Message Function your database is corrupted running a node db reset should clean up the data. Error: \(nsError)")
print("💥 Unresolved Core Data error in Send Message Function your database is corrupted running a node db reset should clean up the data. Error: \(nsError)")
}
}
}
@ -866,7 +864,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
} catch {
context!.rollback()
let nsError = error as NSError
MeshLogger.log("💥 Error Inserting New Core Data MessageEntity: \(nsError)")
print("💥 Error Inserting New Core Data MessageEntity: \(nsError)")
}
}
return false
@ -1043,7 +1041,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
let binaryData: Data = try! toRadio.serializedData()
if connectedPeripheral!.peripheral.state == CBPeripheralState.connected {
self.connectedPeripheral.peripheral.writeValue(binaryData, for: self.TORADIO_characteristic, type: .withResponse)
MeshLogger.log(" Sent a Channel for: \(String(self.connectedPeripheral.num)) Channel Index \(chan.index)")
MeshLogger.log("🎛 Sent a Channel for: \(String(self.connectedPeripheral.num)) Channel Index \(chan.index)")
}
}
// Save the LoRa Config and the device will reboot
@ -1066,7 +1064,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
let binaryData: Data = try! toRadio.serializedData()
if connectedPeripheral!.peripheral.state == CBPeripheralState.connected {
self.connectedPeripheral.peripheral.writeValue(binaryData, for: self.TORADIO_characteristic, type: .withResponse)
MeshLogger.log("✈️ Sent a LoRaConfig for: \(String(self.connectedPeripheral.num))")
MeshLogger.log("📻 Sent a LoRaConfig for: \(String(self.connectedPeripheral.num))")
}
return true
@ -1370,7 +1368,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
let binaryData: Data = try! toRadio.serializedData()
if connectedPeripheral!.peripheral.state == CBPeripheralState.connected {
MeshLogger.log("✈️ Sent a Canned Messages Module Get Messages Request Admin Message for node: \(String(destNum))")
MeshLogger.log("🥫 Requested Canned Messages Module Messages for node: \(String(destNum))")
connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse)
return true
}
@ -1534,7 +1532,7 @@ class BLEManager: NSObject, CBPeripheralDelegate, ObservableObject {
} catch {
context!.rollback()
let nsError = error as NSError
MeshLogger.log("💥 Error inserting new core data MessageEntity: \(nsError)")
print("💥 Error inserting new core data MessageEntity: \(nsError)")
}
}
return false

View file

@ -373,19 +373,17 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
do {
try context.save()
print("💾 Updated Canned Message Module Config for node number: \(String(nodeNum))")
} catch {
context.rollback()
let nsError = error as NSError
MeshLogger.log("💥 Error Updating Core Data CannedMessageConfigEntity: \(nsError)")
print("💥 Error Updating Core Data CannedMessageConfigEntity: \(nsError)")
}
} else {
MeshLogger.log("💥 No Nodes found in local database matching node number \(nodeNum) unable to save Canned Message Module Config")
print("💥 No Nodes found in local database matching node number \(nodeNum) unable to save Canned Message Module Config")
}
} catch {
let nsError = error as NSError
MeshLogger.log("💥 Fetching node for core data CannedMessageConfigEntity failed: \(nsError)")
print("💥 Fetching node for core data CannedMessageConfigEntity failed: \(nsError)")
}
}
@ -440,19 +438,15 @@ func moduleConfig (config: ModuleConfig, context:NSManagedObjectContext, nodeNum
do {
try context.save()
print("💾 Updated External Notification Module Config for node number: \(String(nodeNum))")
} catch {
context.rollback()
let nsError = error as NSError
MeshLogger.log("💥 Error Updating Core Data ExternalNotificationConfigEntity: \(nsError)")
print("💥 Error Updating Core Data ExternalNotificationConfigEntity: \(nsError)")
}
} else {
MeshLogger.log("💥 No Nodes found in local database matching node number \(nodeNum) unable to save External Notifiation Module Config")
print("💥 No Nodes found in local database matching node number \(nodeNum) unable to save External Notifiation Module Config")
}
} catch {
let nsError = error as NSError
print("💥 Fetching node for core data ExternalNotificationConfigEntity failed: \(nsError)")
}
@ -770,6 +764,12 @@ func channelPacket (channel: Channel, fromNum: Int64, context: NSManagedObjectCo
func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObjectContext) -> NodeInfoEntity? {
if nodeInfo.hasUser {
MeshLogger.log("📟 Node info received for: \(nodeInfo.user.longName)")
} else {
MeshLogger.log("📟 Node info received for: \(nodeInfo.num)")
}
let fetchNodeInfoRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
fetchNodeInfoRequest.predicate = NSPredicate(format: "num == %lld", Int64(nodeInfo.num))
@ -835,11 +835,6 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
}
do {
try context.save()
if nodeInfo.hasUser {
MeshLogger.log("📟 Node info received for: \(nodeInfo.user.longName)")
} else {
MeshLogger.log("📟 Node info received for: \(nodeInfo.num)")
}
return newNode
} catch {
context.rollback()
@ -871,12 +866,10 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
if nodeInfo.hasDeviceMetrics {
let newTelemetry = TelemetryEntity(context: context)
newTelemetry.batteryLevel = Int32(nodeInfo.deviceMetrics.batteryLevel)
newTelemetry.voltage = nodeInfo.deviceMetrics.voltage
newTelemetry.channelUtilization = nodeInfo.deviceMetrics.channelUtilization
newTelemetry.airUtilTx = nodeInfo.deviceMetrics.airUtilTx
let mutableTelemetries = fetchedNode[0].telemetries!.mutableCopy() as! NSMutableOrderedSet
fetchedNode[0].telemetries = mutableTelemetries.copy() as? NSOrderedSet
}
@ -926,9 +919,10 @@ func nodeInfoPacket (nodeInfo: NodeInfo, channel: UInt32, context: NSManagedObje
return nil
}
func nodeInfoAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
MeshLogger.log("📟 Node info received for: \(packet.from)")
let fetchNodeInfoAppRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
fetchNodeInfoAppRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from))
@ -944,22 +938,17 @@ func nodeInfoAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
fetchedNode[0].channel = Int32(packet.channel)
if let nodeInfoMessage = try? NodeInfo(serializedData: packet.decoded.payload) {
if nodeInfoMessage.hasDeviceMetrics {
let telemetry = TelemetryEntity(context: context)
telemetry.batteryLevel = Int32(nodeInfoMessage.deviceMetrics.batteryLevel)
telemetry.voltage = nodeInfoMessage.deviceMetrics.voltage
telemetry.channelUtilization = nodeInfoMessage.deviceMetrics.channelUtilization
telemetry.airUtilTx = nodeInfoMessage.deviceMetrics.airUtilTx
var newTelemetries = [TelemetryEntity]()
newTelemetries.append(telemetry)
fetchedNode[0].telemetries? = NSOrderedSet(array: newTelemetries)
}
if nodeInfoMessage.hasUser {
fetchedNode[0].user!.userId = nodeInfoMessage.user.id
fetchedNode[0].user!.num = Int64(nodeInfoMessage.num)
fetchedNode[0].user!.longName = nodeInfoMessage.user.longName
@ -968,36 +957,33 @@ func nodeInfoAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
fetchedNode[0].user!.hwModel = String(describing: nodeInfoMessage.user.hwModel).uppercased()
}
}
do {
try context.save()
MeshLogger.log("💾 Updated NodeInfo from Node Info App Packet For: \(fetchedNode[0].num)")
print("💾 Updated NodeInfo from Node Info App Packet For: \(fetchedNode[0].num)")
} catch {
context.rollback()
let nsError = error as NSError
MeshLogger.log("💥 Error Saving NodeInfoEntity from NODEINFO_APP \(nsError)")
print("💥 Error Saving NodeInfoEntity from NODEINFO_APP \(nsError)")
}
} else {
// New node info not from device but potentially from another network
}
} catch {
MeshLogger.log("💥 Error Fetching NodeInfoEntity for NODEINFO_APP")
print("💥 Error Fetching NodeInfoEntity for NODEINFO_APP")
}
}
func adminAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
if let cmmc = try? CannedMessageModuleConfig(serializedData: packet.decoded.payload) {
MeshLogger.log("🥫 Canned Messages Messages Received For: \(packet.from)")
let fetchNodeRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest.init(entityName: "NodeInfoEntity")
fetchNodeRequest.predicate = NSPredicate(format: "num == %lld", Int64(packet.from))
do {
let fetchedNode = try context.fetch(fetchNodeRequest) as! [NodeInfoEntity]
if fetchedNode.count == 1 {
let messages = String(cmmc.textFormatString())
.replacingOccurrences(of: "11: ", with: "")
.replacingOccurrences(of: "\"", with: "")
@ -1005,16 +991,13 @@ func adminAppPacket (packet: MeshPacket, context: NSManagedObjectContext) {
fetchedNode[0].cannedMessageConfig?.messages = messages
do {
try context.save()
MeshLogger.log("💾 Updated Canned Messages Messages For: \(fetchedNode[0].num)")
print("💾 Updated Canned Messages Messages For: \(fetchedNode[0].num)")
} catch {
context.rollback()
let nsError = error as NSError
print("💥 Error Saving NodeInfoEntity from POSITION_APP \(nsError)")
}
}
} catch {
print("💥 Error Deserializing POSITION_APP packet.")
}
@ -1210,21 +1193,18 @@ func telemetryPacket(packet: MeshPacket, connectedNode: Int64, context: NSManage
fetchedNode[0].lastHeard = telemetry.time
fetchedNode[0].telemetries = mutableTelemetries.copy() as? NSOrderedSet
}
try context.save()
// Only log telemetery from the mesh not the connected device
if connectedNode != Int64(packet.from) {
MeshLogger.log("💾 Telemetry Saved for Node: \(packet.from)")
}
} catch {
context.rollback()
let nsError = error as NSError
MeshLogger.log("💥 Error Saving Telemetry for Node \(packet.from) Error: \(nsError)")
print("💥 Error Saving Telemetry for Node \(packet.from) Error: \(nsError)")
}
} else {
MeshLogger.log("💥 Error Fetching NodeInfoEntity for Node \(packet.from)")
print("💥 Error Fetching NodeInfoEntity for Node \(packet.from)")
}
}
@ -1320,10 +1300,10 @@ func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, context: NSM
} catch {
context.rollback()
let nsError = error as NSError
MeshLogger.log("💥 Failed to save new MessageEntity \(nsError)")
print("💥 Failed to save new MessageEntity \(nsError)")
}
} catch {
MeshLogger.log("💥 Fetch Message To and From Users Error")
print("💥 Fetch Message To and From Users Error")
}
}
}

View file

@ -46,7 +46,6 @@ struct MeshLog: View {
contentType: UTType.plainText,
defaultFilename: "mesh-activity-log",
onCompletion: { result in
if case .success = result {
print("Mesh activity log download: success.")
} else {
@ -55,13 +54,11 @@ struct MeshLog: View {
}
)
.textSelection(.enabled)
.font(.caption2)
.font(.caption)
HStack(alignment: .center) {
Spacer()
Button(role: .destructive) {
let text = ""
do {
try text.write(to: logFile!, atomically: false, encoding: .utf8)
@ -69,35 +66,27 @@ struct MeshLog: View {
} catch {
print(error)
}
} label: {
Label("Clear Log", systemImage: "trash.fill")
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
Spacer()
Button {
isExporting = true
} label: {
Label("Save Log", systemImage: "square.and.arrow.down")
}
.buttonStyle(.bordered)
.buttonBorderShape(.capsule)
.controlSize(.large)
.padding()
Spacer()
}
.padding(.bottom, 10)
.navigationTitle("Mesh Activity Log")
.navigationTitle("mesh.log")
}
}