summaryrefslogtreecommitdiff
path: root/srv/src/cfg
diff options
context:
space:
mode:
Diffstat (limited to 'srv/src/cfg')
-rw-r--r--srv/src/cfg/radix_client.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/srv/src/cfg/radix_client.go b/srv/src/cfg/radix_client.go
new file mode 100644
index 0000000..55ff5d7
--- /dev/null
+++ b/srv/src/cfg/radix_client.go
@@ -0,0 +1,55 @@
+package cfg
+
+import (
+ "context"
+ "fmt"
+
+ "github.com/mediocregopher/mediocre-go-lib/v2/mctx"
+ "github.com/mediocregopher/radix/v4"
+)
+
+// RadixClient is a single redis client which can be configured.
+type RadixClient struct {
+ radix.Client
+
+ proto, addr string
+ poolSize int
+}
+
+// SetupCfg implement the cfg.Cfger interface.
+func (c *RadixClient) SetupCfg(cfg *Cfg) {
+
+ cfg.StringVar(&c.proto, "redis-proto", "tcp", "Network protocol to connect to redis over, can be tcp or unix")
+ cfg.StringVar(&c.addr, "redis-addr", "127.0.0.1:6379", "Address redis is expected to listen on")
+ cfg.IntVar(&c.poolSize, "redis-pool-size", 5, "Number of connections in the redis pool to keep")
+
+ cfg.OnInit(func(ctx context.Context) error {
+ client, err := (radix.PoolConfig{
+ Size: c.poolSize,
+ }).New(
+ ctx, c.proto, c.addr,
+ )
+
+ if err != nil {
+ return fmt.Errorf(
+ "initializing redis pool of size %d at %s://%s: %w",
+ c.poolSize, c.proto, c.addr, err,
+ )
+ }
+
+ c.Client = client
+ return nil
+ })
+}
+
+// Annotate implements mctx.Annotator interface.
+func (c *RadixClient) Annotate(a mctx.Annotations) {
+ a["redisProto"] = c.proto
+ a["redisAddr"] = c.addr
+ a["redisPoolSize"] = c.poolSize
+}
+
+// Close cleans up the radix client.
+func (c *RadixClient) Close() error {
+ return c.Client.Close()
+}