Git Product home page Git Product logo

rtr's Introduction

rtr

A simple web panel for Ross NK Routers

rtr's People

Contributors

monoxane avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

rtr's Issues

Single Destination mode

Often engineers want to be able to give someone access to control their own router output without affecting other users or outputs on the system. rtr should provide a page for each output on the connected router with simple source selection for that output.

fatal error: concurrent map iteration and map write

[GIN] 2023/03/21 - 22:22:40 | 200 |     282.029µs |      172.17.0.1 | GET      "/v1/ws/probe"
2023/03/21 22:22:40 New client registered. Total: 1
fatal error: concurrent map iteration and map write
2023/03/21 22:22:47 Client unregistered.   Total: 0

goroutine 1297 [running]:
main.(*ProbeSocketHandler).BroadcastData(0xc0003b30e0, 0xc0006129d8)
        github.com/monoxane/rtr/probe.go:145 +0xc5
main.HandleProbeStream(0xc00016c400)
        github.com/monoxane/rtr/main.go:279 +0x71
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
main.CORSMiddleware.func1(0xc00016c400)
        github.com/monoxane/rtr/main.go:172 +0x11c
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.CustomRecoveryWithWriter.func1(0xc00016c400)
        github.com/gin-gonic/[email protected]/recovery.go:102 +0x82
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc00016c400)
        github.com/gin-gonic/[email protected]/logger.go:240 +0xe7
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0003c8ea0, 0xc00016c400)
        github.com/gin-gonic/[email protected]/gin.go:620 +0x66b
github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0003c8ea0, {0x902a20?, 0xc0003760e0}, 0xc00016c100)
        github.com/gin-gonic/[email protected]/gin.go:576 +0x1dd
net/http.serverHandler.ServeHTTP({0x901b00?}, {0x902a20, 0xc0003760e0}, 0xc00016c100)
        net/http/server.go:2936 +0x316
net/http.(*conn).serve(0xc0004182d0, {0x903008, 0xc0003b3380})
        net/http/server.go:1995 +0x612
created by net/http.(*Server).Serve
        net/http/server.go:3089 +0x5ed

goroutine 1 [chan receive, 8023 minutes]:
main.main()
        github.com/monoxane/rtr/main.go:124 +0x3d5

goroutine 19 [select]:
main.(*ProbeSocketHandler).Run(0xc0003b30e0)
        github.com/monoxane/rtr/probe.go:102 +0xce
created by main.main
        github.com/monoxane/rtr/main.go:107 +0x265

goroutine 20 [IO wait]:
internal/poll.runtime_pollWait(0x7feb40624818, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000402000?, 0xc000470800?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000402000, {0xc000470800, 0x800, 0x800})
        internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000402000, {0xc000470800?, 0x7feb404f8eb8?, 0x7feb689f55b8?})
        net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0000b0dd0, {0xc000470800?, 0x7c8ca0?, 0xc00067b701?})
        net/net.go:183 +0x45
github.com/monoxane/nk.(*Router).Connect(0xc00039a820)
        github.com/monoxane/[email protected]/nk.go:127 +0x23c
created by main.main
        github.com/monoxane/rtr/main.go:110 +0x2ae

goroutine 21 [IO wait]:
internal/poll.runtime_pollWait(0x7feb40624728, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000381a80?, 0x4?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Accept(0xc000381a80)
        internal/poll/fd_unix.go:614 +0x2bd
net.(*netFD).accept(0xc000381a80)
        net/fd_unix.go:172 +0x35
net.(*TCPListener).accept(0xc0000ab878)
        net/tcpsock_posix.go:148 +0x25
net.(*TCPListener).Accept(0xc0000ab878)
        net/tcpsock.go:297 +0x3d
net/http.(*Server).Serve(0xc0002d6ff0, {0x902870, 0xc0000ab878})
        net/http/server.go:3059 +0x385
net/http.(*Server).ListenAndServe(0xc0002d6ff0)
        net/http/server.go:2988 +0x7d
net/http.ListenAndServe(...)
        net/http/server.go:3242
github.com/gin-gonic/gin.(*Engine).Run(0xc0003c8ea0, {0xc00005ef90, 0x1, 0x1})
        github.com/gin-gonic/[email protected]/gin.go:386 +0x20e
main.serveHTTP()
        github.com/monoxane/rtr/main.go:153 +0x48f
created by main.main
        github.com/monoxane/rtr/main.go:111 +0x2ba

goroutine 23 [syscall, 8023 minutes]:
os/signal.signal_recv()
        runtime/sigqueue.go:152 +0x2f
os/signal.loop()
        os/signal/signal_unix.go:23 +0x19
created by os/signal.Notify.func1.1
        os/signal/signal.go:151 +0x2a

goroutine 34 [chan receive, 8023 minutes]:
main.main.func3()
        github.com/monoxane/rtr/main.go:118 +0x31
created by main.main
        github.com/monoxane/rtr/main.go:117 +0x399

goroutine 24 [chan receive]:
github.com/monoxane/nk.(*Router).Connect.func1()
        github.com/monoxane/[email protected]/nk.go:120 +0x9d
created by github.com/monoxane/nk.(*Router).Connect
        github.com/monoxane/[email protected]/nk.go:119 +0x1df

goroutine 2143 [chan receive, 1252 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005bb8a8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2146 [chan receive, 1256 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b7368)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 329 [chan receive, 8018 minutes]:
main.(*ProbeClient).WriteHandler(0xc0002860a8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 371 [chan receive, 8013 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007aa2a0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 576 [chan receive, 8003 minutes]:
main.(*ProbeClient).WriteHandler(0xc000619ef0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1781 [chan receive, 3919 minutes]:
main.(*ProbeClient).WriteHandler(0xc000860780)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1938 [chan receive, 3587 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c6dc8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1946 [chan receive, 3478 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007ceac8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1634 [chan receive, 3960 minutes]:
main.(*ProbeClient).WriteHandler(0xc000612318)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1609 [chan receive, 3970 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007aa750)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 334 [chan receive, 8014 minutes]:
main.(*ProbeClient).WriteHandler(0xc000612120)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 264 [chan receive, 8021 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012150)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 220 [chan receive, 8021 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000aa9a8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2178 [chan receive, 1256 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007ce8b8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 611 [chan receive, 8004 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012258)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2260 [IO wait, 82 minutes]:
internal/poll.runtime_pollWait(0x7feb40645f00, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00050ed80?, 0xc00071e000?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00050ed80, {0xc00071e000, 0x1000, 0x1000})
        internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00050ed80, {0xc00071e000?, 0x4c44a6?, 0x0?})
        net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00007e188, {0xc00071e000?, 0x0?, 0xc000027568?})
        net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000027560, {0xc00071e000, 0x1000, 0x1000})
        net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc0002f1080)
        bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc0002f1080, 0x4)
        bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc000a96750, {0x903008, 0xc0003b3380})
        net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
        net/http/server.go:3089 +0x5ed

goroutine 2323 [runnable]:
main.(*ProbeClient).WriteHandler(0xc000b271e8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1788 [chan receive, 3670 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b2b260)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1033 [chan receive, 7861 minutes]:
main.(*ProbeClient).WriteHandler(0xc000618270)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1828 [chan receive, 3915 minutes]:
main.(*ProbeClient).WriteHandler(0xc0002867f8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1276 [chan receive, 5401 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b6090)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 142 [chan receive, 8021 minutes]:
main.(*ProbeClient).WriteHandler(0xc000287d10)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 497 [chan receive, 8007 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c77b8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1577 [chan receive, 3916 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007ce810)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1806 [chan receive, 3867 minutes]:
main.(*ProbeClient).WriteHandler(0xc000619ea8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1639 [chan receive, 3945 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005ba450)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1459 [chan receive, 5196 minutes]:
main.(*ProbeClient).WriteHandler(0xc000613050)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1326 [chan receive, 5376 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b20750)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 727 [chan receive, 7994 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b70f8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 866 [chan receive, 7979 minutes]:
main.(*ProbeClient).WriteHandler(0xc000013ba8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2037 [chan receive, 2685 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007cf1d0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1464 [chan receive, 5149 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005bba28)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1422 [chan receive, 5215 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006190e0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1112 [chan receive, 7836 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007cfa58)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1604 [chan receive, 3970 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007ce510)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 649 [chan receive, 8002 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b63d8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 15 [chan receive, 8023 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000aa7e0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 450 [chan receive, 8006 minutes]:
main.(*ProbeClient).WriteHandler(0xc000013b18)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 952 [chan receive, 7979 minutes]:
main.(*ProbeClient).WriteHandler(0xc000618f30)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1762 [chan receive, 3925 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000ab320)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2114 [chan receive, 1252 minutes]:
main.(*ProbeClient).WriteHandler(0xc000612498)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 531 [chan receive, 8008 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012438)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 616 [chan receive, 8000 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000aa7f8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 597 [chan receive, 7990 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000125d0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 290 [chan receive, 8021 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006135d8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1004 [chan receive, 5401 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b210f8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 202 [chan receive, 8022 minutes]:
main.(*ProbeClient).WriteHandler(0xc0002871e8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 302 [chan receive, 8017 minutes]:
main.(*ProbeClient).WriteHandler(0xc000613158)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 413 [chan receive, 8010 minutes]:
main.(*ProbeClient).WriteHandler(0xc000612258)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1249 [chan receive, 5384 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c68e8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 238 [chan receive, 8019 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005ba0c0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 644 [chan receive, 8004 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b6048)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1131 [chan receive, 5126 minutes]:
main.(*ProbeClient).WriteHandler(0xc000612510)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 172 [chan receive, 8019 minutes]:
main.(*ProbeClient).WriteHandler(0xc000612048)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 364 [chan receive, 8010 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000126c0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 381 [chan receive, 8013 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012240)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 418 [chan receive, 8011 minutes]:
main.(*ProbeClient).WriteHandler(0xc000612090)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2258 [IO wait, 82 minutes]:
internal/poll.runtime_pollWait(0x7feb405eb5f0, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00050ea00?, 0xc000988000?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00050ea00, {0xc000988000, 0x1000, 0x1000})
        internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00050ea00, {0xc000988000?, 0x4c44a6?, 0x0?})
        net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00007e170, {0xc000988000?, 0x0?, 0xc0000273e8?})
        net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0000273e0, {0xc000988000, 0x1000, 0x1000})
        net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc0005c0840)
        bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc0005c0840, 0x4)
        bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc000a963f0, {0x903008, 0xc0003b3380})
        net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
        net/http/server.go:3089 +0x5ed

goroutine 2254 [IO wait, 82 minutes]:
internal/poll.runtime_pollWait(0x7feb40623fa8, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000381280?, 0xc000ab6000?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000381280, {0xc000ab6000, 0x1000, 0x1000})
        internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000381280, {0xc000ab6000?, 0x4c44a6?, 0x0?})
        net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0005c6128, {0xc000ab6000?, 0x0?, 0xc000026998?})
        net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000026990, {0xc000ab6000, 0x1000, 0x1000})
        net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc0007916e0)
        bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc0007916e0, 0x4)
        bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc000148090, {0x903008, 0xc0003b3380})
        net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
        net/http/server.go:3089 +0x5ed

goroutine 1265 [chan receive, 5376 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005bb560)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 834 [chan receive, 7986 minutes]:
main.(*ProbeClient).WriteHandler(0xc0002873e0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 791 [chan receive, 7987 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007aa0d8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 439 [chan receive, 8010 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005ba480)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 313 [chan receive, 8009 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006122e8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 498 [chan receive, 8008 minutes]:
main.(*ProbeClient).WriteHandler(0xc000287fb0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 590 [chan receive, 8004 minutes]:
main.(*ProbeClient).WriteHandler(0xc000618660)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2306 [chan receive]:
main.(*ProbeClient).WriteHandler(0xc0006c62b8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 544 [chan receive, 8007 minutes]:
main.(*ProbeClient).WriteHandler(0xc000612450)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 510 [chan receive, 8008 minutes]:
main.(*ProbeClient).WriteHandler(0xc0002860d8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 536 [chan receive, 8008 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005ba048)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 548 [chan receive, 8008 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c74e8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 786 [chan receive, 7990 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b6918)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1724 [chan receive, 3925 minutes]:
main.(*ProbeClient).WriteHandler(0xc000286078)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 755 [chan receive, 7994 minutes]:
main.(*ProbeClient).WriteHandler(0xc00067a000)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 626 [chan receive, 8004 minutes]:
main.(*ProbeClient).WriteHandler(0xc0002861e0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1719 [chan receive, 3925 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007ab5f0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1389 [chan receive, 5148 minutes]:
main.(*ProbeClient).WriteHandler(0xc00067b188)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 765 [chan receive, 7959 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007ab8a8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 128 [chan receive, 8002 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c64c8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 446 [chan receive, 8001 minutes]:
main.(*ProbeClient).WriteHandler(0xc000287518)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 637 [chan receive, 8000 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c6b28)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 674 [chan receive, 7997 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005baa20)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1072 [chan receive, 6891 minutes]:
main.(*ProbeClient).WriteHandler(0xc000612de0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1023 [chan receive, 6921 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c7cf8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1340 [chan receive, 5143 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012390)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 813 [chan receive, 7987 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c6708)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 990 [chan receive, 7945 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000128a0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 707 [chan receive, 7997 minutes]:
main.(*ProbeClient).WriteHandler(0xc000618378)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 688 [chan receive, 7997 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000ab800)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 711 [chan receive, 7994 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b6060)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1428 [chan receive, 5376 minutes]:
main.(*ProbeClient).WriteHandler(0xc000613ec0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1063 [chan receive, 7836 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007cf9b0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 759 [chan receive, 7982 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007ab3e0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 781 [chan receive, 7994 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b72a8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 776 [chan receive, 7994 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b6078)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1287 [chan receive, 5400 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005ba078)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 256 [chan receive, 7986 minutes]:
main.(*ProbeClient).WriteHandler(0xc00067b668)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1076 [chan receive, 7836 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007cf3c8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1759 [chan receive, 3918 minutes]:
main.(*ProbeClient).WriteHandler(0xc0008612d8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2261 [IO wait, 82 minutes]:
internal/poll.runtime_pollWait(0x7feb405eb050, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00050ee00?, 0xc0007ae000?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00050ee00, {0xc0007ae000, 0x1000, 0x1000})
        internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00050ee00, {0xc0007ae000?, 0x4c44a6?, 0x0?})
        net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00007e190, {0xc0007ae000?, 0x0?, 0xc0003b3ce8?})
        net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0003b3ce0, {0xc0007ae000, 0x1000, 0x1000})
        net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc00002e480)
        bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc00002e480, 0x4)
        bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc000a967e0, {0x903008, 0xc0003b3380})
        net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
        net/http/server.go:3089 +0x5ed

goroutine 876 [chan receive, 7984 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007cfad0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1291 [chan receive, 5400 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b2a228)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1194 [chan receive, 6891 minutes]:
main.(*ProbeClient).WriteHandler(0xc00067a090)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1231 [chan receive, 5376 minutes]:
main.(*ProbeClient).WriteHandler(0xc000013578)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 749 [chan receive, 7960 minutes]:
main.(*ProbeClient).WriteHandler(0xc00067b1b8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 962 [chan receive, 7980 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012210)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 936 [chan receive, 7982 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012228)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1049 [chan receive, 7836 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b21038)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1680 [chan receive, 3926 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b71a0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1044 [chan receive, 7836 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b21230)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1209 [chan receive, 6593 minutes]:
main.(*ProbeClient).WriteHandler(0xc000013a40)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1475 [chan receive, 5143 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012750)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1142 [chan receive, 7708 minutes]:
main.(*ProbeClient).WriteHandler(0xc000286540)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 695 [chan receive, 7708 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012078)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 700 [chan receive, 7708 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007ce030)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1281 [chan receive, 5400 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c7e18)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1649 [chan receive, 3926 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b62a0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1393 [chan receive, 5143 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b6f18)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1198 [chan receive, 6891 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007abaa0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1355 [chan receive, 5196 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005bb530)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1746 [chan receive, 3925 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000129f0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1495 [chan receive, 5143 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007cff80)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1100 [chan receive, 5376 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006133e0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1442 [chan receive, 5215 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007aba40)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2240 [IO wait, 82 minutes]:
internal/poll.runtime_pollWait(0x7feb405eae70, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00050e900?, 0xc000aa0000?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00050e900, {0xc000aa0000, 0x1000, 0x1000})
        internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00050e900, {0xc000aa0000?, 0x4c44a6?, 0x0?})
        net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00007e138, {0xc000aa0000?, 0x0?, 0xc000026f38?})
        net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000026f30, {0xc000aa0000, 0x1000, 0x1000})
        net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc000790120)
        bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc000790120, 0x4)
        bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc000a961b0, {0x903008, 0xc0003b3380})
        net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
        net/http/server.go:3089 +0x5ed

goroutine 1449 [chan receive, 3916 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c69f0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1549 [chan receive, 2685 minutes]:
main.(*ProbeClient).WriteHandler(0xc000618000)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1436 [chan receive, 3974 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005ba918)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1595 [chan receive, 3971 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007ce858)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1875 [chan receive, 3683 minutes]:
main.(*ProbeClient).WriteHandler(0xc00067a960)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1368 [chan receive, 3539 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b265d0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1873 [chan receive, 3686 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006c6510)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1794 [chan receive, 3919 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007aa6f0)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1560 [chan receive, 3975 minutes]:
main.(*ProbeClient).WriteHandler(0xc000012780)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1672 [chan receive, 3932 minutes]:
main.(*ProbeClient).WriteHandler(0xc000860090)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2162 [chan receive, 1256 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005bb398)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1707 [chan receive, 3927 minutes]:
main.(*ProbeClient).WriteHandler(0xc0005bba88)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1737 [chan receive, 3925 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b2a618)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1742 [chan receive, 3925 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b2ae88)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1546 [chan receive, 3599 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b79f8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1820 [chan receive, 3812 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b2bcc8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1697 [IO wait, 82 minutes]:
internal/poll.runtime_pollWait(0x7feb405eb7d0, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000402b00?, 0xc000d46000?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000402b00, {0xc000d46000, 0x1000, 0x1000})
        internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000402b00, {0xc000d46000?, 0x4c44a6?, 0x0?})
        net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0004fe0a0, {0xc000d46000?, 0x0?, 0xc0003b3ad8?})
        net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0003b3ad0, {0xc000d46000, 0x1000, 0x1000})
        net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc00002e240)
        bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc00002e240, 0x4)
        bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc000418000, {0x903008, 0xc0003b3380})
        net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
        net/http/server.go:3089 +0x5ed

goroutine 1692 [chan receive, 3916 minutes]:
main.(*ProbeClient).WriteHandler(0xc000861f08)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1933 [chan receive, 3599 minutes]:
main.(*ProbeClient).WriteHandler(0xc000861878)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2048 [chan receive, 1950 minutes]:
main.(*ProbeClient).WriteHandler(0xc0004b7308)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2138 [chan receive, 1256 minutes]:
main.(*ProbeClient).WriteHandler(0xc0000abe30)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1890 [chan receive, 3687 minutes]:
main.(*ProbeClient).WriteHandler(0xc000860f60)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1911 [chan receive, 3686 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007aad98)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1957 [chan receive, 3478 minutes]:
main.(*ProbeClient).WriteHandler(0xc0002874b8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1988 [chan receive, 3478 minutes]:
main.(*ProbeClient).WriteHandler(0xc000618048)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2054 [chan receive, 2685 minutes]:
main.(*ProbeClient).WriteHandler(0xc0007cedc8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2251 [chan receive, 1054 minutes]:
main.(*ProbeClient).WriteHandler(0xc0006125b8)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 1981 [chan receive, 2685 minutes]:
main.(*ProbeClient).WriteHandler(0xc000b2bd28)
        github.com/monoxane/rtr/probe.go:72 +0x95
created by main.(*ProbeClient).Run
        github.com/monoxane/rtr/probe.go:86 +0x97

goroutine 2184 [IO wait]:
internal/poll.runtime_pollWait(0x7feb405ecb80, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00050f100?, 0xc0000dd000?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00050f100, {0xc0000dd000, 0x400, 0x400})
        internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00050f100, {0xc0000dd000?, 0x4acf7c?, 0x1?})
        net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00007e198, {0xc0000dd000?, 0x1?, 0x3?})
        net/net.go:183 +0x45
bufio.(*Reader).fill(0xc000d635c0)
        bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc000d635c0, 0x2)
        bufio/bufio.go:144 +0x5d
github.com/gorilla/websocket.(*Conn).read(0xc00085bce0, 0x0?)
        github.com/gorilla/[email protected]/conn.go:371 +0x2c
github.com/gorilla/websocket.(*Conn).advanceFrame(0xc00085bce0)
        github.com/gorilla/[email protected]/conn.go:809 +0x7b
github.com/gorilla/websocket.(*Conn).NextReader(0xc00085bce0)
        github.com/gorilla/[email protected]/conn.go:1009 +0xcc
github.com/gorilla/websocket.(*Conn).ReadMessage(0xc00039a820?)
        github.com/gorilla/[email protected]/conn.go:1093 +0x19
main.HandleMatrixWS(0xc000cb6100)
        github.com/monoxane/rtr/main.go:237 +0x34a
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
main.CORSMiddleware.func1(0xc000cb6100)
        github.com/monoxane/rtr/main.go:172 +0x11c
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.CustomRecoveryWithWriter.func1(0xc000cb6100)
        github.com/gin-gonic/[email protected]/recovery.go:102 +0x82
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000cb6100)
        github.com/gin-gonic/[email protected]/logger.go:240 +0xe7
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0003c8ea0, 0xc000cb6100)
        github.com/gin-gonic/[email protected]/gin.go:620 +0x66b
github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0003c8ea0, {0x902a20?, 0xc000376460}, 0xc000cb6700)
        github.com/gin-gonic/[email protected]/gin.go:576 +0x1dd
net/http.serverHandler.ServeHTTP({0xc0001f9170?}, {0x902a20, 0xc000376460}, 0xc000cb6700)
        net/http/server.go:2936 +0x316
net/http.(*conn).serve(0xc000a966c0, {0x903008, 0xc0003b3380})
        net/http/server.go:1995 +0x612
created by net/http.(*Server).Serve
        net/http/server.go:3089 +0x5ed

goroutine 2187 [IO wait, 5 minutes]:
internal/poll.runtime_pollWait(0x7feb405eca90, 0x72)
        runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00050f480?, 0xc000a54000?, 0x0)
        internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
        internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00050f480, {0xc000a54000, 0x400, 0x400})
        internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00050f480, {0xc000a54000?, 0xc00041f380?, 0x0?})
        net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc00007e1b8, {0xc000a54000?, 0xc00041f3b0?, 0x534c89?})
        net/net.go:183 +0x45
bufio.(*Reader).fill(0xc00002ea20)
        bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc00002ea20, 0x2)
        bufio/bufio.go:144 +0x5d
github.com/gorilla/websocket.(*Conn).read(0xc0006da2c0, 0x81f400?)
        github.com/gorilla/[email protected]/conn.go:371 +0x2c
github.com/gorilla/websocket.(*Conn).advanceFrame(0xc0006da2c0)
        github.com/gorilla/[email protected]/conn.go:809 +0x7b
github.com/gorilla/websocket.(*Conn).NextReader(0xc0006da2c0)
        github.com/gorilla/[email protected]/conn.go:1009 +0xcc
github.com/gorilla/websocket.(*Conn).ReadMessage(0x7deb80?)
        github.com/gorilla/[email protected]/conn.go:1093 +0x19
main.HandleMatrixWS(0xc000a2c000)
        github.com/monoxane/rtr/main.go:237 +0x34a
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
main.CORSMiddleware.func1(0xc000a2c000)
        github.com/monoxane/rtr/main.go:172 +0x11c
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.CustomRecoveryWithWriter.func1(0xc000a2c000)
        github.com/gin-gonic/[email protected]/recovery.go:102 +0x82
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.LoggerWithConfig.func1(0xc000a2c000)
        github.com/gin-gonic/[email protected]/logger.go:240 +0xe7
github.com/gin-gonic/gin.(*Context).Next(...)
        github.com/gin-gonic/[email protected]/context.go:174
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc0003c8ea0, 0xc000a2c000)
        github.com/gin-gonic/[email protected]/gin.go:620 +0x66b
github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc0003c8ea0, {0x902a20?, 0xc000a280e0}, 0xc00016c900)
        github.com/gin-gonic/[email protected]/gin.go:576 +0x1dd
net/http.serverHandler.ServeHTTP({0xc0004deb10?}, {0x902a20, 0xc000a280e0}, 0xc00016c900)
        net/http/server.go:2936 +0x316
net/http.(*conn).serve(0xc000a96a20, {0x903008, 0xc0003b3380})
        net/http/server.go:1995 +0x612
created by net/http.(*Server).Serve
        net/http/server.go:3089 +0x5ed

Simple Authentication mode

It's not a great idea to leave your router control open on the network, there should be an option for simple password auth specified by the user.

Simplify Deployment

Deployment should be possible with minimal human interactions. This repo should provide a docker-compose.yaml file containing all the dependencies for an operational instance of rtr with at least 1 Probe channel

Provide Deployment Instructions

Whilst it is fairly easy to deploy I haven't actually provided instructions on how to do so.

AC:

  • Documentation in this repository on how to deploy the application in it's current state

Allow configuration from the UI

The current state of the application does not allow configuration from the UI and instead needs the user to edit a config json on disk. This is not very user friendly and should be changed to expose all necessary configuration parameters in a page or modal in the UI.

AC:

  • On first boot write out a basic config json
  • Hide the matrix view from UI if not configured, and show a button that opens the configuration modal
  • Expose all configuration options in a modal
  • Allow saving from this modal
  • On save reinit the router and controller

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.