@@ -10,15 +10,17 @@ import (
10
10
"graphql_cache/utils/ast_utils"
11
11
"graphql_cache/utils/test_endpoints"
12
12
"strings"
13
+ "time"
13
14
14
15
"github.com/vektah/gqlparser/ast"
15
16
)
16
17
17
- var cacheStore = cache .NewInMemoryCache ()
18
- var recordCacheStore = cache .NewInMemoryCache ()
19
- var queryCacheStore = cache .NewInMemoryCache ()
18
+ var cacheStore = cache .NewRedisCache ()
19
+ var recordCacheStore = cache .NewRedisCache ()
20
+ var queryCacheStore = cache .NewRedisCache ()
20
21
21
22
func ProxyToCachedAPI () []byte {
23
+ start := time .Now ()
22
24
copiedRequestBody := test_endpoints .REQUEST_BODY
23
25
// Parse the query
24
26
@@ -29,10 +31,13 @@ func ProxyToCachedAPI() []byte {
29
31
return nil
30
32
}
31
33
34
+ fmt .Println ("time taken to generate AST " , time .Since (start ))
35
+
32
36
cachedResponse , err := ParseASTBuildResponse (astQuery , copiedRequestBody )
33
37
if err == nil && cachedResponse != nil {
34
38
fmt .Println ("serving response from cache..." )
35
39
br , _ := json .Marshal (cachedResponse )
40
+ fmt .Println ("time taken to serve response from cache " , time .Since (start ))
36
41
return RemoveTypenameFromResponse (br )
37
42
}
38
43
@@ -42,6 +47,8 @@ func ProxyToCachedAPI() []byte {
42
47
return nil
43
48
}
44
49
50
+ fmt .Println ("time taken to transform body " , time .Since (start ))
51
+
45
52
copiedRequestBody ["query" ] = transformedBody
46
53
47
54
response := test_endpoints .GetSampleAPIResponse (copiedRequestBody )
@@ -51,12 +58,16 @@ func ProxyToCachedAPI() []byte {
51
58
fmt .Println ("Error unmarshalling response:" , err )
52
59
}
53
60
61
+ fmt .Println ("time taken to get response from API " , time .Since (start ))
62
+
54
63
astWithTypes , err := ast_utils .GetASTFromQuery (transformedBody )
55
64
if err != nil {
56
65
fmt .Println ("Error parsing query:" , err )
57
66
return nil
58
67
}
59
68
69
+ fmt .Println ("time taken to generate AST with types " , time .Since (start ))
70
+
60
71
reqVariables := copiedRequestBody ["variables" ]
61
72
variables := make (map [string ]interface {})
62
73
if reqVariables != nil {
@@ -73,13 +84,17 @@ func ProxyToCachedAPI() []byte {
73
84
}
74
85
}
75
86
87
+ fmt .Println ("time taken to build response key " , time .Since (start ))
88
+
76
89
// go through the response. Every object that has a __typename field, and an id field cache it in the format of typename:id
77
90
// for example, if the response has an object with __typename: "Organisation" and id: "1234", cache it as Organisation:1234
78
91
// if the object has a nested object with __typename: "User" and id: "5678", cache
79
92
// it as User:5678
80
93
81
94
CacheResponse ("data" , responseMap , nil )
82
95
96
+ fmt .Println ("time taken to cache response " , time .Since (start ))
97
+
83
98
cacheStore .Debug ("cacheStore" )
84
99
recordCacheStore .Debug ("recordCacheStore" )
85
100
queryCacheStore .Debug ("queryCacheStore" )
@@ -93,6 +108,7 @@ func ProxyToCachedAPI() []byte {
93
108
// queryCacheState, _ := queryCacheStore.JSON()
94
109
// fmt.Println(string(queryCacheState))
95
110
111
+ fmt .Println ("time taken to finish completely " , time .Since (start ))
96
112
return RemoveTypenameFromResponse (response )
97
113
}
98
114
@@ -230,48 +246,49 @@ func TraverseResponseFromKey(response interface{}) (interface{}, error) {
230
246
}
231
247
return TraverseResponseFromKey (response )
232
248
}
233
- }
234
- responseMap := response .(map [string ]interface {})
235
- for key , value := range responseMap {
236
- if val , ok := value .(string ); ok { // handle other data types, arrays and objects
237
- if strings .HasPrefix (val , "gql:" ) {
238
- nestedResponse , err := TraverseResponseFromKey (val )
239
- if err != nil {
240
- fmt .Println ("Error traversing nested response from key:" , val , " " , err )
241
- return nil , err
249
+ } else if responseMap , ok := response .(map [string ]interface {}); ok {
250
+ for key , value := range responseMap {
251
+ if val , ok := value .(string ); ok { // handle other data types, arrays and objects
252
+ if strings .HasPrefix (val , "gql:" ) {
253
+ nestedResponse , err := TraverseResponseFromKey (val )
254
+ if err != nil {
255
+ fmt .Println ("Error traversing nested response from key:" , val , " " , err )
256
+ return nil , err
257
+ }
258
+ responseMap [key ] = nestedResponse
242
259
}
243
- responseMap [ key ] = nestedResponse
244
- }
245
- } else if val , ok := value .( map [ string ] interface {} ); ok {
246
- for k , v := range val {
247
- if v , ok := v .( string ); ok {
248
- if strings . HasPrefix ( v , "gql:" ) {
249
- nestedResponse , err := TraverseResponseFromKey ( v )
250
- if err != nil {
251
- fmt . Println ( "Error traversing nested response from key:" , v , " " , err )
252
- return nil , err
260
+ } else if val , ok := value .( map [ string ] interface {}); ok {
261
+ for k , v := range val {
262
+ if v , ok := v .( string ); ok {
263
+ if strings . HasPrefix ( v , "gql:" ) {
264
+ nestedResponse , err := TraverseResponseFromKey ( v )
265
+ if err != nil {
266
+ fmt . Println ( "Error traversing nested response from key:" , v , " " , err )
267
+ return nil , err
268
+ }
269
+ val [ k ] = nestedResponse
253
270
}
254
- val [k ] = nestedResponse
255
271
}
256
272
}
257
- }
258
- } else if val , ok := value .([]interface {}); ok {
259
- for i , v := range val {
260
- if v , ok := v .(string ); ok {
261
- if strings .HasPrefix (v , "gql:" ) {
262
- nestedResponse , err := TraverseResponseFromKey (v )
263
- if err != nil {
264
- fmt .Println ("Error traversing nested response from key:" , v , " " , err )
265
- return nil , err
273
+ } else if val , ok := value .([]interface {}); ok {
274
+ for i , v := range val {
275
+ if v , ok := v .(string ); ok {
276
+ if strings .HasPrefix (v , "gql:" ) {
277
+ nestedResponse , err := TraverseResponseFromKey (v )
278
+ if err != nil {
279
+ fmt .Println ("Error traversing nested response from key:" , v , " " , err )
280
+ return nil , err
281
+ }
282
+ val [i ] = nestedResponse
266
283
}
267
- val [i ] = nestedResponse
268
284
}
269
285
}
270
286
}
271
287
}
288
+ return responseMap , nil
272
289
}
273
290
274
- return responseMap , nil
291
+ return nil , nil
275
292
}
276
293
277
294
func CacheObject (field string , object map [string ]interface {}, parent map [string ]interface {}) string {
0 commit comments