feat(wasm): update statistics tracking by adding announce metrics and updating packet handling
Some checks failed
Go Build Test / Build (freebsd, amd64) (pull_request) Successful in 9m24s
Bearer / scan (pull_request) Successful in 48s
Go Benchmarks / Run Benchmarks (pull_request) Successful in 1m10s
Go Build Test / Build (darwin, amd64) (pull_request) Successful in 38s
Go Build Test / Build (linux, amd64) (pull_request) Successful in 39s
Go Build Test / Build (windows, amd64) (pull_request) Successful in 38s
Go Build Test / Build (freebsd, arm) (pull_request) Successful in 41s
Go Build Test / Build (windows, arm) (pull_request) Successful in 38s
Go Build Test / Build (linux, arm) (pull_request) Successful in 40s
Go Build Test / Build (darwin, arm64) (pull_request) Successful in 33s
Go Build Test / Build (freebsd, arm64) (pull_request) Successful in 29s
Go Build Test / Build (linux, arm64) (pull_request) Successful in 45s
Go Build Test / Build (js, wasm) (pull_request) Failing after 41s
Go Build Test / Build (windows, arm64) (pull_request) Successful in 44s
Go Test Multi-Platform / Test (ubuntu-latest, arm64) (pull_request) Successful in 1m9s
Go Revive Lint / lint (pull_request) Successful in 1m5s
Run Gosec / tests (pull_request) Successful in 1m14s
Go Test Multi-Platform / Test (ubuntu-latest, amd64) (pull_request) Failing after 2m36s

This commit is contained in:
2026-01-02 17:49:13 -06:00
parent 0ba311b25d
commit 41bcb65e16

View File

@@ -24,10 +24,12 @@ var (
reticulumDest *destination.Destination
reticulumIdentity *identity.Identity
stats = struct {
packetsSent int
packetsReceived int
bytesSent int
bytesReceived int
packetsSent int
packetsReceived int
bytesSent int
bytesReceived int
announcesSent int
announcesReceived int
}{}
packetCallback js.Value
announceHandler js.Value
@@ -47,6 +49,7 @@ func RegisterJSFunctions() {
"setPacketCallback": js.FuncOf(SetPacketCallback),
"setAnnounceCallback": js.FuncOf(SetAnnounceCallback),
"sendData": js.FuncOf(SendDataJS),
"sendMessage": js.FuncOf(SendDataJS),
"announce": js.FuncOf(SendAnnounceJS),
}))
}
@@ -100,11 +103,31 @@ func RequestPath(this js.Value, args []js.Value) interface{} {
}
func GetStats(this js.Value, args []js.Value) interface{} {
if reticulumTransport != nil {
ifaces := reticulumTransport.GetInterfaces()
totalTxBytes := 0
totalRxBytes := 0
totalTxPackets := 0
totalRxPackets := 0
for _, iface := range ifaces {
totalTxBytes += int(iface.GetTxBytes())
totalRxBytes += int(iface.GetRxBytes())
totalTxPackets += int(iface.GetTxPackets())
totalRxPackets += int(iface.GetRxPackets())
}
stats.bytesSent = totalTxBytes
stats.bytesReceived = totalRxBytes
stats.packetsSent = totalTxPackets
stats.packetsReceived = totalRxPackets
}
return js.ValueOf(map[string]interface{}{
"packetsSent": stats.packetsSent,
"packetsReceived": stats.packetsReceived,
"bytesSent": stats.bytesSent,
"bytesReceived": stats.bytesReceived,
"packetsSent": stats.packetsSent,
"packetsReceived": stats.packetsReceived,
"bytesSent": stats.bytesSent,
"bytesReceived": stats.bytesReceived,
"announcesSent": stats.announcesSent,
"announcesReceived": stats.announcesReceived,
})
}
@@ -154,6 +177,8 @@ func InitReticulum(this js.Value, args []js.Value) interface{} {
cfg := common.DefaultConfig()
t := transport.NewTransport(cfg)
// Ensure the global instance is set for internal RNS calls (like Announce)
transport.SetTransportInstance(t)
// Set transport identity to the same as the node identity for now in WASM
t.SetIdentity(id)
@@ -176,9 +201,6 @@ func InitReticulum(this js.Value, args []js.Value) interface{} {
}
dest.SetPacketCallback(func(data []byte, ni common.NetworkInterface) {
stats.packetsReceived++
stats.bytesReceived += len(data)
if !packetCallback.IsUndefined() {
// Convert bytes to JS Uint8Array for performance and compatibility
uint8Array := js.Global().Get("Uint8Array").New(len(data))
@@ -198,12 +220,8 @@ func InitReticulum(this js.Value, args []js.Value) interface{} {
})
}
wsInterface.SetPacketCallback(func(data []byte, ni common.NetworkInterface) {
msg := fmt.Sprintf("Received packet: %d bytes (type: 0x%02x)", len(data), data[0])
js.Global().Call("log", msg, "success")
debug.Log(debug.DEBUG_INFO, "WASM received packet", "bytes", len(data), "type", fmt.Sprintf("0x%02x", data[0]))
t.HandlePacket(data, ni)
})
// Wire the interface to the transport
wsInterface.SetPacketCallback(t.HandlePacket)
if err := t.RegisterInterface("wasm0", wsInterface); err != nil {
return js.ValueOf(map[string]interface{}{
@@ -344,6 +362,8 @@ func (h *genericAnnounceHandler) ReceivePathResponses() bool {
}
func (h *genericAnnounceHandler) ReceivedAnnounce(destHash []byte, ident interface{}, appData []byte, hops uint8) error {
debug.Log(debug.DEBUG_INFO, "WASM Announce Handler received announce", "dest", hex.EncodeToString(destHash), "hops", hops)
stats.announcesReceived++
if !announceHandler.IsUndefined() {
hashStr := hex.EncodeToString(destHash)
announceHandler.Invoke(js.ValueOf(map[string]interface{}{
@@ -437,9 +457,6 @@ func SendData(destHash []byte, data []byte) interface{} {
})
}
stats.packetsSent++
stats.bytesSent += len(data)
return js.ValueOf(map[string]interface{}{
"success": true,
})
@@ -475,6 +492,8 @@ func SendAnnounce(appData []byte) interface{} {
})
}
stats.announcesSent++
return js.ValueOf(map[string]interface{}{
"success": true,
})