From 1520dae223c5f52a3323077bdfea8f52c5a77693 Mon Sep 17 00:00:00 2001 From: orgin Date: Wed, 17 Aug 2022 14:28:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=BF=E6=8D=A2ioutil=E5=8C=85=E4=B8=BAos/io?= =?UTF-8?q?=E5=8C=85=EF=BC=8C=E5=AE=83=E5=9C=A81.16=E5=BC=80=E5=A7=8B?= =?UTF-8?q?=E8=A2=AB=E5=BC=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cluster/parsecfg.go | 10 +- node/node.go | 153 ++++++++-------- .../httpclientmodule/httpclientpoolmodule.go | 6 +- sysservice/httpservice/httpservice.go | 170 +++++++++--------- 4 files changed, 168 insertions(+), 171 deletions(-) diff --git a/cluster/parsecfg.go b/cluster/parsecfg.go index 13143ab..87d6492 100644 --- a/cluster/parsecfg.go +++ b/cluster/parsecfg.go @@ -5,7 +5,7 @@ import ( "github.com/duanhf2012/origin/log" "github.com/duanhf2012/origin/rpc" jsoniter "github.com/json-iterator/go" - "io/ioutil" + "os" "strings" ) @@ -18,7 +18,7 @@ type NodeInfoList struct { func (cls *Cluster) ReadClusterConfig(filepath string) (*NodeInfoList, error) { c := &NodeInfoList{} - d, err := ioutil.ReadFile(filepath) + d, err := os.ReadFile(filepath) if err != nil { return nil, err } @@ -33,7 +33,7 @@ func (cls *Cluster) ReadClusterConfig(filepath string) (*NodeInfoList, error) { func (cls *Cluster) readServiceConfig(filepath string) (interface{}, map[string]interface{}, map[int]map[string]interface{}, error) { c := map[string]interface{}{} //读取配置 - d, err := ioutil.ReadFile(filepath) + d, err := os.ReadFile(filepath) if err != nil { return nil, nil, nil, err } @@ -69,7 +69,7 @@ func (cls *Cluster) readLocalClusterConfig(nodeId int) ([]NodeInfo, []NodeInfo, var nodeInfoList []NodeInfo var masterDiscoverNodeList []NodeInfo clusterCfgPath := strings.TrimRight(configDir, "/") + "/cluster" - fileInfoList, err := ioutil.ReadDir(clusterCfgPath) + fileInfoList, err := os.ReadDir(clusterCfgPath) if err != nil { return nil, nil, fmt.Errorf("Read dir %s is fail :%+v", clusterCfgPath, err) } @@ -111,7 +111,7 @@ func (cls *Cluster) readLocalClusterConfig(nodeId int) ([]NodeInfo, []NodeInfo, func (cls *Cluster) readLocalService(localNodeId int) error { clusterCfgPath := strings.TrimRight(configDir, "/") + "/cluster" - fileInfoList, err := ioutil.ReadDir(clusterCfgPath) + fileInfoList, err := os.ReadDir(clusterCfgPath) if err != nil { return fmt.Errorf("Read dir %s is fail :%+v", clusterCfgPath, err) } diff --git a/node/node.go b/node/node.go index 5697686..332ab62 100644 --- a/node/node.go +++ b/node/node.go @@ -8,9 +8,9 @@ import ( "github.com/duanhf2012/origin/log" "github.com/duanhf2012/origin/profiler" "github.com/duanhf2012/origin/service" - "github.com/duanhf2012/origin/util/timer" "github.com/duanhf2012/origin/util/buildtime" - "io/ioutil" + "github.com/duanhf2012/origin/util/timer" + "io" slog "log" "net/http" _ "net/http/pprof" @@ -34,30 +34,30 @@ var logPath string func init() { - closeSig = make(chan bool,1) + closeSig = make(chan bool, 1) sig = make(chan os.Signal, 3) - signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM,syscall.Signal(10)) + signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM, syscall.Signal(10)) - console.RegisterCommandBool("help",false,"<-help> This help.",usage) - console.RegisterCommandString("name","","<-name nodeName> Node's name.",setName) - console.RegisterCommandString("start","","<-start nodeid=nodeid> Run originserver.",startNode) - console.RegisterCommandString("stop","","<-stop nodeid=nodeid> Stop originserver process.",stopNode) - console.RegisterCommandString("config","","<-config path> Configuration file path.",setConfigPath) + console.RegisterCommandBool("help", false, "<-help> This help.", usage) + console.RegisterCommandString("name", "", "<-name nodeName> Node's name.", setName) + console.RegisterCommandString("start", "", "<-start nodeid=nodeid> Run originserver.", startNode) + console.RegisterCommandString("stop", "", "<-stop nodeid=nodeid> Stop originserver process.", stopNode) + console.RegisterCommandString("config", "", "<-config path> Configuration file path.", setConfigPath) console.RegisterCommandString("console", "", "<-console true|false> Turn on or off screen log output.", openConsole) console.RegisterCommandString("loglevel", "debug", "<-loglevel debug|release|warning|error|fatal> Set loglevel.", setLevel) console.RegisterCommandString("logpath", "", "<-logpath path> Set log file path.", setLogPath) - console.RegisterCommandString("pprof","","<-pprof ip:port> Open performance analysis.",setPprof) + console.RegisterCommandString("pprof", "", "<-pprof ip:port> Open performance analysis.", setPprof) } -func usage(val interface{}) error{ +func usage(val interface{}) error { ret := val.(bool) if ret == false { return nil } - if len(buildtime.GetBuildDateTime())>0 { - fmt.Fprintf(os.Stderr, "Welcome to Origin(build info: %s)\nUsage: originserver [-help] [-start node=1] [-stop] [-config path] [-pprof 0.0.0.0:6060]...\n",buildtime.GetBuildDateTime()) - }else{ + if len(buildtime.GetBuildDateTime()) > 0 { + fmt.Fprintf(os.Stderr, "Welcome to Origin(build info: %s)\nUsage: originserver [-help] [-start node=1] [-stop] [-config path] [-pprof 0.0.0.0:6060]...\n", buildtime.GetBuildDateTime()) + } else { fmt.Fprintf(os.Stderr, "Welcome to Origin\nUsage: originserver [-help] [-start node=1] [-stop] [-config path] [-pprof 0.0.0.0:6060]...\n") } @@ -71,28 +71,28 @@ func setName(val interface{}) error { func setPprof(val interface{}) error { listenAddr := val.(string) - if listenAddr==""{ + if listenAddr == "" { return nil } - go func(){ + go func() { err := http.ListenAndServe(listenAddr, nil) if err != nil { - panic(fmt.Errorf("%+v",err)) + panic(fmt.Errorf("%+v", err)) } }() return nil } -func setConfigPath(val interface{}) error{ +func setConfigPath(val interface{}) error { configPath := val.(string) - if configPath==""{ + if configPath == "" { return nil } _, err := os.Stat(configPath) if err != nil { - return fmt.Errorf("Cannot find file path %s",configPath) + return fmt.Errorf("Cannot find file path %s", configPath) } cluster.SetConfigDir(configPath) @@ -100,16 +100,16 @@ func setConfigPath(val interface{}) error{ return nil } -func getRunProcessPid(nodeId int) (int,error) { - f, err := os.OpenFile(fmt.Sprintf("%s_%d.pid",os.Args[0],nodeId), os.O_RDONLY, 0600) +func getRunProcessPid(nodeId int) (int, error) { + f, err := os.OpenFile(fmt.Sprintf("%s_%d.pid", os.Args[0], nodeId), os.O_RDONLY, 0600) defer f.Close() - if err!= nil { - return 0,err + if err != nil { + return 0, err } - pidByte,errs := ioutil.ReadAll(f) - if errs!=nil { - return 0,errs + pidByte, errs := io.ReadAll(f) + if errs != nil { + return 0, errs } return strconv.Atoi(string(pidByte)) @@ -117,13 +117,13 @@ func getRunProcessPid(nodeId int) (int,error) { func writeProcessPid(nodeId int) { //pid - f, err := os.OpenFile(fmt.Sprintf("%s_%d.pid",os.Args[0],nodeId), os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600) + f, err := os.OpenFile(fmt.Sprintf("%s_%d.pid", os.Args[0], nodeId), os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600) defer f.Close() if err != nil { fmt.Println(err.Error()) os.Exit(-1) } else { - _,err=f.Write([]byte(fmt.Sprintf("%d",os.Getpid()))) + _, err = f.Write([]byte(fmt.Sprintf("%d", os.Getpid()))) if err != nil { fmt.Println(err.Error()) os.Exit(-1) @@ -135,28 +135,28 @@ func GetNodeId() int { return nodeId } -func initNode(id int){ +func initNode(id int) { //1.初始化集群 nodeId = id - err := cluster.GetCluster().Init(GetNodeId(),Setup) + err := cluster.GetCluster().Init(GetNodeId(), Setup) if err != nil { - log.SFatal("read system config is error ",err.Error()) + log.SFatal("read system config is error ", err.Error()) } err = initLog() - if err != nil{ + if err != nil { return } //2.setup service - for _,s := range preSetupService { + for _, s := range preSetupService { //是否配置的service if cluster.GetCluster().IsConfigService(s.GetName()) == false { continue } pServiceCfg := cluster.GetCluster().GetServiceCfg(s.GetName()) - s.Init(s,cluster.GetRpcClient,cluster.GetRpcServer,pServiceCfg) + s.Init(s, cluster.GetRpcClient, cluster.GetRpcServer, pServiceCfg) service.Setup(s) } @@ -165,14 +165,14 @@ func initNode(id int){ service.Init(closeSig) } -func initLog() error{ - if logPath == ""{ +func initLog() error { + if logPath == "" { setLogPath("./log") } localnodeinfo := cluster.GetCluster().GetLocalNodeInfo() filepre := fmt.Sprintf("%s_%d_", localnodeinfo.NodeName, localnodeinfo.NodeId) - logger,err := log.New(logLevel,logPath,filepre,slog.LstdFlags|slog.Lshortfile,10) + logger, err := log.New(logLevel, logPath, filepre, slog.LstdFlags|slog.Lshortfile, 10) if err != nil { fmt.Printf("cannot create log file!\n") return err @@ -183,8 +183,8 @@ func initLog() error{ func Start() { err := console.Run(os.Args) - if err!=nil { - fmt.Printf("%+v\n",err) + if err != nil { + fmt.Printf("%+v\n", err) return } } @@ -196,19 +196,19 @@ func stopNode(args interface{}) error { return nil } - sParam := strings.Split(param,"=") + sParam := strings.Split(param, "=") if len(sParam) != 2 { - return fmt.Errorf("invalid option %s",param) + return fmt.Errorf("invalid option %s", param) } - if sParam[0]!="nodeid" { - return fmt.Errorf("invalid option %s",param) + if sParam[0] != "nodeid" { + return fmt.Errorf("invalid option %s", param) } - nodeId,err:= strconv.Atoi(sParam[1]) + nodeId, err := strconv.Atoi(sParam[1]) if err != nil { - return fmt.Errorf("invalid option %s",param) + return fmt.Errorf("invalid option %s", param) } - processId,err := getRunProcessPid(nodeId) + processId, err := getRunProcessPid(nodeId) if err != nil { return err } @@ -217,26 +217,26 @@ func stopNode(args interface{}) error { return nil } -func startNode(args interface{}) error{ +func startNode(args interface{}) error { //1.解析参数 param := args.(string) if param == "" { return nil } - sParam := strings.Split(param,"=") + sParam := strings.Split(param, "=") if len(sParam) != 2 { - return fmt.Errorf("invalid option %s",param) + return fmt.Errorf("invalid option %s", param) } - if sParam[0]!="nodeid" { - return fmt.Errorf("invalid option %s",param) + if sParam[0] != "nodeid" { + return fmt.Errorf("invalid option %s", param) } - nodeId,err:= strconv.Atoi(sParam[1]) + nodeId, err := strconv.Atoi(sParam[1]) if err != nil { - return fmt.Errorf("invalid option %s",param) + return fmt.Errorf("invalid option %s", param) } - timer.StartTimer(10*time.Millisecond,1000000) + timer.StartTimer(10*time.Millisecond, 1000000) log.SRelease("Start running server.") //2.初始化node initNode(nodeId) @@ -253,7 +253,7 @@ func startNode(args interface{}) error{ //6.监听程序退出信号&性能报告 bRun := true var pProfilerTicker *time.Ticker = &time.Ticker{} - if profilerInterval>0 { + if profilerInterval > 0 { pProfilerTicker = time.NewTicker(profilerInterval) } for bRun { @@ -261,7 +261,7 @@ func startNode(args interface{}) error{ case <-sig: log.SRelease("receipt stop signal.") bRun = false - case <- pProfilerTicker.C: + case <-pProfilerTicker.C: profiler.Report() } } @@ -274,11 +274,10 @@ func startNode(args interface{}) error{ return nil } - -func Setup(s ...service.IService) { - for _,sv := range s { +func Setup(s ...service.IService) { + for _, sv := range s { sv.OnSetup(sv) - preSetupService = append(preSetupService,sv) + preSetupService = append(preSetupService, sv) } } @@ -286,7 +285,7 @@ func GetService(serviceName string) service.IService { return service.GetService(serviceName) } -func SetConfigDir(configDir string){ +func SetConfigDir(configDir string) { configDir = configDir cluster.SetConfigDir(configDir) } @@ -295,58 +294,58 @@ func GetConfigDir() string { return configDir } -func SetSysLog(strLevel string, pathname string, flag int){ - logs,_:= log.New(strLevel,pathname, "", flag,10) +func SetSysLog(strLevel string, pathname string, flag int) { + logs, _ := log.New(strLevel, pathname, "", flag, 10) log.Export(logs) } -func OpenProfilerReport(interval time.Duration){ +func OpenProfilerReport(interval time.Duration) { profilerInterval = interval } -func openConsole(args interface{}) error{ +func openConsole(args interface{}) error { if args == "" { return nil } strOpen := strings.ToLower(strings.TrimSpace(args.(string))) if strOpen == "false" { log.OpenConsole = false - }else if strOpen == "true" { + } else if strOpen == "true" { log.OpenConsole = true - }else{ + } else { return errors.New("Parameter console error!") } return nil } -func setLevel(args interface{}) error{ - if args==""{ +func setLevel(args interface{}) error { + if args == "" { return nil } logLevel = strings.TrimSpace(args.(string)) - if logLevel!= "debug" && logLevel!="release"&& logLevel!="warning"&&logLevel!="error"&&logLevel!="fatal" { + if logLevel != "debug" && logLevel != "release" && logLevel != "warning" && logLevel != "error" && logLevel != "fatal" { return errors.New("unknown level: " + logLevel) } return nil } -func setLogPath(args interface{}) error{ - if args == ""{ +func setLogPath(args interface{}) error { + if args == "" { return nil } logPath = strings.TrimSpace(args.(string)) dir, err := os.Stat(logPath) //这个文件夹不存在 - if err == nil && dir.IsDir()==false { - return errors.New("Not found dir "+logPath) + if err == nil && dir.IsDir() == false { + return errors.New("Not found dir " + logPath) } if err != nil { err = os.Mkdir(logPath, os.ModePerm) if err != nil { - return errors.New("Cannot create dir "+logPath) + return errors.New("Cannot create dir " + logPath) } } return nil -} \ No newline at end of file +} diff --git a/sysmodule/httpclientmodule/httpclientpoolmodule.go b/sysmodule/httpclientmodule/httpclientpoolmodule.go index 4ff13bb..2f55b10 100644 --- a/sysmodule/httpclientmodule/httpclientpoolmodule.go +++ b/sysmodule/httpclientmodule/httpclientpoolmodule.go @@ -4,7 +4,7 @@ import ( "bytes" "crypto/tls" "fmt" - "io/ioutil" + "io" "net" "net/http" "net/url" @@ -64,7 +64,7 @@ func (m *HttpClientModule) Init(maxpool int, proxyUrl string) { Proxy: proxyFun, TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, }, - Timeout: 5 * time.Second, + Timeout: 5 * time.Second, } } @@ -103,7 +103,7 @@ func (m *HttpClientModule) Request(method string, url string, body []byte, heade } defer rsp.Body.Close() - ret.Body, err = ioutil.ReadAll(rsp.Body) + ret.Body, err = io.ReadAll(rsp.Body) if err != nil { ret.Err = err return ret diff --git a/sysservice/httpservice/httpservice.go b/sysservice/httpservice/httpservice.go index 100054f..a3c755d 100644 --- a/sysservice/httpservice/httpservice.go +++ b/sysservice/httpservice/httpservice.go @@ -8,7 +8,6 @@ import ( "github.com/duanhf2012/origin/util/uuid" jsoniter "github.com/json-iterator/go" "io" - "io/ioutil" "net/http" "os" "strings" @@ -17,13 +16,13 @@ import ( var json = jsoniter.ConfigCompatibleWithStandardLibrary -var DefaultReadTimeout time.Duration = time.Second*10 -var DefaultWriteTimeout time.Duration = time.Second*10 -var DefaultProcessTimeout time.Duration = time.Second*10 +var DefaultReadTimeout time.Duration = time.Second * 10 +var DefaultWriteTimeout time.Duration = time.Second * 10 +var DefaultProcessTimeout time.Duration = time.Second * 10 //http redirect type HttpRedirectData struct { - Url string + Url string CookieList []*http.Cookie } @@ -44,7 +43,7 @@ type routerMatchData struct { } type routerServeFileData struct { - matchUrl string + matchUrl string localPath string method HTTP_METHOD } @@ -56,44 +55,43 @@ type IHttpRouter interface { SetServeFile(method HTTP_METHOD, urlpath string, dirname string) error SetFormFileKey(formFileKey string) - GetFormFileKey()string + GetFormFileKey() string AddHttpFiltrate(FiltrateFun HttpFiltrate) bool } type HttpRouter struct { - pathRouter map[HTTP_METHOD] map[string] routerMatchData //url地址,对应本service地址 - serveFileData map[string] *routerServeFileData - httpFiltrateList [] HttpFiltrate + pathRouter map[HTTP_METHOD]map[string]routerMatchData //url地址,对应本service地址 + serveFileData map[string]*routerServeFileData + httpFiltrateList []HttpFiltrate formFileKey string } type HttpSession struct { httpRouter IHttpRouter - r *http.Request - w http.ResponseWriter + r *http.Request + w http.ResponseWriter //parse result mapParam map[string]string - body []byte + body []byte //processor result - statusCode int - msg []byte - fileData *routerServeFileData + statusCode int + msg []byte + fileData *routerServeFileData redirectData *HttpRedirectData - sessionDone chan *HttpSession + sessionDone chan *HttpSession } - type HttpService struct { service.Service - httpServer network.HttpServer - postAliasUrl map[HTTP_METHOD] map[string]routerMatchData //url地址,对应本service地址 - httpRouter IHttpRouter - listenAddr string - corsHeader *CORSHeader + httpServer network.HttpServer + postAliasUrl map[HTTP_METHOD]map[string]routerMatchData //url地址,对应本service地址 + httpRouter IHttpRouter + listenAddr string + corsHeader *CORSHeader processTimeout time.Duration } @@ -109,11 +107,11 @@ func (httpService *HttpService) AddFiltrate(FiltrateFun HttpFiltrate) bool { func NewHttpHttpRouter() IHttpRouter { httpRouter := &HttpRouter{} - httpRouter.pathRouter =map[HTTP_METHOD] map[string] routerMatchData{} - httpRouter.serveFileData = map[string] *routerServeFileData{} + httpRouter.pathRouter = map[HTTP_METHOD]map[string]routerMatchData{} + httpRouter.serveFileData = map[string]*routerServeFileData{} httpRouter.formFileKey = "file" - for i:=METHOD_NONE+1;i