optimised code

This commit is contained in:
zhuyasen
2023-12-14 19:50:41 +08:00
parent 1d81ccb27c
commit 3857f46bd1
36 changed files with 202 additions and 125 deletions

View File

@@ -301,7 +301,7 @@ message ListUserExampleByIDsReply {
message ListUserExampleByLastIDRequest { message ListUserExampleByLastIDRequest {
uint64 lastID = 1 [(tagger.tags) = "form:\"lastID\""]; // last id uint64 lastID = 1 [(tagger.tags) = "form:\"lastID\""]; // last id
uint32 limit = 2 [(tagger.tags) = "form:\"limit\""]; // page size uint32 limit = 2 [(validate.rules).uint32.gt = 0, (tagger.tags) = "form:\"limit\""]; // page size
string sort = 3 [(tagger.tags) = "form:\"sort\""]; // sort by column name of table, default is -id, the - sign indicates descending order. string sort = 3 [(tagger.tags) = "form:\"sort\""]; // sort by column name of table, default is -id, the - sign indicates descending order.
} }

View File

@@ -3,10 +3,10 @@ package service
import ( import (
"bytes" "bytes"
"runtime"
"strings" "strings"
"github.com/zhufuyi/sponge/cmd/protoc-gen-go-rpc-tmpl/internal/parse" "github.com/zhufuyi/sponge/cmd/protoc-gen-go-rpc-tmpl/internal/parse"
"github.com/zhufuyi/sponge/pkg/gofile"
"google.golang.org/protobuf/compiler/protogen" "google.golang.org/protobuf/compiler/protogen"
) )
@@ -80,7 +80,7 @@ func (f *errCodeFields) execute() []byte {
func getProtoFilename(filenamePrefix string) string { func getProtoFilename(filenamePrefix string) string {
filenamePrefix = strings.ReplaceAll(filenamePrefix, ".proto", "") filenamePrefix = strings.ReplaceAll(filenamePrefix, ".proto", "")
filenamePrefix = strings.ReplaceAll(filenamePrefix, gofile.GetPathDelimiter(), "/") filenamePrefix = strings.ReplaceAll(filenamePrefix, getPathDelimiter(), "/")
ss := strings.Split(filenamePrefix, "/") ss := strings.Split(filenamePrefix, "/")
if len(ss) == 0 { if len(ss) == 0 {
@@ -109,3 +109,12 @@ func handleSplitLineMark(data []byte) []byte {
} }
return out return out
} }
func getPathDelimiter() string {
delimiter := "/"
if runtime.GOOS == "windows" {
delimiter = "\\"
}
return delimiter
}

View File

@@ -11,8 +11,8 @@ import (
"github.com/zhufuyi/sponge/pkg/tracer" "github.com/zhufuyi/sponge/pkg/tracer"
) )
// RegisterClose register for released resources // Close releasing resources after service exit
func RegisterClose(servers []app.IServer) []app.Close { func Close(servers []app.IServer) []app.Close {
var closes []app.Close var closes []app.Close
// close server // close server

View File

@@ -16,14 +16,14 @@ import (
"github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos" "github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos"
) )
// RegisterServers register for the app service // CreateServices create grpc or http service
func RegisterServers() []app.IServer { func CreateServices() []app.IServer {
var cfg = config.Get() var cfg = config.Get()
var servers []app.IServer var servers []app.IServer
// creating grpc service // creating grpc service
grpcAddr := ":" + strconv.Itoa(cfg.Grpc.Port) grpcAddr := ":" + strconv.Itoa(cfg.Grpc.Port)
grpcRegistry, grpcInstance := registryService("grpc", cfg.App.Host, cfg.Grpc.Port) grpcRegistry, grpcInstance := registerService("grpc", cfg.App.Host, cfg.Grpc.Port)
grpcServer := server.NewGRPCServer(grpcAddr, grpcServer := server.NewGRPCServer(grpcAddr,
server.WithGrpcReadTimeout(time.Duration(cfg.Grpc.ReadTimeout)*time.Second), server.WithGrpcReadTimeout(time.Duration(cfg.Grpc.ReadTimeout)*time.Second),
server.WithGrpcWriteTimeout(time.Duration(cfg.Grpc.WriteTimeout)*time.Second), server.WithGrpcWriteTimeout(time.Duration(cfg.Grpc.WriteTimeout)*time.Second),
@@ -34,7 +34,7 @@ func RegisterServers() []app.IServer {
return servers return servers
} }
func registryService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) { func registerService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) {
var ( var (
instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port) instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port)
cfg = config.Get() cfg = config.Get()

View File

@@ -12,6 +12,7 @@ import (
"github.com/zhufuyi/sponge/internal/config" "github.com/zhufuyi/sponge/internal/config"
"github.com/zhufuyi/sponge/internal/model" "github.com/zhufuyi/sponge/internal/model"
"github.com/zhufuyi/sponge/pkg/conf"
"github.com/zhufuyi/sponge/pkg/logger" "github.com/zhufuyi/sponge/pkg/logger"
"github.com/zhufuyi/sponge/pkg/nacoscli" "github.com/zhufuyi/sponge/pkg/nacoscli"
"github.com/zhufuyi/sponge/pkg/stat" "github.com/zhufuyi/sponge/pkg/stat"
@@ -26,8 +27,8 @@ var (
enableConfigCenter bool enableConfigCenter bool
) )
// Config initial app configuration // InitApp initial app configuration
func Config() { func InitApp() {
initConfig() initConfig()
cfg := config.Get() cfg := config.Get()
@@ -40,9 +41,12 @@ func Config() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
logger.Debug(config.Show())
logger.Info("init logger succeeded")
// initializing database // initializing database
model.InitMysql() model.InitMysql()
logger.Info("init mysql succeeded")
model.InitCache(cfg.App.CacheType) model.InitCache(cfg.App.CacheType)
// initializing tracing // initializing tracing
@@ -55,6 +59,7 @@ func Config() {
strconv.Itoa(cfg.Jaeger.AgentPort), strconv.Itoa(cfg.Jaeger.AgentPort),
cfg.App.TracingSamplingRate, cfg.App.TracingSamplingRate,
) )
logger.Info("init tracer succeeded")
} }
// initializing the print system and process resources // initializing the print system and process resources
@@ -63,6 +68,7 @@ func Config() {
stat.WithLog(logger.Get()), stat.WithLog(logger.Get()),
stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them
) )
logger.Info("init statistics succeeded")
} }
} }
@@ -86,10 +92,14 @@ func initConfig() {
appConfig := &config.Config{} appConfig := &config.Config{}
params := &nacoscli.Params{} params := &nacoscli.Params{}
_ = copier.Copy(params, &nacosConfig.Nacos) _ = copier.Copy(params, &nacosConfig.Nacos)
err = nacoscli.Init(appConfig, params) format, data, err := nacoscli.GetConfig(params)
if err != nil { if err != nil {
panic(fmt.Sprintf("connect to configuration center err, %v", err)) panic(fmt.Sprintf("connect to configuration center err, %v", err))
} }
err = conf.ParseConfigData(data, format, appConfig)
if err != nil {
panic(fmt.Sprintf("parse configuration data err, %v", err))
}
if appConfig.App.Name == "" { if appConfig.App.Name == "" {
panic("read the config from center error, config data is empty") panic("read the config from center error, config data is empty")
} }
@@ -108,5 +118,4 @@ func initConfig() {
if version != "" { if version != "" {
config.Get().App.Version = version config.Get().App.Version = version
} }
//fmt.Println(config.Show())
} }

View File

@@ -8,10 +8,10 @@ import (
) )
func main() { func main() {
initial.Config() initial.InitApp()
servers := initial.RegisterServers() services := initial.CreateServices()
closes := initial.RegisterClose(servers) closes := initial.Close(services)
a := app.New(servers, closes) a := app.New(services, closes)
a.Run() a.Run()
} }

View File

@@ -11,8 +11,8 @@ import (
"github.com/zhufuyi/sponge/pkg/tracer" "github.com/zhufuyi/sponge/pkg/tracer"
) )
// RegisterClose register for released resources // Close releasing resources after service exit
func RegisterClose(servers []app.IServer) []app.Close { func Close(servers []app.IServer) []app.Close {
var closes []app.Close var closes []app.Close
// close server // close server

View File

@@ -16,14 +16,14 @@ import (
"github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos" "github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos"
) )
// RegisterServers register for the app service // CreateServices create grpc or http service
func RegisterServers() []app.IServer { func CreateServices() []app.IServer {
var cfg = config.Get() var cfg = config.Get()
var servers []app.IServer var servers []app.IServer
// creating http service // creating http service
httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port) httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port)
httpRegistry, httpInstance := registryService("http", cfg.App.Host, cfg.HTTP.Port) httpRegistry, httpInstance := registerService("http", cfg.App.Host, cfg.HTTP.Port)
httpServer := server.NewHTTPServer_pbExample(httpAddr, httpServer := server.NewHTTPServer_pbExample(httpAddr,
server.WithHTTPReadTimeout(time.Second*time.Duration(cfg.HTTP.ReadTimeout)), server.WithHTTPReadTimeout(time.Second*time.Duration(cfg.HTTP.ReadTimeout)),
server.WithHTTPWriteTimeout(time.Second*time.Duration(cfg.HTTP.WriteTimeout)), server.WithHTTPWriteTimeout(time.Second*time.Duration(cfg.HTTP.WriteTimeout)),
@@ -35,7 +35,7 @@ func RegisterServers() []app.IServer {
return servers return servers
} }
func registryService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) { func registerService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) {
var ( var (
instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port) instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port)
cfg = config.Get() cfg = config.Get()

View File

@@ -13,6 +13,7 @@ import (
//"github.com/zhufuyi/sponge/internal/rpcclient" //"github.com/zhufuyi/sponge/internal/rpcclient"
"github.com/zhufuyi/sponge/pkg/conf"
"github.com/zhufuyi/sponge/pkg/logger" "github.com/zhufuyi/sponge/pkg/logger"
"github.com/zhufuyi/sponge/pkg/nacoscli" "github.com/zhufuyi/sponge/pkg/nacoscli"
"github.com/zhufuyi/sponge/pkg/stat" "github.com/zhufuyi/sponge/pkg/stat"
@@ -27,8 +28,8 @@ var (
enableConfigCenter bool enableConfigCenter bool
) )
// Config initial app configuration // InitApp initial app configuration
func Config() { func InitApp() {
initConfig() initConfig()
cfg := config.Get() cfg := config.Get()
@@ -41,6 +42,8 @@ func Config() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
logger.Debug(config.Show())
logger.Info("init logger succeeded")
// initializing tracing // initializing tracing
if cfg.App.EnableTrace { if cfg.App.EnableTrace {
@@ -52,6 +55,7 @@ func Config() {
strconv.Itoa(cfg.Jaeger.AgentPort), strconv.Itoa(cfg.Jaeger.AgentPort),
cfg.App.TracingSamplingRate, cfg.App.TracingSamplingRate,
) )
logger.Info("init tracer succeeded")
} }
// initializing the rpc server connection // initializing the rpc server connection
@@ -64,6 +68,7 @@ func Config() {
stat.WithLog(logger.Get()), stat.WithLog(logger.Get()),
stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them
) )
logger.Info("init statistics succeeded")
} }
} }
@@ -87,10 +92,14 @@ func initConfig() {
appConfig := &config.Config{} appConfig := &config.Config{}
params := &nacoscli.Params{} params := &nacoscli.Params{}
_ = copier.Copy(params, &nacosConfig.Nacos) _ = copier.Copy(params, &nacosConfig.Nacos)
err = nacoscli.Init(appConfig, params) format, data, err := nacoscli.GetConfig(params)
if err != nil { if err != nil {
panic(fmt.Sprintf("connect to configuration center err, %v", err)) panic(fmt.Sprintf("connect to configuration center err, %v", err))
} }
err = conf.ParseConfigData(data, format, appConfig)
if err != nil {
panic(fmt.Sprintf("parse configuration data err, %v", err))
}
if appConfig.App.Name == "" { if appConfig.App.Name == "" {
panic("read the config from center error, config data is empty") panic("read the config from center error, config data is empty")
} }
@@ -109,5 +118,4 @@ func initConfig() {
if version != "" { if version != "" {
config.Get().App.Version = version config.Get().App.Version = version
} }
//fmt.Println(config.Show())
} }

View File

@@ -8,10 +8,10 @@ import (
) )
func main() { func main() {
initial.Config() initial.InitApp()
servers := initial.RegisterServers() services := initial.CreateServices()
closes := initial.RegisterClose(servers) closes := initial.Close(services)
a := app.New(servers, closes) a := app.New(services, closes)
a.Run() a.Run()
} }

View File

@@ -11,8 +11,8 @@ import (
"github.com/zhufuyi/sponge/pkg/tracer" "github.com/zhufuyi/sponge/pkg/tracer"
) )
// RegisterClose register for released resources // Close releasing resources after service exit
func RegisterClose(servers []app.IServer) []app.Close { func Close(servers []app.IServer) []app.Close {
var closes []app.Close var closes []app.Close
// close server // close server

View File

@@ -16,14 +16,14 @@ import (
"github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos" "github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos"
) )
// RegisterServers register for the app service // CreateServices create grpc or http service
func RegisterServers() []app.IServer { func CreateServices() []app.IServer {
var cfg = config.Get() var cfg = config.Get()
var servers []app.IServer var servers []app.IServer
// creating grpc service // creating grpc service
grpcAddr := ":" + strconv.Itoa(cfg.Grpc.Port) grpcAddr := ":" + strconv.Itoa(cfg.Grpc.Port)
grpcRegistry, grpcInstance := registryService("grpc", cfg.App.Host, cfg.Grpc.Port) grpcRegistry, grpcInstance := registerService("grpc", cfg.App.Host, cfg.Grpc.Port)
grpcServer := server.NewGRPCServer(grpcAddr, grpcServer := server.NewGRPCServer(grpcAddr,
server.WithGrpcReadTimeout(time.Duration(cfg.Grpc.ReadTimeout)*time.Second), server.WithGrpcReadTimeout(time.Duration(cfg.Grpc.ReadTimeout)*time.Second),
server.WithGrpcWriteTimeout(time.Duration(cfg.Grpc.WriteTimeout)*time.Second), server.WithGrpcWriteTimeout(time.Duration(cfg.Grpc.WriteTimeout)*time.Second),
@@ -34,7 +34,7 @@ func RegisterServers() []app.IServer {
return servers return servers
} }
func registryService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) { func registerService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) {
var ( var (
instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port) instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port)
cfg = config.Get() cfg = config.Get()

View File

@@ -13,6 +13,7 @@ import (
//"github.com/zhufuyi/sponge/internal/model" //"github.com/zhufuyi/sponge/internal/model"
"github.com/zhufuyi/sponge/pkg/conf"
"github.com/zhufuyi/sponge/pkg/logger" "github.com/zhufuyi/sponge/pkg/logger"
"github.com/zhufuyi/sponge/pkg/nacoscli" "github.com/zhufuyi/sponge/pkg/nacoscli"
"github.com/zhufuyi/sponge/pkg/stat" "github.com/zhufuyi/sponge/pkg/stat"
@@ -27,8 +28,8 @@ var (
enableConfigCenter bool enableConfigCenter bool
) )
// Config initial app configuration // InitApp initial app configuration
func Config() { func InitApp() {
initConfig() initConfig()
cfg := config.Get() cfg := config.Get()
@@ -41,9 +42,12 @@ func Config() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
logger.Debug(config.Show())
logger.Info("init logger succeeded")
// initializing database // initializing database
//model.InitMysql() //model.InitMysql()
//logger.Info("init mysql succeeded")
//model.InitCache(cfg.App.CacheType) //model.InitCache(cfg.App.CacheType)
// initializing tracing // initializing tracing
@@ -56,6 +60,7 @@ func Config() {
strconv.Itoa(cfg.Jaeger.AgentPort), strconv.Itoa(cfg.Jaeger.AgentPort),
cfg.App.TracingSamplingRate, cfg.App.TracingSamplingRate,
) )
logger.Info("init tracer succeeded")
} }
// initializing the print system and process resources // initializing the print system and process resources
@@ -64,6 +69,7 @@ func Config() {
stat.WithLog(logger.Get()), stat.WithLog(logger.Get()),
stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them
) )
logger.Info("init statistics succeeded")
} }
} }
@@ -87,10 +93,14 @@ func initConfig() {
appConfig := &config.Config{} appConfig := &config.Config{}
params := &nacoscli.Params{} params := &nacoscli.Params{}
_ = copier.Copy(params, &nacosConfig.Nacos) _ = copier.Copy(params, &nacosConfig.Nacos)
err = nacoscli.Init(appConfig, params) format, data, err := nacoscli.GetConfig(params)
if err != nil { if err != nil {
panic(fmt.Sprintf("connect to configuration center err, %v", err)) panic(fmt.Sprintf("connect to configuration center err, %v", err))
} }
err = conf.ParseConfigData(data, format, appConfig)
if err != nil {
panic(fmt.Sprintf("parse configuration data err, %v", err))
}
if appConfig.App.Name == "" { if appConfig.App.Name == "" {
panic("read the config from center error, config data is empty") panic("read the config from center error, config data is empty")
} }
@@ -109,5 +119,4 @@ func initConfig() {
if version != "" { if version != "" {
config.Get().App.Version = version config.Get().App.Version = version
} }
//fmt.Println(config.Show())
} }

View File

@@ -8,10 +8,10 @@ import (
) )
func main() { func main() {
initial.Config() initial.InitApp()
servers := initial.RegisterServers() services := initial.CreateServices()
closes := initial.RegisterClose(servers) closes := initial.Close(services)
a := app.New(servers, closes) a := app.New(services, closes)
a.Run() a.Run()
} }

View File

@@ -11,8 +11,8 @@ import (
"github.com/zhufuyi/sponge/pkg/tracer" "github.com/zhufuyi/sponge/pkg/tracer"
) )
// RegisterClose register for released resources // Close releasing resources after service exit
func RegisterClose(servers []app.IServer) []app.Close { func Close(servers []app.IServer) []app.Close {
var closes []app.Close var closes []app.Close
// close server // close server

View File

@@ -16,14 +16,14 @@ import (
"github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos" "github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos"
) )
// RegisterServers register for the app service // CreateServices create grpc or http service
func RegisterServers() []app.IServer { func CreateServices() []app.IServer {
var cfg = config.Get() var cfg = config.Get()
var servers []app.IServer var servers []app.IServer
// creating http service // creating http service
httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port) httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port)
httpRegistry, httpInstance := registryService("http", cfg.App.Host, cfg.HTTP.Port) httpRegistry, httpInstance := registerService("http", cfg.App.Host, cfg.HTTP.Port)
httpServer := server.NewHTTPServer(httpAddr, httpServer := server.NewHTTPServer(httpAddr,
server.WithHTTPReadTimeout(time.Second*time.Duration(cfg.HTTP.ReadTimeout)), server.WithHTTPReadTimeout(time.Second*time.Duration(cfg.HTTP.ReadTimeout)),
server.WithHTTPWriteTimeout(time.Second*time.Duration(cfg.HTTP.WriteTimeout)), server.WithHTTPWriteTimeout(time.Second*time.Duration(cfg.HTTP.WriteTimeout)),
@@ -35,7 +35,7 @@ func RegisterServers() []app.IServer {
return servers return servers
} }
func registryService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) { func registerService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) {
var ( var (
instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port) instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port)
cfg = config.Get() cfg = config.Get()

View File

@@ -6,6 +6,7 @@ package initial
import ( import (
"flag" "flag"
"fmt" "fmt"
"github.com/zhufuyi/sponge/pkg/conf"
"strconv" "strconv"
"github.com/zhufuyi/sponge/configs" "github.com/zhufuyi/sponge/configs"
@@ -26,8 +27,8 @@ var (
enableConfigCenter bool enableConfigCenter bool
) )
// Config initial app configuration // InitApp initial app configuration
func Config() { func InitApp() {
initConfig() initConfig()
cfg := config.Get() cfg := config.Get()
@@ -40,9 +41,12 @@ func Config() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
logger.Debug(config.Show())
logger.Info("init logger succeeded")
// initializing database // initializing database
model.InitMysql() model.InitMysql()
logger.Info("init mysql succeeded")
model.InitCache(cfg.App.CacheType) model.InitCache(cfg.App.CacheType)
// initializing tracing // initializing tracing
@@ -55,6 +59,7 @@ func Config() {
strconv.Itoa(cfg.Jaeger.AgentPort), strconv.Itoa(cfg.Jaeger.AgentPort),
cfg.App.TracingSamplingRate, cfg.App.TracingSamplingRate,
) )
logger.Info("init tracer succeeded")
} }
// initializing the print system and process resources // initializing the print system and process resources
@@ -63,6 +68,7 @@ func Config() {
stat.WithLog(logger.Get()), stat.WithLog(logger.Get()),
stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them
) )
logger.Info("init statistics succeeded")
} }
} }
@@ -86,10 +92,14 @@ func initConfig() {
appConfig := &config.Config{} appConfig := &config.Config{}
params := &nacoscli.Params{} params := &nacoscli.Params{}
_ = copier.Copy(params, &nacosConfig.Nacos) _ = copier.Copy(params, &nacosConfig.Nacos)
err = nacoscli.Init(appConfig, params) format, data, err := nacoscli.GetConfig(params)
if err != nil { if err != nil {
panic(fmt.Sprintf("connect to configuration center err, %v", err)) panic(fmt.Sprintf("connect to configuration center err, %v", err))
} }
err = conf.ParseConfigData(data, format, appConfig)
if err != nil {
panic(fmt.Sprintf("parse configuration data err, %v", err))
}
if appConfig.App.Name == "" { if appConfig.App.Name == "" {
panic("read the config from center error, config data is empty") panic("read the config from center error, config data is empty")
} }
@@ -108,5 +118,4 @@ func initConfig() {
if version != "" { if version != "" {
config.Get().App.Version = version config.Get().App.Version = version
} }
//fmt.Println(config.Show())
} }

View File

@@ -17,10 +17,10 @@ import (
// @name Authorization // @name Authorization
// @description Type "Bearer your-jwt-token" to Value // @description Type "Bearer your-jwt-token" to Value
func main() { func main() {
initial.Config() initial.InitApp()
servers := initial.RegisterServers() services := initial.CreateServices()
closes := initial.RegisterClose(servers) closes := initial.Close(services)
a := app.New(servers, closes) a := app.New(services, closes)
a.Run() a.Run()
} }

View File

@@ -11,8 +11,8 @@ import (
"github.com/zhufuyi/sponge/pkg/tracer" "github.com/zhufuyi/sponge/pkg/tracer"
) )
// RegisterClose register for released resources // Close releasing resources after service exit
func RegisterClose(servers []app.IServer) []app.Close { func Close(servers []app.IServer) []app.Close {
var closes []app.Close var closes []app.Close
// close server // close server

View File

@@ -16,14 +16,14 @@ import (
"github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos" "github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos"
) )
// RegisterServers register for the app service // CreateServices create grpc or http service
func RegisterServers() []app.IServer { func CreateServices() []app.IServer {
var cfg = config.Get() var cfg = config.Get()
var servers []app.IServer var servers []app.IServer
// creating http service // creating http service
httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port) httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port)
httpRegistry, httpInstance := registryService("http", cfg.App.Host, cfg.HTTP.Port) httpRegistry, httpInstance := registerService("http", cfg.App.Host, cfg.HTTP.Port)
httpServer := server.NewHTTPServer_pbExample(httpAddr, httpServer := server.NewHTTPServer_pbExample(httpAddr,
server.WithHTTPReadTimeout(time.Second*time.Duration(cfg.HTTP.ReadTimeout)), server.WithHTTPReadTimeout(time.Second*time.Duration(cfg.HTTP.ReadTimeout)),
server.WithHTTPWriteTimeout(time.Second*time.Duration(cfg.HTTP.WriteTimeout)), server.WithHTTPWriteTimeout(time.Second*time.Duration(cfg.HTTP.WriteTimeout)),
@@ -35,7 +35,7 @@ func RegisterServers() []app.IServer {
return servers return servers
} }
func registryService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) { func registerService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) {
var ( var (
instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port) instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port)
cfg = config.Get() cfg = config.Get()

View File

@@ -13,6 +13,7 @@ import (
//"github.com/zhufuyi/sponge/internal/model" //"github.com/zhufuyi/sponge/internal/model"
"github.com/zhufuyi/sponge/pkg/conf"
"github.com/zhufuyi/sponge/pkg/logger" "github.com/zhufuyi/sponge/pkg/logger"
"github.com/zhufuyi/sponge/pkg/nacoscli" "github.com/zhufuyi/sponge/pkg/nacoscli"
"github.com/zhufuyi/sponge/pkg/stat" "github.com/zhufuyi/sponge/pkg/stat"
@@ -27,8 +28,8 @@ var (
enableConfigCenter bool enableConfigCenter bool
) )
// Config initial app configuration // InitApp initial app configuration
func Config() { func InitApp() {
initConfig() initConfig()
cfg := config.Get() cfg := config.Get()
@@ -41,9 +42,12 @@ func Config() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
logger.Debug(config.Show())
logger.Info("init logger succeeded")
// initializing database // initializing database
//model.InitMysql() //model.InitMysql()
//logger.Info("init mysql succeeded")
//model.InitCache(cfg.App.CacheType) //model.InitCache(cfg.App.CacheType)
// initializing tracing // initializing tracing
@@ -56,6 +60,7 @@ func Config() {
strconv.Itoa(cfg.Jaeger.AgentPort), strconv.Itoa(cfg.Jaeger.AgentPort),
cfg.App.TracingSamplingRate, cfg.App.TracingSamplingRate,
) )
logger.Info("init tracer succeeded")
} }
// initializing the print system and process resources // initializing the print system and process resources
@@ -64,6 +69,7 @@ func Config() {
stat.WithLog(logger.Get()), stat.WithLog(logger.Get()),
stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them
) )
logger.Info("init statistics succeeded")
} }
} }
@@ -87,10 +93,14 @@ func initConfig() {
appConfig := &config.Config{} appConfig := &config.Config{}
params := &nacoscli.Params{} params := &nacoscli.Params{}
_ = copier.Copy(params, &nacosConfig.Nacos) _ = copier.Copy(params, &nacosConfig.Nacos)
err = nacoscli.Init(appConfig, params) format, data, err := nacoscli.GetConfig(params)
if err != nil { if err != nil {
panic(fmt.Sprintf("connect to configuration center err, %v", err)) panic(fmt.Sprintf("connect to configuration center err, %v", err))
} }
err = conf.ParseConfigData(data, format, appConfig)
if err != nil {
panic(fmt.Sprintf("parse configuration data err, %v", err))
}
if appConfig.App.Name == "" { if appConfig.App.Name == "" {
panic("read the config from center error, config data is empty") panic("read the config from center error, config data is empty")
} }
@@ -109,5 +119,4 @@ func initConfig() {
if version != "" { if version != "" {
config.Get().App.Version = version config.Get().App.Version = version
} }
//fmt.Println(config.Show())
} }

View File

@@ -8,10 +8,10 @@ import (
) )
func main() { func main() {
initial.Config() initial.InitApp()
servers := initial.RegisterServers() services := initial.CreateServices()
closes := initial.RegisterClose(servers) closes := initial.Close(services)
a := app.New(servers, closes) a := app.New(services, closes)
a.Run() a.Run()
} }

View File

@@ -11,8 +11,8 @@ import (
"github.com/zhufuyi/sponge/pkg/tracer" "github.com/zhufuyi/sponge/pkg/tracer"
) )
// RegisterClose register for released resources // Close releasing resources after service exit
func RegisterClose(servers []app.IServer) []app.Close { func Close(servers []app.IServer) []app.Close {
var closes []app.Close var closes []app.Close
// close server // close server

View File

@@ -16,14 +16,14 @@ import (
"github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos" "github.com/zhufuyi/sponge/pkg/servicerd/registry/nacos"
) )
// RegisterServers register for the app service // CreateServices create grpc or http service
func RegisterServers() []app.IServer { func CreateServices() []app.IServer {
var cfg = config.Get() var cfg = config.Get()
var servers []app.IServer var servers []app.IServer
// creating http service // creating http service
httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port) httpAddr := ":" + strconv.Itoa(cfg.HTTP.Port)
httpRegistry, httpInstance := registryService("http", cfg.App.Host, cfg.HTTP.Port) httpRegistry, httpInstance := registerService("http", cfg.App.Host, cfg.HTTP.Port)
httpServer := server.NewHTTPServer(httpAddr, httpServer := server.NewHTTPServer(httpAddr,
server.WithHTTPReadTimeout(time.Second*time.Duration(cfg.HTTP.ReadTimeout)), server.WithHTTPReadTimeout(time.Second*time.Duration(cfg.HTTP.ReadTimeout)),
server.WithHTTPWriteTimeout(time.Second*time.Duration(cfg.HTTP.WriteTimeout)), server.WithHTTPWriteTimeout(time.Second*time.Duration(cfg.HTTP.WriteTimeout)),
@@ -34,7 +34,7 @@ func RegisterServers() []app.IServer {
// creating grpc service // creating grpc service
grpcAddr := ":" + strconv.Itoa(cfg.Grpc.Port) grpcAddr := ":" + strconv.Itoa(cfg.Grpc.Port)
grpcRegistry, grpcInstance := registryService("grpc", cfg.App.Host, cfg.Grpc.Port) grpcRegistry, grpcInstance := registerService("grpc", cfg.App.Host, cfg.Grpc.Port)
grpcServer := server.NewGRPCServer(grpcAddr, grpcServer := server.NewGRPCServer(grpcAddr,
server.WithGrpcReadTimeout(time.Duration(cfg.Grpc.ReadTimeout)*time.Second), server.WithGrpcReadTimeout(time.Duration(cfg.Grpc.ReadTimeout)*time.Second),
server.WithGrpcWriteTimeout(time.Duration(cfg.Grpc.WriteTimeout)*time.Second), server.WithGrpcWriteTimeout(time.Duration(cfg.Grpc.WriteTimeout)*time.Second),
@@ -45,7 +45,7 @@ func RegisterServers() []app.IServer {
return servers return servers
} }
func registryService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) { func registerService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) {
var ( var (
instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port) instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port)
cfg = config.Get() cfg = config.Get()

View File

@@ -12,6 +12,7 @@ import (
"github.com/zhufuyi/sponge/internal/config" "github.com/zhufuyi/sponge/internal/config"
"github.com/zhufuyi/sponge/internal/model" "github.com/zhufuyi/sponge/internal/model"
"github.com/zhufuyi/sponge/pkg/conf"
"github.com/zhufuyi/sponge/pkg/logger" "github.com/zhufuyi/sponge/pkg/logger"
"github.com/zhufuyi/sponge/pkg/nacoscli" "github.com/zhufuyi/sponge/pkg/nacoscli"
"github.com/zhufuyi/sponge/pkg/stat" "github.com/zhufuyi/sponge/pkg/stat"
@@ -26,8 +27,8 @@ var (
enableConfigCenter bool enableConfigCenter bool
) )
// Config initial app configuration // InitApp initial app configuration
func Config() { func InitApp() {
initConfig() initConfig()
cfg := config.Get() cfg := config.Get()
@@ -40,9 +41,12 @@ func Config() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
logger.Debug(config.Show())
logger.Info("init logger succeeded")
// initializing database // initializing database
model.InitMysql() model.InitMysql()
logger.Info("init mysql succeeded")
model.InitCache(cfg.App.CacheType) model.InitCache(cfg.App.CacheType)
// initializing tracing // initializing tracing
@@ -55,6 +59,7 @@ func Config() {
strconv.Itoa(cfg.Jaeger.AgentPort), strconv.Itoa(cfg.Jaeger.AgentPort),
cfg.App.TracingSamplingRate, cfg.App.TracingSamplingRate,
) )
logger.Info("init tracer succeeded")
} }
// initializing the print system and process resources // initializing the print system and process resources
@@ -63,6 +68,7 @@ func Config() {
stat.WithLog(logger.Get()), stat.WithLog(logger.Get()),
stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them stat.WithAlarm(), // invalid if it is windows, the default threshold for cpu and memory is 0.8, you can modify them
) )
logger.Info("init statistics succeeded")
} }
} }
@@ -86,10 +92,14 @@ func initConfig() {
appConfig := &config.Config{} appConfig := &config.Config{}
params := &nacoscli.Params{} params := &nacoscli.Params{}
_ = copier.Copy(params, &nacosConfig.Nacos) _ = copier.Copy(params, &nacosConfig.Nacos)
err = nacoscli.Init(appConfig, params) format, data, err := nacoscli.GetConfig(params)
if err != nil { if err != nil {
panic(fmt.Sprintf("connect to configuration center err, %v", err)) panic(fmt.Sprintf("connect to configuration center err, %v", err))
} }
err = conf.ParseConfigData(data, format, appConfig)
if err != nil {
panic(fmt.Sprintf("parse configuration data err, %v", err))
}
if appConfig.App.Name == "" { if appConfig.App.Name == "" {
panic("read the config from center error, config data is empty") panic("read the config from center error, config data is empty")
} }
@@ -108,5 +118,4 @@ func initConfig() {
if version != "" { if version != "" {
config.Get().App.Version = version config.Get().App.Version = version
} }
//fmt.Println(config.Show())
} }

View File

@@ -17,10 +17,10 @@ import (
// @name Authorization // @name Authorization
// @description Type "Bearer your-jwt-token" to Value // @description Type "Bearer your-jwt-token" to Value
func main() { func main() {
initial.Config() initial.InitApp()
servers := initial.RegisterServers() services := initial.CreateServices()
closes := initial.RegisterClose(servers) closes := initial.Close(services)
a := app.New(servers, closes) a := app.New(services, closes)
a.Run() a.Run()
} }

2
go.mod
View File

@@ -1,6 +1,6 @@
module github.com/zhufuyi/sponge module github.com/zhufuyi/sponge
go 1.19 go 1.20
require ( require (
github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/DATA-DOG/go-sqlmock v1.5.0

View File

@@ -123,3 +123,13 @@ func replaceDSN(str string) string {
return fmt.Sprintf("%s******%s", data[:start+1], data[end:]) return fmt.Sprintf("%s******%s", data[:start+1], data[end:])
} }
// ParseConfigData parse data to struct
func ParseConfigData(data []byte, format string, obj interface{}) error {
viper.SetConfigType(format)
err := viper.ReadConfig(bytes.NewBuffer(data))
if err != nil {
return err
}
return viper.Unmarshal(obj)
}

View File

@@ -74,3 +74,14 @@ func TestWatch(t *testing.T) {
_ = os.WriteFile("test.yml", content, 0666) // recovery documents _ = os.WriteFile("test.yml", content, 0666) // recovery documents
time.Sleep(time.Millisecond * 100) time.Sleep(time.Millisecond * 100)
} }
func TestParseConfigData(t *testing.T) {
conf := make(map[string]interface{})
data, _ := os.ReadFile("test.yml")
err := ParseConfigData(data, "yaml", &conf)
if err != nil {
t.Error(err)
return
}
t.Log(conf)
}

View File

@@ -3,10 +3,10 @@ package mysql
import ( import (
"context" "context"
"errors" "errors"
"github.com/stretchr/testify/assert"
"testing" "testing"
"time" "time"
"github.com/stretchr/testify/assert"
"go.uber.org/zap" "go.uber.org/zap"
"gorm.io/gorm/logger" "gorm.io/gorm/logger"
) )

View File

@@ -1,10 +1,11 @@
package query package query
import ( import (
"github.com/stretchr/testify/assert"
"reflect" "reflect"
"strings" "strings"
"testing" "testing"
"github.com/stretchr/testify/assert"
) )
func TestPage(t *testing.T) { func TestPage(t *testing.T) {

View File

@@ -1,6 +1,6 @@
## nacoscli ## nacoscli
Get the configuration from the nacos configuration center and parse it into a structure. Get the configuration from the nacos configuration center.
### Example of use ### Example of use
@@ -17,7 +17,7 @@ Get the configuration from the nacos configuration center and parse it into a st
DataId: "user-srv.yml", DataId: "user-srv.yml",
Format: "yaml", Format: "yaml",
} }
err := nacoscli.Init(a, params) _, _, err = GetConfig(params)
// Way 2: setting up ClientConfig and ServerConfig // Way 2: setting up ClientConfig and ServerConfig
a = &config{} a = &config{}
@@ -39,7 +39,7 @@ Get the configuration from the nacos configuration center and parse it into a st
Port: 8848, Port: 8848,
}, },
} }
err = nacoscli.Init(a, params, _, _, err = GetConfig(params,
WithClientConfig(clientConfig), WithClientConfig(clientConfig),
WithServerConfigs(serverConfigs), WithServerConfigs(serverConfigs),
) )

View File

@@ -2,7 +2,6 @@
package nacoscli package nacoscli
import ( import (
"bytes"
"errors" "errors"
"fmt" "fmt"
"os" "os"
@@ -12,7 +11,6 @@ import (
"github.com/nacos-group/nacos-sdk-go/v2/clients/naming_client" "github.com/nacos-group/nacos-sdk-go/v2/clients/naming_client"
"github.com/nacos-group/nacos-sdk-go/v2/common/constant" "github.com/nacos-group/nacos-sdk-go/v2/common/constant"
"github.com/nacos-group/nacos-sdk-go/v2/vo" "github.com/nacos-group/nacos-sdk-go/v2/vo"
"github.com/spf13/viper"
) )
// Params nacos parameters // Params nacos parameters
@@ -88,11 +86,11 @@ func setParams(params *Params, opts ...Option) {
} }
} }
// Init get configuration from nacos and parse to struct, use for configuration center // GetConfig get configuration from nacos
func Init(obj interface{}, params *Params, opts ...Option) error { func GetConfig(params *Params, opts ...Option) (string, []byte, error) {
err := params.valid() err := params.valid()
if err != nil { if err != nil {
return err return "", nil, err
} }
setParams(params, opts...) setParams(params, opts...)
@@ -105,30 +103,26 @@ func Init(obj interface{}, params *Params, opts ...Option) error {
}, },
) )
if err != nil { if err != nil {
return err return "", nil, err
} }
// read config content // read config content
content, err := configClient.GetConfig(vo.ConfigParam{ data, err := configClient.GetConfig(vo.ConfigParam{
DataId: params.DataID, DataId: params.DataID,
Group: params.Group, Group: params.Group,
}) })
if err != nil { if err != nil {
return err return "", nil, err
} }
// parse config return params.Format, []byte(data), err
viper.SetConfigType(params.Format) }
err = viper.ReadConfig(bytes.NewBuffer([]byte(content)))
if err != nil {
return err
}
err = viper.Unmarshal(obj)
if err != nil {
return err
}
return nil // Init get configuration from nacos and parse to struct, use for configuration center
//
// Deprecated: use GetConfig instead.
func Init(obj interface{}, params *Params, opts ...Option) error {
return errors.New("not implemented")
} }
// NewNamingClient create a service registration and discovery of nacos client. // NewNamingClient create a service registration and discovery of nacos client.

View File

@@ -19,7 +19,7 @@ var (
) )
func TestParse(t *testing.T) { func TestParse(t *testing.T) {
conf := new(map[string]interface{}) //conf := new(map[string]interface{})
params := &Params{ params := &Params{
IPAddr: ipAddr, IPAddr: ipAddr,
Port: uint64(port), Port: uint64(port),
@@ -30,11 +30,11 @@ func TestParse(t *testing.T) {
} }
utils.SafeRunWithTimeout(time.Second*2, func(cancel context.CancelFunc) { utils.SafeRunWithTimeout(time.Second*2, func(cancel context.CancelFunc) {
err := Init(conf, params) format, data, err := GetConfig(params)
t.Log(err, conf) t.Log(err, format, data)
}) })
conf = new(map[string]interface{}) //conf = new(map[string]interface{})
params = &Params{ params = &Params{
Group: "dev", Group: "dev",
DataID: "serverNameExample.yml", DataID: "serverNameExample.yml",
@@ -54,12 +54,12 @@ func TestParse(t *testing.T) {
}, },
} }
utils.SafeRunWithTimeout(time.Second*2, func(cancel context.CancelFunc) { utils.SafeRunWithTimeout(time.Second*2, func(cancel context.CancelFunc) {
err := Init(conf, params, format, data, err := GetConfig(params,
WithClientConfig(clientConfig), WithClientConfig(clientConfig),
WithServerConfigs(serverConfigs), WithServerConfigs(serverConfigs),
WithAuth("foo", "bar"), WithAuth("foo", "bar"),
) )
t.Log(err, conf) t.Log(err, format, data)
}) })
} }
@@ -99,6 +99,6 @@ func TestError(t *testing.T) {
err = p.valid() err = p.valid()
assert.Error(t, err) assert.Error(t, err)
err = Init(nil, p) _, _, err = GetConfig(&Params{})
assert.Error(t, err) assert.Error(t, err)
} }

View File

@@ -7,7 +7,7 @@ Service registry, corresponding to service [discovery](../discovery) corresponds
```go ```go
import "github.com/zhufuyi/sponge/pkg/servicerd/registry" import "github.com/zhufuyi/sponge/pkg/servicerd/registry"
func registryService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) { func registerService(scheme string, host string, port int) (registry.Registry, *registry.ServiceInstance) {
var ( var (
instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port) instanceEndpoint = fmt.Sprintf("%s://%s:%d", scheme, host, port)
cfg = config.Get() cfg = config.Get()
@@ -74,7 +74,7 @@ func registryService(scheme string, host string, port int) (registry.Registry, *
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
iRegistry, serviceInstance := registryService("http", "127.0.0.1", 8080) iRegistry, serviceInstance := registerService("http", "127.0.0.1", 8080)
// register service // register service
ctx, _ := context.WithTimeout(context.Background(), 3*time.Second) ctx, _ := context.WithTimeout(context.Background(), 3*time.Second)
@@ -88,4 +88,3 @@ func registryService(scheme string, host string, port int) (registry.Registry, *
return err return err
} }
``` ```

View File

@@ -182,7 +182,7 @@ message List{{.TableName}}ByIDsReply {
message List{{.TableName}}ByLastIDRequest { message List{{.TableName}}ByLastIDRequest {
uint64 lastID = 1; // last id uint64 lastID = 1; // last id
uint32 limit = 2; // page size uint32 limit = 2 [(validate.rules).uint32.gt = 0]; // page size
string sort = 3; // sort by column name of table, default is -id, the - sign indicates descending order. string sort = 3; // sort by column name of table, default is -id, the - sign indicates descending order.
} }
@@ -464,7 +464,7 @@ message List{{.TableName}}ByIDsReply {
message List{{.TableName}}ByLastIDRequest { message List{{.TableName}}ByLastIDRequest {
uint64 lastID = 1 [(tagger.tags) = "form:\"lastID\""]; // last id uint64 lastID = 1 [(tagger.tags) = "form:\"lastID\""]; // last id
uint32 limit = 2 [(tagger.tags) = "form:\"limit\""]; // page size uint32 limit = 2 [(validate.rules).uint32.gt = 0, (tagger.tags) = "form:\"limit\""]; // page size
string sort = 3 [(tagger.tags) = "form:\"sort\""]; // sort by column name of table, default is -id, the - sign indicates descending order. string sort = 3 [(tagger.tags) = "form:\"sort\""]; // sort by column name of table, default is -id, the - sign indicates descending order.
} }