diff --git a/dist/script.js b/dist/script.js
index 4a0e81e..12e1b42 100644
--- a/dist/script.js
+++ b/dist/script.js
@@ -86,14 +86,9 @@ function addMessage(messageType, serviceType, serviceName, message, timestamp) {
deleteOldMessages()
}
-function addViewerInfoMessage(joined, timestamp) {
+function addCustomMessage(message) {
let li = document.createElement("li")
-
- if (joined) {
- li.innerHTML = formatDate(timestamp) + "A client has joined"
- } else {
- li.innerHTML = formatDate(timestamp) + "A client has left"
- }
+ li.innerHTML = message
messages.appendChild(li)
@@ -104,6 +99,14 @@ function addViewerInfoMessage(joined, timestamp) {
deleteOldMessages()
}
+function addViewerInfoMessage(joined, timestamp) {
+ if (joined) {
+ addCustomMessage(formatDate(timestamp) + "A client has joined")
+ } else {
+ addCustomMessage(formatDate(timestamp) + "A client has left")
+ }
+}
+
function deleteOldMessages() {
if (messages.childElementCount > 500) {
messages.removeChild(messages.getElementsByTagName("li")[0])
@@ -195,18 +198,28 @@ function connectWS() {
serviceType = data.ServiceType
timestamp = data.Timestamp
- console.log(timestamp)
-
- if (messageType == 100 && serviceName == 100) {
+ if (messageType == 100 && serviceName == 100) { // viewer count
viewersCount.innerHTML = data.Msg + (data.Msg == 1 ? " viewer" : " viewers")
addViewerInfoMessage(serviceType == 1, timestamp)
+ } else if (messageType == 101 && serviceName == 101 && serviceType == 101) {
+ lastMessages = JSON.parse(data.Msg)
+
+ if (lastMessages != null && lastMessages.length > 0) {
+ addCustomMessage("––––––––– START OF OLD MESSAGES –––––––––")
+
+ for (const i in lastMessages) {
+ addMessage(lastMessages[i].MessageType, lastMessages[i].ServiceType, lastMessages[i].ServiceName, lastMessages[i].Msg, lastMessages[i].Timestamp)
+ }
+
+ addCustomMessage("––––––––– END OF OLD MESSAGES –––––––––")
+ }
} else {
if (serviceType == 0 && !checkboxAlpha.checked) return
if (serviceType == 1 && !checkboxBeta.checked) return
if (serviceType == 2 && !checkboxStable.checked) return
- addMessage(messageType, serviceType, serviceName, data["Msg"], timestamp)
+ addMessage(messageType, serviceType, serviceName, data.Msg, timestamp)
}
}
diff --git a/main.go b/main.go
index 8002854..d0e45f9 100644
--- a/main.go
+++ b/main.go
@@ -18,8 +18,6 @@
package main
import (
- "time"
-
"clickandjoin.app/managementsystem/modules/config"
"clickandjoin.app/managementsystem/modules/rabbitmq"
"clickandjoin.app/managementsystem/modules/scylladb"
@@ -79,7 +77,5 @@ func main() {
router.SetupRoutes(app)
- gocnjhelper.LogInfof("%s", time.Now().UnixMilli())
-
app.Listen(cfg.Host + ":" + cfg.Port)
}
diff --git a/modules/cache/cache.go b/modules/cache/cache.go
index 903ba9d..ee98db0 100644
--- a/modules/cache/cache.go
+++ b/modules/cache/cache.go
@@ -4,35 +4,59 @@ import (
"sync"
"clickandjoin.app/managementsystem/modules/structs"
+ "clickandjoin.app/managementsystem/modules/utils"
+ gocnjhelper "git.clickandjoin.umbach.dev/ClickandJoin/go-cnj-helper"
)
var socketClients = make(map[string]*structs.SocketClient)
-var mu sync.RWMutex
+var muS sync.RWMutex
func AddSocketClient(clientId string, socketClient *structs.SocketClient) {
- mu.Lock()
+ muS.Lock()
socketClients[clientId] = socketClient
- mu.Unlock()
+ muS.Unlock()
}
func DeleteClient(clientId string) {
- mu.Lock()
+ muS.Lock()
delete(socketClients, clientId)
- mu.Unlock()
+ muS.Unlock()
}
func GetSocketClients() map[string]*structs.SocketClient {
- mu.RLock()
- defer mu.RUnlock()
+ muS.RLock()
+ defer muS.RUnlock()
return socketClients
}
func GetSocketClient(clientId string) (socketClient *structs.SocketClient, ok bool) {
- mu.RLock()
- defer mu.RUnlock()
+ muS.RLock()
+ defer muS.RUnlock()
client, ok := socketClients[clientId]
return client, ok
}
+
+var lastLogMessages []gocnjhelper.RabbitMqLogMessage
+var muL sync.RWMutex
+
+func AddLastLogMessage(rabbitMqLogMessage gocnjhelper.RabbitMqLogMessage) {
+ muL.Lock()
+
+ if len(lastLogMessages) > utils.CachedLastLogMessages {
+ lastLogMessages = lastLogMessages[1:]
+ }
+
+ lastLogMessages = append(lastLogMessages, rabbitMqLogMessage)
+
+ muL.Unlock()
+}
+
+func GetlastLogMessages() []gocnjhelper.RabbitMqLogMessage {
+ muL.RLock()
+ defer muL.RUnlock()
+
+ return lastLogMessages
+}
diff --git a/modules/rabbitmq/helper.go b/modules/rabbitmq/helper.go
index ed597e0..cde12e9 100644
--- a/modules/rabbitmq/helper.go
+++ b/modules/rabbitmq/helper.go
@@ -3,10 +3,10 @@ package rabbitmq
import (
"encoding/json"
+ "clickandjoin.app/managementsystem/modules/cache"
"clickandjoin.app/managementsystem/socketclients"
gocnjhelper "git.clickandjoin.umbach.dev/ClickandJoin/go-cnj-helper"
amqp "github.com/rabbitmq/amqp091-go"
- "github.com/rs/zerolog/log"
)
func LogsMessagesHandling() {
@@ -50,10 +50,10 @@ func LogsMessagesHandling() {
continue
}
- log.Info().Msgf("msg", logMessage)
-
socketclients.BroadcastLogMessage(logMessage)
+ cache.AddLastLogMessage(logMessage)
+
msg.Ack(false)
}
}
diff --git a/modules/utils/definitions.go b/modules/utils/definitions.go
index d4b585b..fca1add 100644
--- a/modules/utils/definitions.go
+++ b/modules/utils/definitions.go
@@ -1 +1,3 @@
package utils
+
+const CachedLastLogMessages = 499 // Number of messages held in the cache and sent to new clients to receive the latest messages
diff --git a/readme.md b/readme.md
index aa1969d..4dffe67 100644
--- a/readme.md
+++ b/readme.md
@@ -1,4 +1,6 @@
-# Management System
+# Definitions that are specified in the app
+
+[Click here to see the definitions](modules/utils/definitions.go)
## Tasks
- Admin Dashboard
diff --git a/socketserver/hub.go b/socketserver/hub.go
index ce90e41..8eea9f4 100644
--- a/socketserver/hub.go
+++ b/socketserver/hub.go
@@ -1,6 +1,9 @@
package socketserver
import (
+ "encoding/json"
+ "time"
+
"clickandjoin.app/managementsystem/modules/cache"
"clickandjoin.app/managementsystem/modules/structs"
"clickandjoin.app/managementsystem/socketclients"
@@ -24,6 +27,22 @@ func RunHub() {
cache.AddSocketClient(newSocketClient.ClientId, newSocketClient)
socketclients.BroadcastViewersCountMessage(1)
+ if socketClient, ok := cache.GetSocketClient(newSocketClient.ClientId); ok {
+ lastMessages, err := json.Marshal(cache.GetlastLogMessages())
+
+ if err != nil {
+ gocnjhelper.LogDebugf("Failed to marshal last messages, err: %s")
+ continue
+ }
+
+ socketClient.SendMessage(gocnjhelper.RabbitMqLogMessage{
+ MessageType: 101,
+ ServiceName: 101,
+ ServiceType: 101,
+ Msg: string(lastMessages),
+ Timestamp: time.Now().Unix(),
+ })
+ }
case data := <-broadcast:
gocnjhelper.LogDebugf("RECEIVED WEBSOCKET MESSAGE: %s", data.Msg)