Compare commits

...
5 Commits
4 changed files with 25 additions and 6 deletions
+1 -1
View File
@@ -34,7 +34,7 @@ Therefore, I present you the simple client to which you can copy & paste your gr
* `GRAPHQL_ENDPOINT` - Your GraphQL endpoint. Default: `http://127.0.0.1:9090/v1/graphql`
* `GRAPHQL_CACHE_ENABLED` - Should the query cache be enabled? Default: `false`
* `GRAPHQL_CACHE_TTL` - Cache TTL in seconds for SELECT type of queries. Default: `5`
* `GRAPHQL_OUTPUT` - Output format. Default: `byte`, available: `byte`, `string`
* `GRAPHQL_OUTPUT` - Output format. Default: `string`, available: `byte`, `string`, `mapstring`
* `LOG_LEVEL` - Logging level. Default: `info` available: `debug`, `info`, `warn`, `error`
* `GRAPHQL_RETRIES_ENABLE` - Should retries be enabled? Default: `true`
* `GRAPHQL_RETRIES_NUMBER` - Number of retries: Default: `1`
+4
View File
@@ -98,3 +98,7 @@ func NewConnection() *BaseClient {
func (b *BaseClient) SetEndpoint(endpoint string) {
b.endpoint = endpoint
}
func (b *BaseClient) SetOutput(output string) {
b.responseType = output
}
+12 -5
View File
@@ -80,10 +80,13 @@ func (c *BaseClient) Query(queryContent string, queryVariables interface{}, quer
if len(queryHeaders) > 0 {
cacheBaseClient = reflect.ValueOf(*c).Interface().(BaseClient)
queryHeaders = c.parseQueryHeaders(queryHeaders)
defer func() {
*c = cacheBaseClient
}()
}
if c.cache.enabled {
queryHash = strutil.Md5(query.compiledQuery)
queryHash = strutil.Md5(fmt.Sprintf("%s-%+v", query.compiledQuery, queryHeaders))
c.Logger.Debug(c, "Hash calculated;", "hash:", queryHash)
cachedResponse = c.cacheLookup(queryHash)
@@ -111,15 +114,19 @@ func (c *BaseClient) Query(queryContent string, queryVariables interface{}, quer
c.cache.client.Set(queryHash, jsonData)
}
if len(queryHeaders) > 0 {
*c = cacheBaseClient
}
return c.decodeResponse(jsonData), err
}
func (c *BaseClient) decodeResponse(jsonData []byte) any {
switch c.responseType {
case "mapstring":
var response map[string]interface{}
err := json.Unmarshal(jsonData, &response)
if err != nil {
c.Logger.Error(c, "Error while converting to map[string]interface{};", "error", err.Error())
return nil
}
return response
case "string":
return helpers.BytesToString(jsonData)
case "byte":
+8
View File
@@ -5,6 +5,7 @@ import (
"fmt"
"io/ioutil"
"net/http"
"time"
"github.com/avast/retry-go/v4"
)
@@ -50,6 +51,13 @@ func (c *BaseClient) executeQuery(query []byte, headers any) (result any, err er
return nil
},
retry.OnRetry(func(n uint, err error) {
c.Logger.Error(c, "Retrying query", "error", err.Error())
}),
retry.Attempts(uint(c.retries.max)),
retry.DelayType(retry.BackOffDelay),
retry.Delay(time.Duration(c.retries.delay)*time.Second),
retry.LastErrorOnly(true),
)
if len(queryResult.Errors) > 0 {