Code Monkey home page Code Monkey logo

excubitor-backend's People

Contributors

joystick01 avatar uggah avatar

Stargazers

 avatar  avatar  avatar

excubitor-backend's Issues

Implement WebSocket API for getting information from the server

The WebSocket API should grant access to various operations. Among them are: GET, SUB, UNSUB, HIST, ERR,

GET: Get a single value
SUB: Get a value every x ms
UNSUB: Unsubscribe from a value
HIST: Get the history of a value with timestamps
ERR: Error message, i.e. value not available or not subscribed to a value when unsubscribing

The values shall be adressed using dot-separated strings like the following: Module.SensorName.ConcreteValue

Concurrent map writes

fatal error: concurrent map writes

goroutine 109 [running]:
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/pubsub.(*Broker).Unsubscribe(0xc0001dc380, 0xc000134140, {0xc000114610, 0xd})
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/pubsub/broker.go:67 +0x1da
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.handleGET.func1.1()
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:141 +0x1c6
sync.(*Once).doSlow(0x10?, 0xc000100800?)
	/usr/lib/golang/src/sync/once.go:74 +0xc2
sync.(*Once).Do(...)
	/usr/lib/golang/src/sync/once.go:65
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.handleGET.func1(0xc0005022a0?)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:138 +0x85
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/pubsub.(*Subscriber).Listen(0xc000134140, 0xc000514540)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/pubsub/subscriber.go:80 +0x17a
created by github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.handleGET
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:137 +0x26d

goroutine 1 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a31c8, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000548000?, 0x4?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Accept(0xc000548000)
	/usr/lib/golang/src/internal/poll/fd_unix.go:614 +0x2bd
net.(*netFD).accept(0xc000548000)
	/usr/lib/golang/src/net/fd_unix.go:172 +0x35
net.(*TCPListener).accept(0xc000500768)
	/usr/lib/golang/src/net/tcpsock_posix.go:148 +0x25
net.(*TCPListener).Accept(0xc000500768)
	/usr/lib/golang/src/net/tcpsock.go:297 +0x3d
net/http.(*Server).Serve(0xc000546000, {0xf49cf0, 0xc000500768})
	/usr/lib/golang/src/net/http/server.go:3059 +0x385
net/http.(*Server).ListenAndServe(0xc000546000)
	/usr/lib/golang/src/net/http/server.go:2988 +0x7d
net/http.ListenAndServe(...)
	/usr/lib/golang/src/net/http/server.go:3242
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server.Start()
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/http_server.go:29 +0x265
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/excubitor.Execute()
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/excubitor/root.go:129 +0x6b7
main.main()
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/cmd/main.go:8 +0x19

goroutine 6 [select]:
database/sql.(*DB).connectionOpener(0xc000195520, {0xf4a4a0, 0xc0000a2a50})
	/usr/lib/golang/src/database/sql/sql.go:1218 +0x8d
created by database/sql.OpenDB
	/usr/lib/golang/src/database/sql/sql.go:791 +0x18d

goroutine 7 [sleep]:
time.Sleep(0x34630b8a000)
	/usr/lib/golang/src/runtime/time.go:195 +0x135
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/db.startPurgeCycle.func1()
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/db/database.go:90 +0x36
created by github.com/Excubitor-Monitoring/Excubitor-Backend/internal/db.startPurgeCycle
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/db/database.go:84 +0xdf

goroutine 8 [runnable]:
compress/flate.NewWriter({0xf44600, 0xc000450820}, 0xc0003b9c68?)
	/usr/lib/golang/src/compress/flate/deflate.go:666 +0x2f
compress/flate.NewWriterDict({0xf445a0?, 0xc000408690}, 0x2?, {0x0, 0x0, 0x0})
	/usr/lib/golang/src/compress/flate/deflate.go:681 +0x8f
compress/zlib.(*Writer).writeHeader(0xc000110120)
	/usr/lib/golang/src/compress/zlib/writer.go:132 +0x165
compress/zlib.(*Writer).Write(0xc000110120, {0xc0000e4900, 0x477, 0x480})
	/usr/lib/golang/src/compress/zlib/writer.go:146 +0x37
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/db.compress({0xc0000e4480, 0x477})
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/db/compression.go:16 +0x7a
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/db.(*Writer).AddHistoryEntry(0xc0003b9e88?, {0xc0001143b0, 0xd}, {0xc0000e4480, 0x477})
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/db/writer.go:25 +0x8e
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/pubsub.(*Broker).Publish(0xc0001dc380, {0xc0001143b0, 0xd}, {0xc0000e4480, 0x477})
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/pubsub/broker.go:93 +0x345
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/plugins.InitPlugins.func1()
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/plugins/loader.go:91 +0x85
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/context.startClock.func1.1()
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/context/clock.go:24 +0x79
created by github.com/Excubitor-Monitoring/Excubitor-Backend/internal/context.startClock.func1
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/context/clock.go:20 +0x65

goroutine 9 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a32b8, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000098a20?, 0xc000292000?, 0x1)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000098a20, {0xc000292000, 0x10000, 0x10000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
os.(*File).read(...)
	/usr/lib/golang/src/os/file_posix.go:31
os.(*File).Read(0xc000014848, {0xc000292000?, 0xc0002b37a0?, 0x7f82384c3408?})
	/usr/lib/golang/src/os/file.go:118 +0x5e
bufio.(*Reader).fill(0xc000206f40)
	/usr/lib/golang/src/bufio/bufio.go:106 +0xff
bufio.(*Reader).ReadSlice(0xc000206f40, 0x1a?)
	/usr/lib/golang/src/bufio/bufio.go:372 +0x2f
bufio.(*Reader).ReadLine(0xc000206f40)
	/usr/lib/golang/src/bufio/bufio.go:401 +0x27
github.com/hashicorp/go-plugin.(*Client).logStderr(0xc0000e7550, {0xf459a0?, 0xc000014848?})
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/client.go:1002 +0x295
created by github.com/hashicorp/go-plugin.(*Client).Start
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/client.go:634 +0x145e

goroutine 10 [semacquire]:
sync.runtime_Semacquire(0x0?)
	/usr/lib/golang/src/runtime/sema.go:62 +0x27
sync.(*WaitGroup).Wait(0x0?)
	/usr/lib/golang/src/sync/waitgroup.go:116 +0x4b
github.com/hashicorp/go-plugin.(*Client).Start.func2()
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/client.go:650 +0xcb
created by github.com/hashicorp/go-plugin.(*Client).Start
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/client.go:637 +0x14d0

goroutine 11 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a3498, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000098960?, 0xc0001f3027?, 0x1)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000098960, {0xc0001f3027, 0xfd9, 0xfd9})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
os.(*File).read(...)
	/usr/lib/golang/src/os/file_posix.go:31
os.(*File).Read(0xc000014838, {0xc0001f3027?, 0xc000068ea0?, 0x40fc05?})
	/usr/lib/golang/src/os/file.go:118 +0x5e
bufio.(*Scanner).Scan(0xc000068f40)
	/usr/lib/golang/src/bufio/scan.go:214 +0x876
github.com/hashicorp/go-plugin.(*Client).Start.func3()
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/client.go:685 +0x133
created by github.com/hashicorp/go-plugin.(*Client).Start
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/client.go:680 +0x158f

goroutine 18 [chan receive]:
github.com/hashicorp/go-plugin.(*Client).Start.func4.1()
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/client.go:698 +0x7f
created by github.com/hashicorp/go-plugin.(*Client).Start.func4
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/client.go:696 +0x7a

goroutine 19 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a30d8, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc0002bc000?, 0xc0002d2000?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc0002bc000, {0xc0002d2000, 0x1000, 0x1000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc0002bc000, {0xc0002d2000?, 0xf44540?, 0xc0005020c0?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0002a4010, {0xc0002d2000?, 0xc00050aef0?, 0x927c30?})
	/usr/lib/golang/src/net/net.go:183 +0x45
bufio.(*Reader).Read(0xc0002ba060, {0xc000400060, 0xc, 0x455dd2?})
	/usr/lib/golang/src/bufio/bufio.go:237 +0x1bb
io.ReadAtLeast({0xf44540, 0xc0002ba060}, {0xc000400060, 0xc, 0xc}, 0xc)
	/usr/lib/golang/src/io/io.go:332 +0x9a
io.ReadFull(...)
	/usr/lib/golang/src/io/io.go:351
github.com/hashicorp/yamux.(*Session).recvLoop(0xc0002dc000)
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/session.go:453 +0xbe
github.com/hashicorp/yamux.(*Session).recv(0x0?)
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/session.go:432 +0x1e
created by github.com/hashicorp/yamux.newSession
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/session.go:108 +0x4aa

goroutine 20 [select]:
github.com/hashicorp/yamux.(*Session).send(0xc0002dc000)
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/session.go:394 +0xb4
created by github.com/hashicorp/yamux.newSession
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/session.go:109 +0x4ea

goroutine 21 [select]:
github.com/hashicorp/yamux.(*Session).keepalive(0xc0002dc000)
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/session.go:308 +0x85
created by github.com/hashicorp/yamux.newSession
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/session.go:111 +0x536

goroutine 22 [select]:
github.com/hashicorp/yamux.(*Session).AcceptStream(0xc0002dc000)
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/session.go:207 +0x6f
github.com/hashicorp/go-plugin.(*MuxBroker).Run(0xc0002b4120)
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/mux_broker.go:142 +0x30
created by github.com/hashicorp/go-plugin.NewRPCClient
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/rpc_client.go:91 +0x225

goroutine 23 [select]:
github.com/hashicorp/yamux.(*Stream).Read(0xc0002e6000, {0xc0002ec000, 0x1000, 0xa7dbc0?})
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/stream.go:133 +0x41b
bufio.(*Reader).Read(0xc0002ba420, {0xc0002a20e0, 0x1, 0xc000531d70?})
	/usr/lib/golang/src/bufio/bufio.go:237 +0x1bb
io.ReadAtLeast({0xf44540, 0xc0002ba420}, {0xc0002a20e0, 0x1, 0x9}, 0x1)
	/usr/lib/golang/src/io/io.go:332 +0x9a
io.ReadFull(...)
	/usr/lib/golang/src/io/io.go:351
encoding/gob.decodeUintReader({0xf44540?, 0xc0002ba420?}, {0xc0002a20e0?, 0x9?, 0x9?})
	/usr/lib/golang/src/encoding/gob/decode.go:116 +0x57
encoding/gob.(*Decoder).recvMessage(0xc0002bc200)
	/usr/lib/golang/src/encoding/gob/decoder.go:82 +0x39
encoding/gob.(*Decoder).decodeTypeSequence(0xc0002bc200, 0x0)
	/usr/lib/golang/src/encoding/gob/decoder.go:148 +0x4f
encoding/gob.(*Decoder).DecodeValue(0xc0002bc200, {0xa6ac80?, 0xc000488000?, 0x7f8238482d28?})
	/usr/lib/golang/src/encoding/gob/decoder.go:227 +0x18f
encoding/gob.(*Decoder).Decode(0xc0002bc200, {0xa6ac80?, 0xc000488000?})
	/usr/lib/golang/src/encoding/gob/decoder.go:204 +0x165
net/rpc.(*gobClientCodec).ReadResponseHeader(0xaaa000?, 0xa6d480?)
	/usr/lib/golang/src/net/rpc/client.go:228 +0x27
net/rpc.(*Client).input(0xc0002ba4e0)
	/usr/lib/golang/src/net/rpc/client.go:109 +0xb4
created by net/rpc.NewClientWithCodec
	/usr/lib/golang/src/net/rpc/client.go:206 +0xc5

goroutine 24 [select]:
github.com/hashicorp/yamux.(*Stream).Read(0xc0002e60c0, {0xc0001fc000, 0x2000, 0x0?})
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/stream.go:133 +0x41b
io.discard.ReadFrom({}, {0xf44c60, 0xc0002e60c0})
	/usr/lib/golang/src/io/io.go:651 +0x72
io.copyBuffer({0xf46280, 0x1354d80}, {0xf44c60, 0xc0002e60c0}, {0x0, 0x0, 0x0})
	/usr/lib/golang/src/io/io.go:413 +0x14b
io.Copy(...)
	/usr/lib/golang/src/io/io.go:386
github.com/hashicorp/go-plugin.copyStream({0xb57868, 0x6}, {0xf46280?, 0x1354d80?}, {0xf44c60?, 0xc0002e60c0?})
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/stream.go:18 +0x78
created by github.com/hashicorp/go-plugin.(*RPCClient).SyncStreams
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/rpc_client.go:111 +0xcd

goroutine 25 [select]:
github.com/hashicorp/yamux.(*Stream).Read(0xc0002e6180, {0xc000430000, 0x2000, 0x0?})
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/stream.go:133 +0x41b
io.discard.ReadFrom({}, {0xf44c60, 0xc0002e6180})
	/usr/lib/golang/src/io/io.go:651 +0x72
io.copyBuffer({0xf46280, 0x1354d80}, {0xf44c60, 0xc0002e6180}, {0x0, 0x0, 0x0})
	/usr/lib/golang/src/io/io.go:413 +0x14b
io.Copy(...)
	/usr/lib/golang/src/io/io.go:386
github.com/hashicorp/go-plugin.copyStream({0xb57862, 0x6}, {0xf46280?, 0x1354d80?}, {0xf44c60?, 0xc0002e6180?})
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/stream.go:18 +0x78
created by github.com/hashicorp/go-plugin.(*RPCClient).SyncStreams
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/rpc_client.go:112 +0x165

goroutine 34 [select]:
github.com/hashicorp/yamux.(*Stream).Read(0xc000536000, {0xc000437000, 0x1000, 0xa715e0?})
	/home/uggah/go/pkg/mod/github.com/hashicorp/[email protected]/stream.go:133 +0x41b
bufio.(*Reader).Read(0xc00041e180, {0xc000400070, 0x1, 0xc000637d70?})
	/usr/lib/golang/src/bufio/bufio.go:237 +0x1bb
io.ReadAtLeast({0xf44540, 0xc00041e180}, {0xc000400070, 0x1, 0x9}, 0x1)
	/usr/lib/golang/src/io/io.go:332 +0x9a
io.ReadFull(...)
	/usr/lib/golang/src/io/io.go:351
encoding/gob.decodeUintReader({0xf44540?, 0xc00041e180?}, {0xc000400070?, 0x9?, 0x9?})
	/usr/lib/golang/src/encoding/gob/decode.go:116 +0x57
encoding/gob.(*Decoder).recvMessage(0xc000418080)
	/usr/lib/golang/src/encoding/gob/decoder.go:82 +0x39
encoding/gob.(*Decoder).decodeTypeSequence(0xc000418080, 0x0)
	/usr/lib/golang/src/encoding/gob/decoder.go:148 +0x4f
encoding/gob.(*Decoder).DecodeValue(0xc000418080, {0xa6ac80?, 0xc0002aa5a0?, 0x7f8238543048?})
	/usr/lib/golang/src/encoding/gob/decoder.go:227 +0x18f
encoding/gob.(*Decoder).Decode(0xc000418080, {0xa6ac80?, 0xc0002aa5a0?})
	/usr/lib/golang/src/encoding/gob/decoder.go:204 +0x165
net/rpc.(*gobClientCodec).ReadResponseHeader(0xaaa000?, 0xa5ee80?)
	/usr/lib/golang/src/net/rpc/client.go:228 +0x27
net/rpc.(*Client).input(0xc00041e240)
	/usr/lib/golang/src/net/rpc/client.go:109 +0xb4
created by net/rpc.NewClientWithCodec
	/usr/lib/golang/src/net/rpc/client.go:206 +0xc5

goroutine 13 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a2fe8, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000384100?, 0xc0002ed000?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000384100, {0xc0002ed000, 0x1000, 0x1000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000384100, {0xc0002ed000?, 0x4dedc6?, 0x0?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc000210000, {0xc0002ed000?, 0x0?, 0xc00039c0c8?})
	/usr/lib/golang/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00039c0c0, {0xc0002ed000, 0x1000, 0x1000})
	/usr/lib/golang/src/net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc000098660)
	/usr/lib/golang/src/bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc000098660, 0x4)
	/usr/lib/golang/src/bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc0000fa000, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 57 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a33a8, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00003c080?, 0xc000660000?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00003c080, {0xc000660000, 0x1000, 0x1000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00003c080, {0xc000660000?, 0x4dedc6?, 0x0?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc000116000, {0xc000660000?, 0x0?, 0xc0001e8158?})
	/usr/lib/golang/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0001e8150, {0xc000660000, 0x1000, 0x1000})
	/usr/lib/golang/src/net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc0001100c0)
	/usr/lib/golang/src/bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc0001100c0, 0x4)
	/usr/lib/golang/src/bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc0003c2000, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 15 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a2e08, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000384400?, 0xc000114670?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000384400, {0xc000114670, 0x2, 0xc})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000384400, {0xc000114670?, 0x5c7209?, 0x1?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc000210038, {0xc000114670?, 0x7f82385c3a48?, 0x7f826114a108?})
	/usr/lib/golang/src/net/net.go:183 +0x45
io.ReadAtLeast({0xf456a0, 0xc000210038}, {0xc000114670, 0x2, 0xc}, 0x2)
	/usr/lib/golang/src/io/io.go:332 +0x9a
io.ReadFull(...)
	/usr/lib/golang/src/io/io.go:351
github.com/gobwas/ws.ReadHeader({0xf456a0, 0xc000210038})
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/read.go:25 +0x65
github.com/gobwas/ws/wsutil.(*Reader).NextFrame(0xc00047c460)
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/wsutil/reader.go:168 +0x46
github.com/gobwas/ws/wsutil.readData({0x7f823850caf8?, 0xc000210038}, 0x1, 0x3)
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/wsutil/helper.go:258 +0x165
github.com/gobwas/ws/wsutil.ReadData(...)
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/wsutil/helper.go:88
github.com/gobwas/ws/wsutil.ReadClientData({0x7f823850caf8?, 0xc000210038?})
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/wsutil/helper.go:97 +0x2d
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.HandleWebsocket({0xf4cfc0, 0xc000210038})
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:58 +0x377
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server.wsInit({0xf49ed0?, 0xc0000fe0e0?}, 0xc0000e2300)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/http_server.go:65 +0x19e
net/http.HandlerFunc.ServeHTTP(0xf49ed0?, {0xf49ed0?, 0xc0000fe0e0?}, 0xc0000d200e?)
	/usr/lib/golang/src/net/http/server.go:2122 +0x2f
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server.queryAuth.func1({0xf49ed0, 0xc0000fe0e0}, 0xc0000e2300)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/authentication.go:240 +0x1a9
net/http.HandlerFunc.ServeHTTP(0xf46380?, {0xf49ed0?, 0xc0000fe0e0?}, 0x3?)
	/usr/lib/golang/src/net/http/server.go:2122 +0x2f
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server.Serve({0xf49ed0, 0xc0000fe0e0}, 0xc0000e2300)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/router.go:48 +0x9e7
net/http.HandlerFunc.ServeHTTP(0xc0005360c0?, {0xf49ed0?, 0xc0000fe0e0?}, 0xc0000e2300?)
	/usr/lib/golang/src/net/http/server.go:2122 +0x2f
github.com/rs/cors.(*Cors).Handler.func1({0xf49ed0, 0xc0000fe0e0}, 0xc0000e2300)
	/home/uggah/go/pkg/mod/github.com/rs/[email protected]/cors.go:236 +0x1c4
net/http.HandlerFunc.ServeHTTP(0xc0000d2008?, {0xf49ed0?, 0xc0000fe0e0?}, 0x46eb2e?)
	/usr/lib/golang/src/net/http/server.go:2122 +0x2f
net/http.serverHandler.ServeHTTP({0xc00039c570?}, {0xf49ed0, 0xc0000fe0e0}, 0xc0000e2300)
	/usr/lib/golang/src/net/http/server.go:2936 +0x316
net/http.(*conn).serve(0xc0000fa480, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:1995 +0x612
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 60 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a2ef8, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00003c400?, 0xc0001143c0?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00003c400, {0xc0001143c0, 0x2, 0xc})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00003c400, {0xc0001143c0?, 0xc0002b2300?, 0x680846?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc000116060, {0xc0001143c0?, 0x7f82385c3a48?, 0x7f826114aa68?})
	/usr/lib/golang/src/net/net.go:183 +0x45
io.ReadAtLeast({0xf456a0, 0xc000116060}, {0xc0001143c0, 0x2, 0xc}, 0x2)
	/usr/lib/golang/src/io/io.go:332 +0x9a
io.ReadFull(...)
	/usr/lib/golang/src/io/io.go:351
github.com/gobwas/ws.ReadHeader({0xf456a0, 0xc000116060})
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/read.go:25 +0x65
github.com/gobwas/ws/wsutil.(*Reader).NextFrame(0xc0003b20a0)
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/wsutil/reader.go:168 +0x46
github.com/gobwas/ws/wsutil.readData({0x7f823850caf8?, 0xc000116060}, 0x1, 0x3)
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/wsutil/helper.go:258 +0x165
github.com/gobwas/ws/wsutil.ReadData(...)
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/wsutil/helper.go:88
github.com/gobwas/ws/wsutil.ReadClientData({0x7f823850caf8?, 0xc000116060?})
	/home/uggah/go/pkg/mod/github.com/gobwas/[email protected]/wsutil/helper.go:97 +0x2d
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.HandleWebsocket({0xf4cfc0, 0xc000116060})
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:58 +0x377
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server.wsInit({0xf49ed0?, 0xc00066a1c0?}, 0xc000662300)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/http_server.go:65 +0x19e
net/http.HandlerFunc.ServeHTTP(0xf49ed0?, {0xf49ed0?, 0xc00066a1c0?}, 0xc0001b400e?)
	/usr/lib/golang/src/net/http/server.go:2122 +0x2f
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server.queryAuth.func1({0xf49ed0, 0xc00066a1c0}, 0xc000662300)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/authentication.go:240 +0x1a9
net/http.HandlerFunc.ServeHTTP(0xf46380?, {0xf49ed0?, 0xc00066a1c0?}, 0x3?)
	/usr/lib/golang/src/net/http/server.go:2122 +0x2f
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server.Serve({0xf49ed0, 0xc00066a1c0}, 0xc000662300)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/router.go:48 +0x9e7
net/http.HandlerFunc.ServeHTTP(0xc0005360c0?, {0xf49ed0?, 0xc00066a1c0?}, 0xc000662300?)
	/usr/lib/golang/src/net/http/server.go:2122 +0x2f
github.com/rs/cors.(*Cors).Handler.func1({0xf49ed0, 0xc00066a1c0}, 0xc000662300)
	/home/uggah/go/pkg/mod/github.com/rs/[email protected]/cors.go:236 +0x1c4
net/http.HandlerFunc.ServeHTTP(0xc0001b4008?, {0xf49ed0?, 0xc00066a1c0?}, 0x46eb2e?)
	/usr/lib/golang/src/net/http/server.go:2122 +0x2f
net/http.serverHandler.ServeHTTP({0xc0001e88d0?}, {0xf49ed0, 0xc00066a1c0}, 0xc000662300)
	/usr/lib/golang/src/net/http/server.go:2936 +0x316
net/http.(*conn).serve(0xc0003c2480, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:1995 +0x612
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 62 [chan receive]:
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/pubsub.(*Subscriber).Listen(0xc000134370, 0xc0001e8ae0)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/pubsub/subscriber.go:78 +0x6c
created by github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.HandleWebsocket
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:47 +0x32a

goroutine 98 [chan receive]:
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/pubsub.(*Subscriber).Listen(0xc0000a25a0, 0xc00039c780)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/pubsub/subscriber.go:78 +0x6c
created by github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.HandleWebsocket
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:47 +0x32a

goroutine 74 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a2d18, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000418000?, 0xc00014a000?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000418000, {0xc00014a000, 0x1000, 0x1000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000418000, {0xc00014a000?, 0x4dedc6?, 0x0?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0002a4000, {0xc00014a000?, 0x0?, 0xc000408248?})
	/usr/lib/golang/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000408240, {0xc00014a000, 0x1000, 0x1000})
	/usr/lib/golang/src/net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc0002ba000)
	/usr/lib/golang/src/bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc0002ba000, 0x4)
	/usr/lib/golang/src/bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc000406000, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 63 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a2c28, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00003c480?, 0xc000160000?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00003c480, {0xc000160000, 0x1000, 0x1000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00003c480, {0xc000160000?, 0x4dedc6?, 0x0?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc000116088, {0xc000160000?, 0x0?, 0xc000408368?})
	/usr/lib/golang/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc000408360, {0xc000160000, 0x1000, 0x1000})
	/usr/lib/golang/src/net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc0002ba540)
	/usr/lib/golang/src/bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc0002ba540, 0x4)
	/usr/lib/golang/src/bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc0003c26c0, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 64 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a2b38, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc00003c500?, 0xc0001b7000?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc00003c500, {0xc0001b7000, 0x1000, 0x1000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc00003c500, {0xc0001b7000?, 0x4dedc6?, 0x0?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0001160a0, {0xc0001b7000?, 0x0?, 0xc0001e8c08?})
	/usr/lib/golang/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0001e8c00, {0xc0001b7000, 0x1000, 0x1000})
	/usr/lib/golang/src/net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc000110420)
	/usr/lib/golang/src/bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc000110420, 0x4)
	/usr/lib/golang/src/bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc0003c2750, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 79 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a2958, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000384000?, 0xc0001cb000?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000384000, {0xc0001cb000, 0x1000, 0x1000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000384000, {0xc0001cb000?, 0x4dedc6?, 0x0?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc000014008, {0xc0001cb000?, 0x0?, 0xc0004521b8?})
	/usr/lib/golang/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc0004521b0, {0xc0001cb000, 0x1000, 0x1000})
	/usr/lib/golang/src/net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc0002ba600)
	/usr/lib/golang/src/bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc0002ba600, 0x4)
	/usr/lib/golang/src/bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc0000fa1b0, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 77 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a2a48, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000418100?, 0xc0000f8000?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000418100, {0xc0000f8000, 0x1000, 0x1000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000418100, {0xc0000f8000?, 0x4dedc6?, 0x0?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0002a4008, {0xc0000f8000?, 0x0?, 0xc00039c848?})
	/usr/lib/golang/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00039c840, {0xc0000f8000, 0x1000, 0x1000})
	/usr/lib/golang/src/net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc000098d80)
	/usr/lib/golang/src/bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc000098d80, 0x4)
	/usr/lib/golang/src/bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc000406360, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 102 [IO wait]:
internal/poll.runtime_pollWait(0x7f82385a2868, 0x72)
	/usr/lib/golang/src/runtime/netpoll.go:306 +0x89
internal/poll.(*pollDesc).wait(0xc000418180?, 0xc000122000?, 0x0)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
	/usr/lib/golang/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000418180, {0xc000122000, 0x1000, 0x1000})
	/usr/lib/golang/src/internal/poll/fd_unix.go:167 +0x299
net.(*netFD).Read(0xc000418180, {0xc000122000?, 0x4dedc6?, 0x0?})
	/usr/lib/golang/src/net/fd_posix.go:55 +0x29
net.(*conn).Read(0xc0001160d0, {0xc000122000?, 0x0?, 0xc00012e188?})
	/usr/lib/golang/src/net/net.go:183 +0x45
net/http.(*connReader).Read(0xc00012e180, {0xc000122000, 0x1000, 0x1000})
	/usr/lib/golang/src/net/http/server.go:782 +0x171
bufio.(*Reader).fill(0xc0002ba780)
	/usr/lib/golang/src/bufio/bufio.go:106 +0xff
bufio.(*Reader).Peek(0xc0002ba780, 0x4)
	/usr/lib/golang/src/bufio/bufio.go:144 +0x5d
net/http.(*conn).serve(0xc0003c22d0, {0xf4a548, 0xc000504960})
	/usr/lib/golang/src/net/http/server.go:2030 +0x77c
created by net/http.(*Server).Serve
	/usr/lib/golang/src/net/http/server.go:3089 +0x5ed

goroutine 108 [runnable]:
bytes.growSlice.func1()
	/usr/lib/golang/src/bytes/buffer.go:221 +0x57
bytes.growSlice({0xc00042e400, 0x100, 0x3d?}, 0xc0004908e0?)
	/usr/lib/golang/src/bytes/buffer.go:242 +0x125
bytes.(*Buffer).grow(0xc000384080, 0x1)
	/usr/lib/golang/src/bytes/buffer.go:142 +0x14f
bytes.(*Buffer).WriteByte(0xc000384080, 0x5c)
	/usr/lib/golang/src/bytes/buffer.go:280 +0x52
encoding/json.(*encodeState).string(0xc000384080, {0xc0000e4480, 0x477}, 0x1)
	/usr/lib/golang/src/encoding/json/encode.go:1041 +0xeb
encoding/json.stringEncoder(0xc000384080, {0xa7d980?, 0xc00012e020?, 0x422f91?}, {0x0?, 0x0?})
	/usr/lib/golang/src/encoding/json/encode.go:645 +0x20a
encoding/json.structEncoder.encode({{{0xc0003c6480?, 0x42ace5?, 0x1356520?}, 0xc00012e300?}}, 0xc000384080, {0xb05aa0?, 0xc00012e000?, 0x0?}, {0x0, 0x1})
	/usr/lib/golang/src/encoding/json/encode.go:759 +0x1f4
encoding/json.(*encodeState).reflectValue(0xc000384080?, {0xb05aa0?, 0xc00012e000?, 0x4175e7?}, {0x78?, 0x0?})
	/usr/lib/golang/src/encoding/json/encode.go:358 +0x78
encoding/json.(*encodeState).marshal(0x422f91?, {0xb05aa0?, 0xc00012e000?}, {0x68?, 0x73?})
	/usr/lib/golang/src/encoding/json/encode.go:330 +0xfa
encoding/json.Marshal({0xb05aa0, 0xc00012e000})
	/usr/lib/golang/src/encoding/json/encode.go:161 +0xe5
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.Message.Bytes(...)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/message.go:32
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.sendMessage({0xf4cfc0, 0xc000210038}, {{0xb55f6e, 0x5}, {0xc0001143b0, 0xd}, {0xc0000e4480, 0x477}})
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:248 +0xb9
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.handleGET.func1.1()
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:144 +0x28c
sync.(*Once).doSlow(0x10?, 0xc000071400?)
	/usr/lib/golang/src/sync/once.go:74 +0xc2
sync.(*Once).Do(...)
	/usr/lib/golang/src/sync/once.go:65
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.handleGET.func1(0xc000036480?)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:138 +0x85
github.com/Excubitor-Monitoring/Excubitor-Backend/internal/pubsub.(*Subscriber).Listen(0xc0001340f0, 0xc0005144c0)
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/pubsub/subscriber.go:80 +0x17a
created by github.com/Excubitor-Monitoring/Excubitor-Backend/internal/http_server/websocket.handleGET
	/home/uggah/Coding/Git-Repositories/Excubitor/Excubitor-Backend/internal/http_server/websocket/websocket.go:137 +0x26d
exit status 2

Change Auth mechanism for WebSocket

The standard javascript api for websocket connections does not support setting HTTP headers. Therefore, the token authentication has to work through a URL parameter.

Add authentication for WebSocket API using PAM and JWT

Idea: a /auth or /login HTTP endpoint. In the message body the parameters of the authentication are transferred. Then, a JWT is returned with which the user can authenticate themselves to the WebSocket API (i.e. "/ws?token=ey...").

The payload should look like the following:

Request:

{
    "auth_method": "PAM",
    "username": "username",
    "password": "password",
}

Response:

{
    "jwt": "ey..."
}

This way, other authentication methods can be implemented later on. For example:

Request:

{
    "auth_method": "OIDC"
    "token": "ey..."
}

Add a way to get information from pubsub via websocket

Currently, the GET operation is not implemented. This could either be done with a new entire application flow where or by implementing a second type of subscriber that only receives one message from the pubsub architecture.

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.