factor read catalog json code

This commit is contained in:
Theo Chamley 2018-12-17 14:34:35 +01:00
parent ce80e8b119
commit 3540c58964
No known key found for this signature in database
GPG key ID: F5F533F1EF7B2AFF

View file

@ -24,6 +24,7 @@ import (
"os" "os"
"os/signal" "os/signal"
"strings" "strings"
"sync"
"syscall" "syscall"
"time" "time"
@ -43,8 +44,8 @@ import (
) )
var ( var (
catalogJSON []byte
cat pb.ListProductsResponse cat pb.ListProductsResponse
catalogMutex *sync.Mutex
log *logrus.Logger log *logrus.Logger
port = flag.Int("port", 3550, "port to listen at") port = flag.Int("port", 3550, "port to listen at")
@ -53,14 +54,6 @@ var (
) )
func init() { func init() {
c, err := ioutil.ReadFile("products.json")
if err != nil {
log.Fatalf("failed to open product catalog json file: %v", err)
}
catalogJSON = c
if err := jsonpb.Unmarshal(bytes.NewReader(catalogJSON), &cat); err != nil {
log.Warnf("failed to parse the catalog JSON: %v", err)
}
log = logrus.New() log = logrus.New()
log.Formatter = &logrus.JSONFormatter{ log.Formatter = &logrus.JSONFormatter{
FieldMap: logrus.FieldMap{ FieldMap: logrus.FieldMap{
@ -71,7 +64,11 @@ func init() {
TimestampFormat: time.RFC3339Nano, TimestampFormat: time.RFC3339Nano,
} }
log.Out = os.Stdout log.Out = os.Stdout
log.Info("successfully parsed product catalog json") catalogMutex = &sync.Mutex{}
err := readCatalogFile(&cat)
if err != nil {
log.Warnf("could not parse product catalog")
}
} }
func main() { func main() {
@ -170,24 +167,31 @@ func initProfiling(service, version string) {
type productCatalog struct{} type productCatalog struct{}
func parseCatalog() []*pb.Product { func readCatalogFile(catalog *pb.ListProductsResponse) error {
if reloadCatalog { catalogMutex.Lock()
var catalog pb.ListProductsResponse defer catalogMutex.Unlock()
c, err := ioutil.ReadFile("products.json") catalogJSON, err := ioutil.ReadFile("products.json")
if err != nil { if err != nil {
log.Fatalf("failed to open product catalog json file: %v", err) log.Fatalf("failed to open product catalog json file: %v", err)
return nil return err
} }
if err := jsonpb.Unmarshal(bytes.NewReader(c), &catalog); err != nil { if err := jsonpb.Unmarshal(bytes.NewReader(catalogJSON), catalog); err != nil {
log.Warnf("failed to parse the catalog JSON: %v", err) log.Warnf("failed to parse the catalog JSON: %v", err)
return err
}
log.Info("successfully parsed product catalog json")
return nil return nil
} }
log.Infof("Catalog reloaded")
return catalog.Products func parseCatalog() []*pb.Product {
} else { if reloadCatalog || len(cat.Products) == 0 {
return cat.Products err := readCatalogFile(&cat)
if err != nil {
return []*pb.Product{}
} }
} }
return cat.Products
}
func (p *productCatalog) Check(ctx context.Context, req *healthpb.HealthCheckRequest) (*healthpb.HealthCheckResponse, error) { func (p *productCatalog) Check(ctx context.Context, req *healthpb.HealthCheckRequest) (*healthpb.HealthCheckResponse, error) {
return &healthpb.HealthCheckResponse{Status: healthpb.HealthCheckResponse_SERVING}, nil return &healthpb.HealthCheckResponse{Status: healthpb.HealthCheckResponse_SERVING}, nil