From 36218ea9598519958e9627b6d80edb3e0b9b0cde Mon Sep 17 00:00:00 2001 From: hunjixin <1084400399@qq.com> Date: Sat, 9 Oct 2021 14:04:44 +0800 Subject: [PATCH 1/2] rm gin --- api/controller/modules.go | 150 -------------------------------------- go.mod | 1 - log/log.go | 73 +------------------ 3 files changed, 1 insertion(+), 223 deletions(-) delete mode 100644 api/controller/modules.go diff --git a/api/controller/modules.go b/api/controller/modules.go deleted file mode 100644 index c4af6ffd..00000000 --- a/api/controller/modules.go +++ /dev/null @@ -1,150 +0,0 @@ -package controller - -import ( - "bytes" - "encoding/json" - "fmt" - "net/http" - "reflect" - "strconv" - - "github.com/gin-gonic/gin" - "golang.org/x/xerrors" - - "github.com/filecoin-project/venus-messager/log" - "github.com/filecoin-project/venus-messager/service" - "github.com/filecoin-project/venus-messager/types" -) - -//-32700 ---> parse error. not well formed -//-32701 ---> parse error. unsupported encoding -//-32702 ---> parse error. invalid character for encoding -//-32600 ---> server error. invalid xml-rpc. not conforming to spec. -//-32601 ---> server error. requested method not found -//-32602 ---> server error. invalid method parameters -//-32603 ---> server error. internal xml-rpc error -//-32500 ---> application error -//-32400 ---> system error -//-32300 ---> transport error - -const ( - parseError = -32700 // nolint - serverError = -32600 - applicationError = -32500 - systemError = -32400 // nolint - transportError = -32300 // nolint -) - -var errorInterface = reflect.TypeOf((*error)(nil)).Elem() - -func SetupController(router *gin.Engine, sMap service.ServiceMap, log *log.Logger) error { - v1 := router.Group("rpc/v0") - var ts []reflect.Type - ts = append(ts, reflect.TypeOf(Message{}), reflect.TypeOf(Address{}), reflect.TypeOf(SharedParamsCtrl{}), - reflect.TypeOf(NodeController{})) - return registerController(v1, sMap, log, ts) -} - -type RespError struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type JsonRpcResponse struct { - ID int64 `json:"id,omitempty"` - Result interface{} `json:"result,omitempty"` - Error *RespError `json:"error,omitempty"` -} - -func registerController(v1 *gin.RouterGroup, sMap service.ServiceMap, log *log.Logger, controllers []reflect.Type) error { - for i := range controllers { - controllerT := controllers[i] - methodNumber := controllerT.NumMethod() - - for i := 0; i < methodNumber; i++ { - method := controllerT.Method(i) - methodName := method.Name - inParamsNumber := method.Type.NumIn() - resultParamsNumber := method.Type.NumOut() - if resultParamsNumber != 2 { - return xerrors.Errorf("controllerT method must has 2 return as result, first one is value and second is error") - } - - if !method.Type.Out(1).Implements(errorInterface) { - return xerrors.Errorf("second result must be a error") - } - - //{"jsonrpc": "2.0", "result": -19, "id": 2} - v1.Handle(http.MethodPost, methodName+"/:id", func(c *gin.Context) { - idStr := c.Param("id") - id, err := strconv.ParseInt(idStr, 10, 64) - if err != nil { - c.String(http.StatusServiceUnavailable, "error id number in request body") - return - } - - params := c.Request.Context().Value(types.Arguments{}).(map[string]interface{})["params"].([]byte) - paramsDecoder := json.NewDecoder(bytes.NewReader(params)) - _, err = paramsDecoder.Token() - if err != nil { - c.String(http.StatusServiceUnavailable, "body not a json array") - return - } - - //controller - controller := reflect.New(controllerT).Elem() - //todo how to inject filed values? - baseController := BaseController{ - //Context: c, - Logger: log, - } - - controller.Field(0).Set(reflect.ValueOf(baseController)) - for i := 1; i < controller.NumField(); i++ { - if val, ok := sMap[controller.Field(i).Type()]; ok { - controller.Field(i).Set(reflect.ValueOf(val)) - } - } - - var inParams []reflect.Value - inParams = append(inParams, controller) - inParams = append(inParams, reflect.ValueOf(c.Request.Context())) - for i := 2; i < inParamsNumber; i++ { - argT := method.Type.In(i) - arg := reflect.New(argT) - err := paramsDecoder.Decode(arg.Interface()) - if err != nil { - c.JSON(http.StatusServiceUnavailable, JsonRpcResponse{ - ID: id, - Error: &RespError{ - Code: serverError, - Message: fmt.Sprintf("expect type %t, but failed %v", argT, err), - }, - }) - } - inParams = append(inParams, arg.Elem()) - } - - out := method.Func.Call(inParams) - - //result - if out[1].IsNil() { - c.JSON(http.StatusOK, JsonRpcResponse{ - ID: id, - Result: out[0].Interface(), - }) - } else { - err := out[1].Interface() - c.JSON(http.StatusServiceUnavailable, JsonRpcResponse{ - ID: id, - Error: &RespError{ - Code: applicationError, - Message: err.(error).Error(), - }, - }) - } - }) - } - } - return nil -} diff --git a/go.mod b/go.mod index de6c5728..243c162b 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,6 @@ require ( github.com/filecoin-project/venus-auth v1.2.2-0.20210716071053-565a8999f9e5 github.com/filecoin-project/venus-wallet v1.1.0 github.com/gbrlsnchs/jwt/v3 v3.0.0 - github.com/gin-gonic/gin v1.6.3 github.com/google/uuid v1.2.0 github.com/hraban/lrucache v0.0.0-20201130153820-17052bf09781 // indirect github.com/hunjixin/automapper v0.0.0-20191127090318-9b979ce72ce2 diff --git a/log/log.go b/log/log.go index f96f0078..229f9390 100644 --- a/log/log.go +++ b/log/log.go @@ -2,15 +2,9 @@ package log import ( "context" - "fmt" - "math" - "net/http" - "os" - "time" - - "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" "golang.org/x/xerrors" + "os" "github.com/filecoin-project/venus-messager/config" ) @@ -62,68 +56,3 @@ func (logger *Logger) SetLogLevel(ctx context.Context, levelStr string) error { // copy from https://github.com/toorop/gin-logrus/blob/master/logger.go var timeFormat = "2006-01-02 15:04:05" - -// GinLogrus is the logrus logger handler -func GinLogrus(logger logrus.FieldLogger, notLogged ...string) gin.HandlerFunc { - hostname, err := os.Hostname() - if err != nil { - hostname = "unknow" - } - - var skip map[string]struct{} - - if length := len(notLogged); length > 0 { - skip = make(map[string]struct{}, length) - - for _, p := range notLogged { - skip[p] = struct{}{} - } - } - - return func(c *gin.Context) { - // other handler can change c.Path so: - path := c.Request.URL.Path - start := time.Now() - c.Next() - stop := time.Since(start) - latency := int(math.Ceil(float64(stop.Nanoseconds()) / 1000000.0)) - statusCode := c.Writer.Status() - clientIP := c.ClientIP() - clientUserAgent := c.Request.UserAgent() - referer := c.Request.Referer() - dataLength := c.Writer.Size() - if dataLength < 0 { - dataLength = 0 - } - - if _, ok := skip[path]; ok { - return - } - - entry := logger.WithFields(logrus.Fields{ - "hostname": hostname, - "statusCode": statusCode, - "latency": latency, // time to process - "clientIP": clientIP, - "method": c.Request.Method, - "path": path, - "referer": referer, - "dataLength": dataLength, - "userAgent": clientUserAgent, - }) - - if len(c.Errors) > 0 { - entry.Error(c.Errors.ByType(gin.ErrorTypePrivate).String()) - } else { - msg := fmt.Sprintf("%s - %s [%s] \"%s %s\" %d %d \"%s\" \"%s\" (%dms)", clientIP, hostname, - time.Now().Format(timeFormat), c.Request.Method, path, statusCode, dataLength, referer, clientUserAgent, latency) - if statusCode >= http.StatusInternalServerError { - entry.Error(msg) - } else if statusCode >= http.StatusBadRequest { - entry.Warn(msg) - } else { - entry.Debug(msg) - } - } - } -} From aadfb837845373e98cdfe41cccafb003a7097996 Mon Sep 17 00:00:00 2001 From: hunjixin <1084400399@qq.com> Date: Sat, 9 Oct 2021 14:30:18 +0800 Subject: [PATCH 2/2] make lint happy --- log/log.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/log/log.go b/log/log.go index 229f9390..0edce2a8 100644 --- a/log/log.go +++ b/log/log.go @@ -47,12 +47,3 @@ func (logger *Logger) SetLogLevel(ctx context.Context, levelStr string) error { return nil } - -// 2016-09-27 09:38:21.541541811 +0200 CEST -// 127.0.0.1 - frank [2021-04-09 15:58:00] -// "GET /apache_pb.gif HTTP/1.0" 200 2326 -// "http://www.example.com/start.html" -// "Mozilla/4.08 [en] (Win98; I ;Nav)" -// copy from https://github.com/toorop/gin-logrus/blob/master/logger.go - -var timeFormat = "2006-01-02 15:04:05"