From 5357502b71ab2badad5ecc2db133c8d01acd819a Mon Sep 17 00:00:00 2001 From: ebosas Date: Fri, 8 Oct 2021 21:40:10 +0300 Subject: [PATCH] Messages page, cache --- cmd/cache/cache.go | 4 ++-- cmd/server/server.go | 21 +++------------------ cmd/server/template/messages.html | 2 +- internal/cache/cache.go | 18 ++++++++++-------- web/react/src/messages.jsx | 9 +++++++-- 5 files changed, 23 insertions(+), 31 deletions(-) diff --git a/cmd/cache/cache.go b/cmd/cache/cache.go index 75f8824..6475022 100644 --- a/cmd/cache/cache.go +++ b/cmd/cache/cache.go @@ -47,11 +47,11 @@ func main() { // updateRedis updates Redis with a new Rabbit message. func updateRedis(d amqp.Delivery, c *redis.Client) bool { - // Add a message, limit to 10 in cache, +1 total count. + // Add a message, limit to 10 in cache, increment total count. if _, err := c.Pipelined(ctx, func(pipe redis.Pipeliner) error { pipe.LPush(ctx, "messages", d.Body) pipe.LTrim(ctx, "messages", 0, 9) - pipe.Incr(ctx, "count") + pipe.Incr(ctx, "total") return nil }); err != nil { log.Fatalf("update redis: %s", err) diff --git a/cmd/server/server.go b/cmd/server/server.go index 7e36c62..5b815e4 100644 --- a/cmd/server/server.go +++ b/cmd/server/server.go @@ -3,7 +3,6 @@ package main import ( "context" "embed" - "encoding/json" "fmt" "html/template" "log" @@ -73,32 +72,18 @@ func handleHome(w http.ResponseWriter, r *http.Request) { // handleMessages handles the messages page. func handleMessages(cr *redis.Client) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { - cacheJSON, err := cache.GetCacheJSON(cr) + cacheData, cacheJSON, err := cache.GetCache(cr) if err != nil { log.Printf("get cache: %s", err) return } - var cached cache.Cache - err = json.Unmarshal([]byte(cacheJSON), &cached) - if err != nil { - log.Printf("unmarshal cache: %s", err) - return - } - data := map[string]interface{}{ - "Data": cached, + "Data": cacheData, "Json": cacheJSON, } - // data := struct { - // Data cache.Cache - // Json string - // }{cached, "Hello"} - - // fmt.Println(data.Json) - - funcMap := template.FuncMap{"fdate": formatTime} + funcMap := template.FuncMap{"ftime": formatTime} t := template.Must(template.New("").Funcs(funcMap).ParseFS(filesTempl, "template/template.html", "template/navbar.html", "template/messages.html")) t.ExecuteTemplate(w, "layout", data) } diff --git a/cmd/server/template/messages.html b/cmd/server/template/messages.html index 1d107b9..d729a5d 100644 --- a/cmd/server/template/messages.html +++ b/cmd/server/template/messages.html @@ -12,7 +12,7 @@ {{ range .Data.Messages }} - {{ .Time | fdate }} + {{ .Time | ftime }} {{ .Text }} {{ .Source }} diff --git a/internal/cache/cache.go b/internal/cache/cache.go index 5926c79..2f77702 100644 --- a/internal/cache/cache.go +++ b/internal/cache/cache.go @@ -17,21 +17,21 @@ type Cache struct { Messages []models.Message `json:"messages"` } -// GetCache gets cached messages from Redis by -// calling GetCacheJSON and unmarshalling the returned JSON. -func GetCache(c *redis.Client) (*Cache, error) { +// GetCache gets cached messages from Redis, +// returns both a Cache struct and a JSON string. +func GetCache(c *redis.Client) (*Cache, string, error) { cacheJSON, err := GetCacheJSON(c) if err != nil { - return &Cache{}, fmt.Errorf("get cache json: %v", err) + return &Cache{}, "", fmt.Errorf("get cache json: %v", err) } var cache Cache err = json.Unmarshal([]byte(cacheJSON), &cache) if err != nil { - return &Cache{}, fmt.Errorf("unmarshal cache: %v", err) + return &Cache{}, "", fmt.Errorf("unmarshal cache: %v", err) } - return &cache, nil + return &cache, cacheJSON, nil } // GetCacheJSON reads cached messages from Redis, returns JSON. @@ -41,8 +41,10 @@ func GetCacheJSON(c *redis.Client) (string, error) { return "", fmt.Errorf("lrange redis: %v", err) } - total, err := c.Get(context.Background(), "count").Result() - if err != nil { + total, err := c.Get(context.Background(), "total").Result() + if err == redis.Nil { + total = "0" + } else if err != nil { return "", fmt.Errorf("get redis: %v", err) } diff --git a/web/react/src/messages.jsx b/web/react/src/messages.jsx index 6567b9c..cdef913 100644 --- a/web/react/src/messages.jsx +++ b/web/react/src/messages.jsx @@ -31,9 +31,9 @@ function Messages() { ) }, []); - if (error){ + if (error) { return
Something went wrong
; - } else if (!isLoaded){ + } else if (!isLoaded) { return
Loading...
; } else { return ( @@ -55,6 +55,11 @@ function Messages() { {msg.source} ))} + {!messages.length && + + No messages + + }