genofire/hs_monolith
genofire
/
hs_monolith
Archived
1
0
Fork 0
This repository has been archived on 2020-09-27. You can view files and clone it, but cannot push or open issues or pull requests.
hs_monolith/cmd/stock/main.go

93 lines
2.1 KiB
Go
Raw Normal View History

// Package that contains the cmd binary of the microservice to run it
2017-03-25 14:27:47 +01:00
package main
import (
"flag"
2017-03-25 16:09:17 +01:00
"net/http"
2017-03-26 19:48:59 +02:00
"os"
"os/signal"
"syscall"
2017-05-18 23:42:00 +02:00
"time"
2017-03-25 16:09:17 +01:00
"github.com/NYTimes/gziphandler"
2017-03-25 16:09:17 +01:00
goji "goji.io"
"goji.io/pat"
2017-03-25 16:09:17 +01:00
2017-05-18 23:42:00 +02:00
"github.com/genofire/golang-lib/worker"
web "github.com/genofire/hs_master-kss-monolith/http"
2017-03-30 16:09:44 +02:00
"github.com/genofire/hs_master-kss-monolith/lib/database"
"github.com/genofire/hs_master-kss-monolith/lib/log"
2017-03-25 16:09:17 +01:00
"github.com/genofire/hs_master-kss-monolith/models"
"github.com/genofire/hs_master-kss-monolith/runtime"
2017-03-25 14:27:47 +01:00
)
// Configuration File
2017-03-25 14:27:47 +01:00
var (
2017-03-25 16:09:17 +01:00
configFile string
config *models.Config
2017-03-25 14:27:47 +01:00
)
// Function to run this go program
2017-03-25 14:27:47 +01:00
func main() {
2017-03-25 16:09:17 +01:00
flag.StringVar(&configFile, "config", "config.conf", "path of configuration file (default:config.conf)")
2017-03-25 14:27:47 +01:00
flag.Parse()
2017-03-25 16:09:17 +01:00
// load config
config = models.ReadConfigFile(configFile)
// Config packages:
2017-05-15 10:22:24 +02:00
web.GoodAvailabilityTemplate = config.GoodAvailabilityTemplate
2017-05-12 10:54:05 +02:00
web.GoodFreshnessTemplate = config.GoodFreshnessTemplate
runtime.CacheConfig = config.CacheClean
runtime.ProductURL = config.MicroserviceDependencies.Product
runtime.PermissionURL = config.MicroserviceDependencies.Permission
2017-03-25 16:09:17 +01:00
log.Log.Info("Starting stock microservice")
2017-03-25 16:09:17 +01:00
2017-03-30 16:09:44 +02:00
err := database.Open(config.Database)
2017-03-30 17:02:20 +02:00
if err != nil {
2017-03-30 16:09:44 +02:00
log.Log.Panic(err)
}
grw := runtime.NewGoodReleaseWorker(config.GoodRelease)
cw := runtime.NewCacheWorker()
fw := worker.NewWorker(config.FouledDeleter.Duration, func() {
runtime.GoodFouled()
})
go grw.Start()
go cw.Start()
2017-05-18 23:42:00 +02:00
if config.FouledDeleter.Duration != time.Duration(0) {
go fw.Start()
}
// Start webserver
2017-03-25 16:09:17 +01:00
router := goji.NewMux()
web.BindAPI(router)
router.Handle(pat.New("/*"), gziphandler.GzipHandler(http.FileServer(http.Dir(config.Webroot))))
2017-03-26 19:48:59 +02:00
srv := &http.Server{
Addr: config.WebserverBind,
Handler: router,
}
go func() {
if err := srv.ListenAndServe(); err != nil {
panic(err)
}
}()
2017-03-26 19:48:59 +02:00
log.Log.Info("Started stock microservice")
2017-03-26 19:48:59 +02:00
// Wait for system signal
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
sig := <-sigs
// Stop services
srv.Close()
grw.Close()
cw.Close()
2017-05-18 23:42:00 +02:00
fw.Close()
2017-03-30 16:09:44 +02:00
database.Close()
2017-03-26 19:48:59 +02:00
log.Log.Info("received", sig)
2017-03-25 14:27:47 +01:00
}