@@ -22,23 +22,26 @@ var (
2222type FailedQueryCache struct {
2323 regex * regexp.Regexp
2424 errorExtract * regexp.Regexp
25- LruCache * lru.Cache
25+ lruCache * lru.Cache
2626}
2727
28- func NewFailedQueryCache (capacity int ) (* FailedQueryCache , string ) {
28+ func NewFailedQueryCache (capacity int ) (* FailedQueryCache , error ) {
2929 regex := regexp .MustCompile (`[\s\n\t]+` )
3030 errorExtract := regexp .MustCompile (`Code\((\d+)\)` )
3131 lruCache , err := lru .New (capacity )
32- message := ""
3332 if err != nil {
3433 lruCache = nil
35- message = fmt .Sprintf ("Failed to create lru cache: %s" , err )
34+ err = fmt .Errorf ("Failed to create lru cache: %s" , err )
35+ return nil , err
3636 }
37- return & FailedQueryCache {regex , errorExtract , lruCache }, message
37+ return & FailedQueryCache {
38+ regex : regex ,
39+ errorExtract : errorExtract ,
40+ lruCache : lruCache }, err
3841}
3942
4043// UpdateFailedQueryCache returns true if query is cached so that callsite can increase counter, returns message as a string for callsite to log outcome
41- func ( f * FailedQueryCache ) UpdateFailedQueryCache (err error , queryExpressionNormalized string , queryExpressionRangeLength int , lruCache * lru.Cache ) (bool , string ) {
44+ func updateFailedQueryCache (err error , queryExpressionNormalized string , queryExpressionRangeLength int , lruCache * lru.Cache ) (bool , string ) {
4245 // Extracting error code from error string.
4346 codeExtract := f .errorExtract .FindStringSubmatch (err .Error ())
4447
@@ -100,7 +103,7 @@ func (f *FailedQueryCache) UpdateFailedQueryCache(err error, queryExpressionNorm
100103}
101104
102105// QueryHitCache checks if the lru cache is hit and returns whether to increment counter for cache hits along with appropriate message.
103- func ( f * FailedQueryCache ) QueryHitCache (queryExpressionNormalized string , queryExpressionRangeLength int , lruCache * lru.Cache ) (bool , string ) {
106+ func queryHitCache (queryExpressionNormalized string , queryExpressionRangeLength int , lruCache * lru.Cache ) (bool , string ) {
104107 if value , ok := lruCache .Get (queryExpressionNormalized ); ok && value .(int ) >= queryExpressionRangeLength {
105108 message := fmt .Sprintf (
106109 `%s: %s, %s: %s, %s: %d` , "msg" , "Retrieved query from cache" ,
@@ -124,7 +127,7 @@ func isCacheableError(statusCode int) bool {
124127}
125128
126129// GetQueryRangeSeconds Time range length for queries, if either of "start" or "end" are not present, return 0.
127- func GetQueryRangeSeconds (query url.Values ) int {
130+ func getQueryRangeSeconds (query url.Values ) int {
128131 start , err := strconv .Atoi (query .Get ("start" ))
129132 if err != nil {
130133 return 0
@@ -136,14 +139,20 @@ func GetQueryRangeSeconds(query url.Values) int {
136139 return end - start
137140}
138141
139- func ( f * FailedQueryCache ) NormalizeQueryString (query url.Values ) string {
142+ func normalizeQueryString (query url.Values ) string {
140143 return f .regex .ReplaceAllString (query .Get ("query" ), " " )
141144}
142145
143- func (f * FailedQueryCache ) CallUpdateFailedQueryCache (err error , queryExpressionNormalized string , queryExpressionRangeLength int ) (bool , string ) {
144- if f == nil {
145- return false , "Failed query cache is not enabled"
146- }
147- success , message := f .UpdateFailedQueryCache (err , queryExpressionNormalized , queryExpressionRangeLength , f .LruCache )
146+ func (f * FailedQueryCache ) CallUpdateFailedQueryCache (err error , query url.Values ) (bool , string ) {
147+ queryExpressionNormalized := normalizeQueryString (query )
148+ queryExpressionRangeLength := getQueryRangeSeconds (query )
149+ success , message := updateFailedQueryCache (err , queryExpressionNormalized , queryExpressionRangeLength , f .lruCache )
148150 return success , message
149151}
152+
153+ func (f * FailedQueryCache ) CallQueryHitCache (query url.Values ) (bool , string ) {
154+ queryExpressionNormalized := normalizeQueryString (query )
155+ queryExpressionRangeLength := getQueryRangeSeconds (query )
156+ cached , message := queryHitCache (queryExpressionNormalized , queryExpressionRangeLength , f .lruCache )
157+ return cached , message
158+ }
0 commit comments