aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorMitchell Riedstra <mitch@riedstra.dev>2021-10-24 15:57:32 -0400
committerMitchell Riedstra <mitch@riedstra.dev>2021-10-24 16:01:05 -0400
commit235b8f871fdfa35f9595268d194d28a3de655ec0 (patch)
tree46f562fddffd38ee10d5e3d858dd80c088879689 /cmd
parente0d4a3e50921dc07e23ef9aa107bdc78b3adf176 (diff)
downloadgo-website-235b8f871fdfa35f9595268d194d28a3de655ec0.tar.gz
go-website-235b8f871fdfa35f9595268d194d28a3de655ec0.tar.xz
Unix sockets for redis. Page use FS interface. Clear redis func.v0.0.16
Additionally, Funcs can be passed in.
Diffstat (limited to 'cmd')
-rw-r--r--cmd/server/app.go19
-rw-r--r--cmd/server/handlers.go9
-rw-r--r--cmd/server/main.go11
3 files changed, 37 insertions, 2 deletions
diff --git a/cmd/server/app.go b/cmd/server/app.go
index c4992ae..4f62a09 100644
--- a/cmd/server/app.go
+++ b/cmd/server/app.go
@@ -2,6 +2,7 @@ package main
import (
"fmt"
+ "log"
"os"
"github.com/gomodule/redigo/redis"
@@ -72,3 +73,21 @@ func loadConf(fn string) (*App, error) {
return app, nil
}
+
+// ClearRedis is a little helper function that allows us to easily clear
+// the redis cache at runtime.
+func (a *App) ClearRedis() error {
+ if a.redisPool == nil {
+ return nil
+ }
+
+ client := a.redisPool.Get()
+ defer client.Close()
+
+ _, err := client.Do("DEL", a.RedisKey)
+ if err != nil {
+ log.Println("Encountered error clearing redis cache: ", err)
+ }
+
+ return fmt.Errorf("clearing redis: %w", err)
+}
diff --git a/cmd/server/handlers.go b/cmd/server/handlers.go
index 61bb623..205d462 100644
--- a/cmd/server/handlers.go
+++ b/cmd/server/handlers.go
@@ -14,13 +14,18 @@ func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) {
rtr := mux.NewRouter()
rtr.HandleFunc(a.ReIndexPath, a.RebuildIndexHandler)
rtr.PathPrefix("/static/").Handler(a.StaticHandler())
- rtr.PathPrefix(fmt.Sprintf("/%s/{tag}", a.FeedPrefix)).HandlerFunc(
- a.FeedHandler)
if a.redisPool != nil {
+ rtr.PathPrefix(fmt.Sprintf("/%s/{tag}", a.FeedPrefix)).Handler(
+ rediscache.HandleWithParams(a.redisPool, a.RedisKey,
+ http.HandlerFunc(a.FeedHandler)))
+
rtr.PathPrefix("/").Handler(rediscache.Handle(
a.redisPool, a.RedisKey, http.HandlerFunc(a.PageHandler)))
} else {
+ rtr.PathPrefix(fmt.Sprintf("/%s/{tag}", a.FeedPrefix)).HandlerFunc(
+ a.FeedHandler)
+
rtr.PathPrefix("/").Handler(http.HandlerFunc(a.PageHandler))
}
diff --git a/cmd/server/main.go b/cmd/server/main.go
index 21f7031..912cba0 100644
--- a/cmd/server/main.go
+++ b/cmd/server/main.go
@@ -6,6 +6,8 @@ import (
"log"
"net/http"
"os"
+ "strings"
+ "text/template"
"time"
"github.com/gomodule/redigo/redis"
@@ -73,6 +75,11 @@ func main() { //nolint:funlen
MaxActive: 12000, //nolint:gomnd
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", *redisAddr)
+
+ if strings.HasPrefix(*redisAddr, "unix:") {
+ c, err = redis.Dial("unix", strings.TrimPrefix(*redisAddr, "unix:"))
+ }
+
if err != nil {
log.Println("Redis dial error: ", err)
}
@@ -87,6 +94,10 @@ func main() { //nolint:funlen
os.Stderr.Write(b)
}
+ page.Funcs = template.FuncMap{
+ "ClearRedis": app.ClearRedis,
+ }
+
srv := &http.Server{
Handler: app,
Addr: *listen,