Skip to content

Commit

Permalink
Merge pull request #181 from wubin1989/main
Browse files Browse the repository at this point in the history
...
  • Loading branch information
wubin1989 authored Jan 8, 2024
2 parents a4dccac + b3c87b8 commit 723594e
Show file tree
Hide file tree
Showing 12 changed files with 165 additions and 638 deletions.
31 changes: 0 additions & 31 deletions framework/banner/banner.go

This file was deleted.

37 changes: 32 additions & 5 deletions framework/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"os"
"strconv"
"strings"
"sync"
"time"

"github.com/apolloconfig/agollo/v4"
Expand All @@ -19,7 +18,7 @@ import (
"github.com/wubin1989/nacos-sdk-go/v2/vo"
_ "go.uber.org/automaxprocs"

"github.com/unionj-cloud/go-doudou/v2/framework"
"github.com/kelseyhightower/envconfig"
"github.com/unionj-cloud/go-doudou/v2/framework/configmgr"
"github.com/unionj-cloud/go-doudou/v2/toolkit/cast"
"github.com/unionj-cloud/go-doudou/v2/toolkit/dotenv"
Expand All @@ -28,6 +27,8 @@ import (
"github.com/unionj-cloud/go-doudou/v2/toolkit/zlogger"
)

var GddConfig = &gddConfig{}

func LoadConfigFromLocal() {
env := os.Getenv("GDD_ENV")
if "" == env {
Expand Down Expand Up @@ -87,12 +88,20 @@ func LoadConfigFromRemote() {
}
}

func CheckDev() bool {
return stringutils.IsEmpty(os.Getenv("GDD_ENV")) || os.Getenv("GDD_ENV") == "dev"
}

func init() {
LoadConfigFromLocal()
LoadConfigFromRemote()
err := envconfig.Process("gdd", GddConfig)
if err != nil {
zlogger.Panic().Msgf("Error processing environment variables: %s", err.Error())
}
zl, _ := zerolog.ParseLevel(GddLogLevel.LoadOrDefault(DefaultGddLogLevel))
opts := []zlogger.LoggerConfigOption{
zlogger.WithDev(framework.CheckDev()),
zlogger.WithDev(CheckDev()),
zlogger.WithCaller(cast.ToBoolOrDefault(GddLogCaller.Load(), DefaultGddLogCaller)),
zlogger.WithDiscard(cast.ToBoolOrDefault(GddLogDiscard.Load(), DefaultGddLogDiscard)),
zlogger.WithZeroLogLevel(zl),
Expand Down Expand Up @@ -454,8 +463,6 @@ func ServiceDiscoveryMap() map[string]struct{} {
return modemap
}

var PrintLock sync.Mutex

type Config struct {
Db struct {
Name string
Expand Down Expand Up @@ -525,3 +532,23 @@ type Config struct {
Name string
}
}

type gddConfig struct {
Banner bool
BannerText string `default:"go-doudou" split_words:"true"`
RouteRootPath string `default:"/" split_words:"true"`
WriteTimeout time.Duration `default:"15s" split_words:"true"`
ReadTimeout time.Duration `default:"15s" split_words:"true"`
IdleTimeout time.Duration `default:"60s" split_words:"true"`
GraceTimeout time.Duration `default:"15s" split_words:"true"`
Port string `default:"6060"`
Host string
EnableResponseGzip bool `default:"true" split_words:"true"`
LogReqEnable bool `default:"false" split_words:"true"`
ManageEnable bool `default:"true" split_words:"true"`
FallbackContenttype string `default:"application/json; charset=UTF-8" split_words:"true"`
Grpc struct {
Port string `default:"50051"`
}
Config
}
20 changes: 16 additions & 4 deletions framework/framework.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package framework

import (
"github.com/unionj-cloud/go-doudou/v2/toolkit/stringutils"
"os"
"github.com/common-nighthawk/go-figure"
"github.com/unionj-cloud/go-doudou/v2/framework/config"
"sync"
)

type Annotation struct {
Expand Down Expand Up @@ -30,6 +31,17 @@ func (receiver AnnotationStore) GetParams(key string, annotationName string) []s
return nil
}

func CheckDev() bool {
return stringutils.IsEmpty(os.Getenv("GDD_ENV")) || os.Getenv("GDD_ENV") == "dev"
var PrintLock sync.Mutex

var once sync.Once

func PrintBanner() {
once.Do(func() {
if !config.CheckDev() {
return
}
if config.GddConfig.Banner {
figure.NewColorFigure(config.GddConfig.BannerText, "doom", "green", true).Print()
}
})
}
85 changes: 42 additions & 43 deletions framework/grpcx/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@ import (
"fmt"
"github.com/olekukonko/tablewriter"
"github.com/unionj-cloud/go-doudou/v2/framework"
"github.com/unionj-cloud/go-doudou/v2/framework/banner"
"github.com/unionj-cloud/go-doudou/v2/framework/config"
register "github.com/unionj-cloud/go-doudou/v2/framework/registry"
"github.com/unionj-cloud/go-doudou/v2/toolkit/cast"
"github.com/unionj-cloud/go-doudou/v2/toolkit/timeutils"
logger "github.com/unionj-cloud/go-doudou/v2/toolkit/zlogger"
"google.golang.org/grpc"
Expand Down Expand Up @@ -52,7 +50,7 @@ func NewGrpcServerWithData(data map[string]interface{}, opt ...grpc.ServerOption
}

func (srv *GrpcServer) printServices() {
if !framework.CheckDev() {
if !config.CheckDev() {
return
}
logger.Info().Msg("================ Registered Services ================")
Expand Down Expand Up @@ -88,51 +86,22 @@ func (srv *GrpcServer) Run() {

// RunWithPipe runs grpc server
func (srv *GrpcServer) RunWithPipe(pipe net.Listener) {
if srv.Server == nil {
return
}
banner.Print()
config.PrintLock.Lock()
register.NewGrpc(srv.data)
port := config.DefaultGddGrpcPort
if p, err := cast.ToIntE(config.GddGrpcPort.Load()); err == nil {
port = p
}
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
ln, err := net.Listen("tcp", fmt.Sprintf(":%s", config.GddConfig.Grpc.Port))
if err != nil {
logger.Panic().Msgf("failed to listen: %v", err)
}
reflection.Register(srv)
srv.printServices()
go func() {
if err := srv.Serve(lis); err != nil {
logger.Error().Msgf("failed to serve: %v", err)
}
}()
if pipe != nil {
go func() {
if err := srv.Serve(pipe); err != nil {
logger.Error().Msgf("failed to serve: %v", err)
}
}()
}
logger.Info().Msgf("Grpc server is listening at %v", lis.Addr())
logger.Info().Msgf("Grpc server started in %s", time.Since(startAt))
config.PrintLock.Unlock()
srv.ServeWithPipe(ln, pipe)
defer func() {
logger.Info().Msgf("Grpc server is gracefully shutting down in %s", config.GddConfig.GraceTimeout)
// Make sure to set a deadline on exiting the process
// after upg.Exit() is closed. No new upgrades can be
// performed if the parent doesn't exit.
time.AfterFunc(config.GddConfig.GraceTimeout, func() {
logger.Error().Msg("Graceful shutdown timed out")
os.Exit(1)
})
register.ShutdownGrpc()

grace, err := time.ParseDuration(config.GddGraceTimeout.Load())
if err != nil {
logger.Debug().Msgf("Parse %s %s as time.Duration failed: %s, use default %s instead.\n", string(config.GddGraceTimeout),
config.GddGraceTimeout.Load(), err.Error(), config.DefaultGddGraceTimeout)
grace, _ = time.ParseDuration(config.DefaultGddGraceTimeout)
}
logger.Info().Msgf("Grpc server is gracefully shutting down in %s", grace)

ctx, cancel := context.WithTimeout(context.Background(), grace)
defer cancel()
if err := timeutils.CallWithCtx(ctx, func() struct{} {
if err := timeutils.CallWithCtx(context.Background(), func() struct{} {
srv.GracefulStop()
return struct{}{}
}); err != nil {
Expand All @@ -148,3 +117,33 @@ func (srv *GrpcServer) RunWithPipe(pipe net.Listener) {
// Block until we receive our signal.
<-c
}

func (srv *GrpcServer) Serve(ln net.Listener) {
srv.ServeWithPipe(ln, nil)
}

func (srv *GrpcServer) ServeWithPipe(ln net.Listener, pipe net.Listener) {
if srv.Server == nil {
return
}
framework.PrintBanner()
framework.PrintLock.Lock()
register.NewGrpc(srv.data)
reflection.Register(srv)
srv.printServices()
go func() {
if err := srv.Server.Serve(ln); err != nil {
logger.Error().Msgf("failed to serve: %v", err)
}
}()
if pipe != nil {
go func() {
if err := srv.Server.Serve(pipe); err != nil {
logger.Error().Msgf("failed to serve: %v", err)
}
}()
}
logger.Info().Msgf("Grpc server is listening at %v", ln.Addr())
logger.Info().Msgf("Grpc server started in %s", time.Since(startAt))
framework.PrintLock.Unlock()
}
Loading

0 comments on commit 723594e

Please sign in to comment.