feat: add timestamps to computer graph data
This commit is contained in:
parent
e97b271bd7
commit
43628a1a66
4 changed files with 52 additions and 20 deletions
|
|
@ -3,6 +3,7 @@ package handler
|
|||
import (
|
||||
"backend/internal/model"
|
||||
"backend/internal/service"
|
||||
"backend/internal/worker"
|
||||
"encoding/json"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
|
|
@ -35,7 +36,6 @@ func HandleComputerWebSocket(w http.ResponseWriter, r *http.Request) {
|
|||
slog.Info("WebSocket connection established!")
|
||||
service.ComputerData.Online = true
|
||||
|
||||
// Read messages
|
||||
for {
|
||||
_, message, err := conn.ReadMessage()
|
||||
if err != nil {
|
||||
|
|
@ -50,7 +50,7 @@ func HandleComputerWebSocket(w http.ResponseWriter, r *http.Request) {
|
|||
continue
|
||||
}
|
||||
|
||||
service.AddComputerData(clientMessage)
|
||||
worker.QueuedClientMessage = clientMessage
|
||||
slog.Info("Recieved message", slog.Any("message", clientMessage))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,19 @@
|
|||
package model
|
||||
|
||||
import "time"
|
||||
|
||||
type ComputerWebSocketMessage struct {
|
||||
Cpu uint8 `json:"cpu"`
|
||||
Ram uint8 `json:"ram"`
|
||||
}
|
||||
|
||||
type ComputerGraphData struct {
|
||||
Online bool `json:"online"`
|
||||
Cpu []int `json:"cpu"`
|
||||
Ram []int `json:"ram"`
|
||||
type ComputerData struct {
|
||||
Online bool `json:"online"`
|
||||
Graph []ComputerGraphData `json:"graph"`
|
||||
}
|
||||
|
||||
type ComputerGraphData struct {
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
Cpu int `json:"cpu"`
|
||||
Ram int `json:"ram"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,19 +2,36 @@ package service
|
|||
|
||||
import (
|
||||
"backend/internal/model"
|
||||
"time"
|
||||
)
|
||||
|
||||
var ComputerData model.ComputerGraphData = model.ComputerGraphData{
|
||||
Cpu: make([]int, 50),
|
||||
Ram: make([]int, 50),
|
||||
var ComputerData model.ComputerData = model.ComputerData{
|
||||
Online: false,
|
||||
Graph: initializeGraphData(),
|
||||
}
|
||||
|
||||
func initializeGraphData() []model.ComputerGraphData {
|
||||
graphData := make([]model.ComputerGraphData, 50)
|
||||
|
||||
for i := 0; i < 50; i++ {
|
||||
graphData[i] = model.ComputerGraphData{
|
||||
Timestamp: time.Now().Truncate(1 * time.Minute).Add(time.Duration(-50+i) * time.Minute),
|
||||
Cpu: 0,
|
||||
Ram: 0,
|
||||
}
|
||||
}
|
||||
|
||||
return graphData
|
||||
}
|
||||
|
||||
func AddComputerData(clientMessage model.ComputerWebSocketMessage) {
|
||||
ComputerData.Cpu = append(ComputerData.Cpu, int(clientMessage.Cpu))
|
||||
ComputerData.Ram = append(ComputerData.Ram, int(clientMessage.Ram))
|
||||
ComputerData.Graph = append(ComputerData.Graph, model.ComputerGraphData{
|
||||
Timestamp: time.Now().Truncate(time.Minute).Add(-time.Minute),
|
||||
Cpu: int(clientMessage.Cpu),
|
||||
Ram: int(clientMessage.Ram),
|
||||
})
|
||||
|
||||
if len(ComputerData.Cpu) > 50 {
|
||||
ComputerData.Cpu = ComputerData.Cpu[1:]
|
||||
ComputerData.Ram = ComputerData.Ram[1:]
|
||||
if len(ComputerData.Graph) > 50 {
|
||||
ComputerData.Graph = ComputerData.Graph[1:]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,15 +7,23 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
var QueuedClientMessage model.ComputerWebSocketMessage
|
||||
|
||||
func StartComputerWorker() {
|
||||
slog.Info("Starting computer worker...")
|
||||
|
||||
for range time.Tick(1 * time.Minute) {
|
||||
if !service.ComputerData.Online {
|
||||
service.AddComputerData(model.ComputerWebSocketMessage{
|
||||
Cpu: 0,
|
||||
Ram: 0,
|
||||
})
|
||||
for range time.Tick(1 * time.Second) {
|
||||
now := time.Now()
|
||||
|
||||
if now.Second() == 0 {
|
||||
if !service.ComputerData.Online {
|
||||
service.AddComputerData(model.ComputerWebSocketMessage{
|
||||
Cpu: 0,
|
||||
Ram: 0,
|
||||
})
|
||||
} else {
|
||||
service.AddComputerData(QueuedClientMessage)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue