@@ -13,6 +13,7 @@ import (
13
13
"net"
14
14
"os"
15
15
"os/signal"
16
+ "strconv"
16
17
"strings"
17
18
"sync"
18
19
"syscall"
@@ -53,14 +54,12 @@ var (
53
54
initResourcesOnce sync.Once
54
55
)
55
56
57
+ const DEFAULT_RELOAD_INTERVAL = 10
58
+
56
59
func init () {
57
60
log = logrus .New ()
58
- var err error
59
- catalog , err = readProductFiles ()
60
- if err != nil {
61
- log .Fatalf ("Reading Product Files: %v" , err )
62
- os .Exit (1 )
63
- }
61
+
62
+ loadProductCatalog ()
64
63
}
65
64
66
65
func initResource () * sdkresource.Resource {
@@ -178,6 +177,43 @@ type productCatalog struct {
178
177
pb.UnimplementedProductCatalogServiceServer
179
178
}
180
179
180
+ func loadProductCatalog () {
181
+ log .Info ("Loading Product Catalog..." )
182
+ var err error
183
+ catalog , err = readProductFiles ()
184
+ if err != nil {
185
+ log .Fatalf ("Error reading product files: %v\n " , err )
186
+ os .Exit (1 )
187
+ }
188
+
189
+ // Default reload interval is 10 seconds
190
+ interval := DEFAULT_RELOAD_INTERVAL
191
+ si := os .Getenv ("PRODUCT_CATALOG_RELOAD_INTERVAL" )
192
+ if si != "" {
193
+ interval , _ = strconv .Atoi (si )
194
+ if interval <= 0 {
195
+ interval = DEFAULT_RELOAD_INTERVAL
196
+ }
197
+ }
198
+ log .Infof ("Product Catalog reload interval: %d" , interval )
199
+
200
+ ticker := time .NewTicker (time .Duration (interval ) * time .Second )
201
+
202
+ go func () {
203
+ for {
204
+ select {
205
+ case <- ticker .C :
206
+ log .Info ("Reloading Product Catalog..." )
207
+ catalog , err = readProductFiles ()
208
+ if err != nil {
209
+ log .Errorf ("Error reading product files: %v" , err )
210
+ continue
211
+ }
212
+ }
213
+ }
214
+ }()
215
+ }
216
+
181
217
func readProductFiles () ([]* pb.Product , error ) {
182
218
183
219
// find all .json files in the products directory
0 commit comments