some lifecycle fixes for app and access control stuff, to get data flowing to the client again

pull/7/head
Adam Veldhousen 12 months ago
parent 2e0e78ae28
commit 756330e79c
Signed by: adam
GPG Key ID: 6DB29003C6DD1E4B

@ -52,5 +52,6 @@ data:
config.yaml: |
log_level: 2
port: 80
access_control_allow_origin: "*"
endpoints:
catalog: local-catalog:5001
catalog: catalog-local:5001

@ -30,47 +30,48 @@ func Run(parent context.Context, app App) {
ctx, canceller := context.WithCancel(parent)
defer canceller()
sig := make(chan os.Signal, 5)
signal.Notify(sig, syscall.SIGTERM, syscall.SIGHUP)
go func() {
defer canceller()
InfoLog.Println("Starting service 🚀")
select {
case signal := <-sig:
TraceLog.Printf("[SHUTDOWN TRIGGERED] got shutdown signal: %v", signal)
case <-ctx.Done():
TraceLog.Println("[SHUTDOWN TRIGGERED] context exited unexpectedly")
if err := loadConfig(app); err != nil {
ErrorLog.Println(err)
return
}
InfoLog.Println("Shutting down service ⛔⚠️😱")
stopCtx, stopCanceller := context.WithTimeout(parent, time.Second*5)
defer stopCanceller()
if err := app.Start(ctx); err != nil {
ErrorLog.Println(err)
return
}
}()
app.OnStop(stopCtx)
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGTERM, syscall.SIGHUP)
errs := &errgroup.Group{}
select {
case signal := <-sig:
TraceLog.Printf("[SHUTDOWN TRIGGERED] got shutdown signal: %v", signal)
case <-ctx.Done():
TraceLog.Println("[SHUTDOWN TRIGGERED] context exited")
}
errs.Go(CloseGRPCConns)
errs.Go(StopHTTPServer)
errs.Go(StopGRPCServer)
InfoLog.Println("Shutting down service ⛔⚠️😱")
if err := errs.Wait(); err != nil {
ErrorLog.Printf("There was an error shutting down the application gracefully: %v", err)
}
}()
errs := &errgroup.Group{}
InfoLog.Println("Starting service 🚀")
errs.Go(CloseGRPCConns)
errs.Go(StopHTTPServer)
errs.Go(StopGRPCServer)
if err := loadConfig(app); err != nil {
ErrorLog.Println(err)
return
if err := errs.Wait(); err != nil {
ErrorLog.Printf("There was an error shutting down the application gracefully: %v", err)
}
if err := app.Start(ctx); err != nil {
ErrorLog.Println(err)
return
}
stopCtx, stopCanceller := context.WithTimeout(parent, time.Second*5)
defer stopCanceller()
app.OnStop(stopCtx)
TraceLog.Println("Shutdown process fully completed")
}
func loadConfig(cfg interface{}) error {

@ -51,6 +51,7 @@ func StartGRPCServer(ctx context.Context, port int, sb ServerBuilder, opts ...gr
}
func StopGRPCServer() error {
TraceLog.Println("stopping GRPC server...")
grpcServerInstance.GracefulStop()
return nil
}
@ -83,7 +84,12 @@ func StartHTTPServer(ctx context.Context, port int, handler http.Handler) (err e
}
func StopHTTPServer() error {
ctx, canceler := context.WithDeadline(context.Background(), time.Now().Add(time.Second*5))
if httpServerInstance == nil {
return nil
}
TraceLog.Println("stopping HTTP Server...")
ctx, canceler := context.WithDeadline(context.Background(), time.Now().Add(time.Second*3))
defer canceler()
return httpServerInstance.Shutdown(ctx)
}
@ -132,6 +138,7 @@ func DialGRPC(endpoint string, opts ...grpc.DialOption) (conn *grpc.ClientConn,
}
func CloseGRPCConns() error {
grpcServerInstance.GracefulStop()
grpcConns.Lock()
defer grpcConns.Unlock()
for k, v := range grpcConns.openConns {

@ -15,9 +15,10 @@ import (
)
type ProxyClientApp struct {
LogLevel kernel.LogLevel `yaml:"log_level" env:"BH_LOG_LEVEL" env-default:"0" yaml-default:"0"`
Port int `yaml:"port" env:"PROXY_CLIENT_PORT"`
Endpoints struct {
LogLevel kernel.LogLevel `yaml:"log_level" env:"BH_LOG_LEVEL" env-default:"0" yaml-default:"0"`
Port int `yaml:"port" env:"PROXY_CLIENT_PORT"`
AccessControlAllowOrigin string `yaml:"access_control_allow_origin", env:"PROXY_CLIENT_CORS_ORIGIN`
Endpoints struct {
Catalog string `yaml:"catalog" env:"CATALOG_ENDPOINT"`
} `yaml:"endpoints" env:"PROXY_CLIENT_SERVICES"`
}
@ -45,7 +46,7 @@ func (app *ProxyClientApp) Start(ctx context.Context) error {
Handler: http.StripPrefix("/api", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
kernel.TraceLog.Printf("{ \"Client\": \"%s\", \"Path\":\"%s\", \"User-Agent\":\"%s\" } ", r.RemoteAddr, r.URL, r.UserAgent())
// TODO: pull the allowed origin host names from the config file
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Origin", app.AccessControlAllowOrigin)
grpcMux.ServeHTTP(w, r)
})),
}

Loading…
Cancel
Save