|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"log"
|
|
|
|
"net"
|
|
|
|
"os"
|
|
|
|
"os/signal"
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"google.golang.org/grpc"
|
|
|
|
"whiteboxsystems.nl/openkvpoc/openkv"
|
|
|
|
)
|
|
|
|
|
|
|
|
var srvaddr = "0.0.0.0:8888"
|
|
|
|
var patientIf = "0.0.0.0:8085"
|
|
|
|
var binFolder = "./bin"
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
stop := make(chan os.Signal, 1)
|
|
|
|
signal.Notify(stop, os.Interrupt)
|
|
|
|
wg := &sync.WaitGroup{}
|
|
|
|
|
|
|
|
if os.Getenv("BIN_FOLDER") != "" {
|
|
|
|
binFolder = os.Getenv("BIN_FOLDER")
|
|
|
|
}
|
|
|
|
|
|
|
|
openapisrv := NewServer()
|
|
|
|
openapisrv.LoadData("./data/data.db")
|
|
|
|
opts := []grpc.ServerOption{
|
|
|
|
// grpc.UnaryInterceptor(openapisrv.EnsureValidModule),
|
|
|
|
}
|
|
|
|
|
|
|
|
grpcServer := grpc.NewServer(opts...)
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
lis, err := net.Listen("tcp", srvaddr)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("failed to listen: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
openkv.RegisterOpenKVServer(grpcServer, openapisrv)
|
|
|
|
log.Printf("RPC Listening on %v", srvaddr)
|
|
|
|
wg.Add(1)
|
|
|
|
grpcServer.Serve(lis)
|
|
|
|
}()
|
|
|
|
|
|
|
|
srv := NewUIServer(patientIf)
|
|
|
|
srv.data = openapisrv.data
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
wg.Add(1)
|
|
|
|
srv.ListenAndServe()
|
|
|
|
}()
|
|
|
|
|
|
|
|
<-stop
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
grpcServer.GracefulStop()
|
|
|
|
wg.Done()
|
|
|
|
log.Println("Shutdown RPC server")
|
|
|
|
}()
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
log.Println("Shutdown UI server...")
|
|
|
|
srv.Shutdown(context.Background())
|
|
|
|
wg.Done()
|
|
|
|
log.Println("UI Server shutdown...")
|
|
|
|
}()
|
|
|
|
|
|
|
|
wg.Wait()
|
|
|
|
}
|