gf/contrib/rpc/grpcx/grpcx_grpc_server_config.go

117 lines
3.4 KiB
Go

// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://github.com/gogf/gf.
package grpcx
import (
"context"
"fmt"
"google.golang.org/grpc"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/glog"
"github.com/gogf/gf/v2/util/gconv"
)
// GrpcServerConfig is the configuration for server.
type GrpcServerConfig struct {
// (optional) Name for current service.
Name string
// (optional) Single address for server listening, use `:0` or `ip:0` to serve random port.
Address string
// (optional) Logger for server.
Logger *glog.Logger
// (optional) LogPath specifies the directory for storing logging files.
LogPath string
// (optional) LogStdout specifies whether printing logging content to stdout.
LogStdout bool
// (optional) ErrorStack specifies whether logging stack information when error.
ErrorStack bool
// (optional) ErrorLogEnabled enables error logging content to files.
ErrorLogEnabled bool
// (optional) ErrorLogPattern specifies the error log file pattern like: error-{Ymd}.log
ErrorLogPattern string
// (optional) AccessLogEnabled enables access logging content to file.
AccessLogEnabled bool
// (optional) AccessLogPattern specifies the error log file pattern like: access-{Ymd}.log
AccessLogPattern string
// (optional) Endpoints are custom endpoints for service register, it uses Address if empty.
Endpoints []string
// (optional) GRPC Server options.
Options []grpc.ServerOption
}
// NewConfig creates and returns a ServerConfig object with default configurations.
// Note that, do not define this default configuration to local package variable, as there are
// some pointer attributes that may be shared in different servers.
func (s modServer) NewConfig() *GrpcServerConfig {
var (
err error
ctx = context.TODO()
config = &GrpcServerConfig{
Name: defaultServerName,
Logger: glog.New(),
LogStdout: true,
ErrorLogEnabled: true,
ErrorLogPattern: "error-{Ymd}.log",
AccessLogEnabled: false,
AccessLogPattern: "access-{Ymd}.log",
}
)
// Reading configuration file and updating the configured keys.
if g.Cfg().Available(ctx) {
// Server attributes configuration.
serverConfigMap := g.Cfg().MustGet(ctx, configNodeNameGrpcServer).Map()
if len(serverConfigMap) == 0 {
return config
}
if err = gconv.Struct(serverConfigMap, &config); err != nil {
g.Log().Error(ctx, err)
return config
}
// Server logger configuration checks.
serverLoggerConfigMap := g.Cfg().MustGet(
ctx,
fmt.Sprintf(`%s.logger`, configNodeNameGrpcServer),
).Map()
if len(serverLoggerConfigMap) == 0 && len(serverConfigMap) > 0 {
serverLoggerConfigMap = gconv.Map(serverConfigMap["logger"])
}
if len(serverLoggerConfigMap) > 0 {
if err = config.Logger.SetConfigWithMap(serverLoggerConfigMap); err != nil {
panic(err)
}
}
}
return config
}
// SetWithMap changes current configuration with map.
// This is commonly used for changing several configurations of current object.
func (c *GrpcServerConfig) SetWithMap(m g.Map) error {
return gconv.Struct(m, c)
}
// MustSetWithMap acts as SetWithMap but panics if error occurs.
func (c *GrpcServerConfig) MustSetWithMap(m g.Map) {
err := c.SetWithMap(m)
if err != nil {
panic(err)
}
}