feat: add timestamps to computer graph data

This commit is contained in:
trafficlunar 2024-11-30 00:01:01 +00:00
parent e97b271bd7
commit 43628a1a66
4 changed files with 52 additions and 20 deletions

View file

@ -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))
}
}

View file

@ -1,12 +1,19 @@
package model
import "time"
type ComputerWebSocketMessage struct {
Cpu uint8 `json:"cpu"`
Ram uint8 `json:"ram"`
}
type ComputerGraphData struct {
type ComputerData struct {
Online bool `json:"online"`
Cpu []int `json:"cpu"`
Ram []int `json:"ram"`
Graph []ComputerGraphData `json:"graph"`
}
type ComputerGraphData struct {
Timestamp time.Time `json:"timestamp"`
Cpu int `json:"cpu"`
Ram int `json:"ram"`
}

View file

@ -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:]
}
}

View file

@ -7,15 +7,23 @@ import (
"time"
)
var QueuedClientMessage model.ComputerWebSocketMessage
func StartComputerWorker() {
slog.Info("Starting computer worker...")
for range time.Tick(1 * time.Minute) {
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)
}
}
}
}