From 5cd22318f1d0f9ed84e9fae98d6f332e15f70f41 Mon Sep 17 00:00:00 2001 From: Lukasz Raczylo Date: Fri, 3 Dec 2021 09:12:59 +0000 Subject: [PATCH] Add environment variables to steer the query cache. --- README.md | 5 ++++- gql.go | 31 +++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 628eb7d..175c09a 100644 --- a/README.md +++ b/README.md @@ -23,12 +23,15 @@ Therefore, I present you the simple client to which you can copy & paste your gr * Executing GraphQL queries as they are, without types declaration * HTTP2 support! * Support for additional headers +* Query cache ## Usage example ### Environment variables * `GRAPHQL_ENDPOINT` - Your GraphQL endpoint. Default: `http://127.0.0.1:9090/v1/graphql` +* `GRAPHQL_CACHE` - Should the query cache be enabled? Default: `false` +* `GRAPHQL_CACHE_TTL` - Cache TTL in seconds for SELECT type of queries. Default: `5` * `LOG_LEVEL` - Logging level. Default: `info` ### Example reader code @@ -37,7 +40,7 @@ Therefore, I present you the simple client to which you can copy & paste your gr ```go import ( fmt - gql "github.com/lukaszraczylo/simple-gql-client" + gql "github.com/lukaszraczylo/go-simple-graphql" ) headers := map[string]interface{}{ diff --git a/gql.go b/gql.go index 9b07225..e7da315 100644 --- a/gql.go +++ b/gql.go @@ -18,6 +18,7 @@ import ( "net" "net/http" "os" + "strconv" "time" "github.com/allegro/bigcache/v3" @@ -49,6 +50,32 @@ func pickGraphqlEndpoint() (graphqlEndpoint string) { return graphqlEndpoint } +func setCacheTTL() int { + value, present := os.LookupEnv("GRAPHQL_CACHE_TTL") + if present && value != "" { + i, err := strconv.Atoi(value) + if err != nil { + panic("Invalid value for query cache ttl") + } + return int(i) + } else { + return 5 + } +} + +func setCacheEnabled() bool { + value, present := os.LookupEnv("GRAPHQL_CACHE") + if present && value != "" { + b, err := strconv.ParseBool(value) + if err != nil { + panic("Invalid value for query cache") + } + return b + } else { + return false + } +} + func NewConnection() *GraphQL { return &GraphQL{ Endpoint: pickGraphqlEndpoint(), @@ -63,13 +90,13 @@ func NewConnection() *GraphQL { }, }, Log: logging.NewLogger(), - Cache: false, + Cache: setCacheEnabled(), CacheStore: setupCache(), } } func setupCache() *bigcache.BigCache { - cache, err := bigcache.NewBigCache(bigcache.DefaultConfig(10 * time.Second)) + cache, err := bigcache.NewBigCache(bigcache.DefaultConfig(time.Duration(setCacheTTL()) * time.Second)) if err != nil { panic("Error creating cache: " + err.Error()) }