mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-13 23:24:45 +08:00
Compare commits
6 Commits
v2.1.4
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c0b168e66 | ||
|
|
bd467a219b | ||
|
|
af15615345 | ||
|
|
50dd80b082 | ||
|
|
a6487dd41e | ||
|
|
d5299294d8 |
@@ -40,8 +40,6 @@ type NodeInfo struct {
|
||||
DiscoveryService []DiscoveryService //筛选发现的服务,如果不配置,不进行筛选
|
||||
status NodeStatus
|
||||
Retire bool
|
||||
|
||||
NetworkName string
|
||||
}
|
||||
|
||||
type NodeRpcInfo struct {
|
||||
|
||||
@@ -3,24 +3,23 @@ package cluster
|
||||
import "github.com/duanhf2012/origin/v2/rpc"
|
||||
|
||||
type ConfigDiscovery struct {
|
||||
funDelNode FunDelNode
|
||||
funSetNode FunSetNode
|
||||
funDelNode FunDelNode
|
||||
funSetNode FunSetNode
|
||||
localNodeId string
|
||||
}
|
||||
|
||||
|
||||
func (discovery *ConfigDiscovery) InitDiscovery(localNodeId string,funDelNode FunDelNode,funSetNode FunSetNode) error{
|
||||
func (discovery *ConfigDiscovery) InitDiscovery(localNodeId string, funDelNode FunDelNode, funSetNode FunSetNode) error {
|
||||
discovery.localNodeId = localNodeId
|
||||
discovery.funDelNode = funDelNode
|
||||
discovery.funSetNode = funSetNode
|
||||
|
||||
|
||||
//解析本地其他服务配置
|
||||
_,nodeInfoList,_,err := GetCluster().readLocalClusterConfig(rpc.NodeIdNull)
|
||||
_, nodeInfoList, _, err := GetCluster().readLocalClusterConfig(rpc.NodeIdNull)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _,nodeInfo := range nodeInfoList {
|
||||
for _, nodeInfo := range nodeInfoList {
|
||||
if nodeInfo.NodeId == localNodeId {
|
||||
continue
|
||||
}
|
||||
@@ -30,5 +29,3 @@ func (discovery *ConfigDiscovery) InitDiscovery(localNodeId string,funDelNode Fu
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,17 +5,17 @@ import (
|
||||
"github.com/duanhf2012/origin/v2/service"
|
||||
)
|
||||
|
||||
func (cls *Cluster) setupDiscovery(localNodeId string, setupServiceFun SetupServiceFun) error{
|
||||
func (cls *Cluster) setupDiscovery(localNodeId string, setupServiceFun SetupServiceFun) error {
|
||||
if cls.discoveryInfo.getDiscoveryType() == OriginType { //origin类型服务发现
|
||||
return cls.setupOriginDiscovery(localNodeId,setupServiceFun)
|
||||
}else if cls.discoveryInfo.getDiscoveryType() == EtcdType{//etcd类型服务发现
|
||||
return cls.setupEtcdDiscovery(localNodeId,setupServiceFun)
|
||||
return cls.setupOriginDiscovery(localNodeId, setupServiceFun)
|
||||
} else if cls.discoveryInfo.getDiscoveryType() == EtcdType { //etcd类型服务发现
|
||||
return cls.setupEtcdDiscovery(localNodeId, setupServiceFun)
|
||||
}
|
||||
|
||||
return cls.setupConfigDiscovery(localNodeId,setupServiceFun)
|
||||
return cls.setupConfigDiscovery(localNodeId, setupServiceFun)
|
||||
}
|
||||
|
||||
func (cls *Cluster) setupOriginDiscovery(localNodeId string, setupServiceFun SetupServiceFun) error{
|
||||
func (cls *Cluster) setupOriginDiscovery(localNodeId string, setupServiceFun SetupServiceFun) error {
|
||||
if cls.serviceDiscovery != nil {
|
||||
return errors.New("service discovery has been setup")
|
||||
}
|
||||
@@ -27,6 +27,7 @@ func (cls *Cluster) setupOriginDiscovery(localNodeId string, setupServiceFun Set
|
||||
}
|
||||
|
||||
cls.serviceDiscovery = getOriginDiscovery()
|
||||
|
||||
//2.如果为动态服务发现安装本地发现服务
|
||||
if localMaster == true {
|
||||
setupServiceFun(&masterService)
|
||||
@@ -36,11 +37,10 @@ func (cls *Cluster) setupOriginDiscovery(localNodeId string, setupServiceFun Set
|
||||
setupServiceFun(&clientService)
|
||||
cls.AddDiscoveryService(OriginDiscoveryClientName, true)
|
||||
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cls *Cluster) setupEtcdDiscovery(localNodeId string, setupServiceFun SetupServiceFun) error{
|
||||
func (cls *Cluster) setupEtcdDiscovery(localNodeId string, setupServiceFun SetupServiceFun) error {
|
||||
if cls.serviceDiscovery != nil {
|
||||
return errors.New("service discovery has been setup")
|
||||
}
|
||||
@@ -48,12 +48,12 @@ func (cls *Cluster) setupEtcdDiscovery(localNodeId string, setupServiceFun Setup
|
||||
//setup etcd service
|
||||
cls.serviceDiscovery = getEtcdDiscovery()
|
||||
setupServiceFun(cls.serviceDiscovery.(service.IService))
|
||||
|
||||
cls.AddDiscoveryService(cls.serviceDiscovery.(service.IService).GetName(),false)
|
||||
|
||||
cls.AddDiscoveryService(cls.serviceDiscovery.(service.IService).GetName(), false)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cls *Cluster) setupConfigDiscovery(localNodeId string, setupServiceFun SetupServiceFun) error{
|
||||
func (cls *Cluster) setupConfigDiscovery(localNodeId string, setupServiceFun SetupServiceFun) error {
|
||||
if cls.serviceDiscovery != nil {
|
||||
return errors.New("service discovery has been setup")
|
||||
}
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
package cluster
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"crypto/x509"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/duanhf2012/origin/v2/event"
|
||||
"github.com/duanhf2012/origin/v2/log"
|
||||
"github.com/duanhf2012/origin/v2/rpc"
|
||||
@@ -9,16 +14,11 @@ import (
|
||||
"go.etcd.io/etcd/api/v3/mvccpb"
|
||||
"go.etcd.io/etcd/client/v3"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"time"
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
"io/ioutil"
|
||||
"crypto/x509"
|
||||
"crypto/tls"
|
||||
"time"
|
||||
)
|
||||
|
||||
const originDir = "/origin"
|
||||
@@ -42,7 +42,8 @@ type EtcdDiscoveryService struct {
|
||||
mapDiscoveryNodeId map[string]map[string]struct{} //map[networkName]map[nodeId]
|
||||
}
|
||||
|
||||
var etcdDiscovery *EtcdDiscoveryService
|
||||
var etcdDiscovery *EtcdDiscoveryService
|
||||
|
||||
func getEtcdDiscovery() IServiceDiscovery {
|
||||
if etcdDiscovery == nil {
|
||||
etcdDiscovery = &EtcdDiscoveryService{}
|
||||
@@ -51,7 +52,6 @@ func getEtcdDiscovery() IServiceDiscovery {
|
||||
return etcdDiscovery
|
||||
}
|
||||
|
||||
|
||||
func (ed *EtcdDiscoveryService) InitDiscovery(localNodeId string, funDelNode FunDelNode, funSetNode FunSetNode) error {
|
||||
ed.localNodeId = localNodeId
|
||||
|
||||
@@ -99,17 +99,17 @@ func (ed *EtcdDiscoveryService) OnInit() error {
|
||||
|
||||
if etcdDiscoveryCfg.EtcdList[i].Cert != "" {
|
||||
// load cert
|
||||
cert, cerr := tls.LoadX509KeyPair(etcdDiscoveryCfg.EtcdList[i].Cert, etcdDiscoveryCfg.EtcdList[i].CertKey)
|
||||
if cerr != nil {
|
||||
log.Error("load cert error", log.ErrorField("err", cerr))
|
||||
return cerr
|
||||
cert, cErr := tls.LoadX509KeyPair(etcdDiscoveryCfg.EtcdList[i].Cert, etcdDiscoveryCfg.EtcdList[i].CertKey)
|
||||
if cErr != nil {
|
||||
log.Error("load cert error", log.ErrorField("err", cErr))
|
||||
return cErr
|
||||
}
|
||||
|
||||
// load root ca
|
||||
caData, cerr := ioutil.ReadFile(etcdDiscoveryCfg.EtcdList[i].Ca)
|
||||
if cerr != nil {
|
||||
log.Error("load root ca error", log.ErrorField("err", cerr))
|
||||
return cerr
|
||||
caData, cErr := os.ReadFile(etcdDiscoveryCfg.EtcdList[i].Ca)
|
||||
if cErr != nil {
|
||||
log.Error("load root ca error", log.ErrorField("err", cErr))
|
||||
return cErr
|
||||
}
|
||||
pool := x509.NewCertPool()
|
||||
pool.AppendCertsFromPEM(caData)
|
||||
@@ -122,13 +122,12 @@ func (ed *EtcdDiscoveryService) OnInit() error {
|
||||
client, err = clientv3.New(clientv3.Config{
|
||||
Endpoints: etcdDiscoveryCfg.EtcdList[i].Endpoints,
|
||||
DialTimeout: etcdDiscoveryCfg.DialTimeoutMillisecond,
|
||||
Username: etcdDiscoveryCfg.EtcdList[i].UserName,
|
||||
Password: etcdDiscoveryCfg.EtcdList[i].Password,
|
||||
Username: etcdDiscoveryCfg.EtcdList[i].UserName,
|
||||
Password: etcdDiscoveryCfg.EtcdList[i].Password,
|
||||
Logger: log.GetLogger().Logger,
|
||||
TLS: tlsConfig,
|
||||
TLS: tlsConfig,
|
||||
})
|
||||
|
||||
|
||||
if err != nil {
|
||||
log.Error("etcd discovery init fail", log.ErrorField("err", err))
|
||||
return err
|
||||
|
||||
14
go.mod
14
go.mod
@@ -1,11 +1,11 @@
|
||||
module github.com/duanhf2012/origin/v2
|
||||
|
||||
go 1.22
|
||||
|
||||
toolchain go1.22.7
|
||||
toolchain go1.24.1
|
||||
|
||||
require (
|
||||
github.com/IBM/sarama v1.43.3
|
||||
github.com/duanhf2012/rotatelogs v0.0.0-20250124024205-39765c212d8a
|
||||
github.com/gin-gonic/gin v1.10.0
|
||||
github.com/go-sql-driver/mysql v1.6.0
|
||||
github.com/gomodule/redigo v1.8.8
|
||||
@@ -83,11 +83,11 @@ require (
|
||||
go.etcd.io/etcd/client/pkg/v3 v3.5.13 // indirect
|
||||
go.uber.org/multierr v1.10.0 // indirect
|
||||
golang.org/x/arch v0.8.0 // indirect
|
||||
golang.org/x/crypto v0.26.0 // indirect
|
||||
golang.org/x/net v0.28.0 // indirect
|
||||
golang.org/x/sync v0.8.0 // indirect
|
||||
golang.org/x/sys v0.23.0 // indirect
|
||||
golang.org/x/text v0.17.0 // indirect
|
||||
golang.org/x/crypto v0.36.0 // indirect
|
||||
golang.org/x/net v0.38.0 // indirect
|
||||
golang.org/x/sync v0.12.0 // indirect
|
||||
golang.org/x/sys v0.31.0 // indirect
|
||||
golang.org/x/text v0.23.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
|
||||
|
||||
22
go.sum
22
go.sum
@@ -20,6 +20,8 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/duanhf2012/rotatelogs v0.0.0-20250124024205-39765c212d8a h1:BVmZrOSKTg9ry1YjqY6IjVXmBDsFdX/W+pnvO5cPUDc=
|
||||
github.com/duanhf2012/rotatelogs v0.0.0-20250124024205-39765c212d8a/go.mod h1:S/NNkpdnXps6VXaYVVDFtqQAm/NKayHxxOAhsrFnCgg=
|
||||
github.com/eapache/go-resiliency v1.7.0 h1:n3NRTnBn5N0Cbi/IeOHuQn9s2UwVUH7Ga0ZWcP+9JTA=
|
||||
github.com/eapache/go-resiliency v1.7.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho=
|
||||
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws=
|
||||
@@ -229,8 +231,8 @@ golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPh
|
||||
golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
|
||||
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
|
||||
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
|
||||
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
@@ -252,8 +254,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
|
||||
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
|
||||
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
|
||||
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@@ -261,8 +263,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
||||
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@@ -275,8 +277,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
|
||||
golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
|
||||
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
@@ -286,8 +288,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
|
||||
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
|
||||
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
|
||||
112
log/log.go
112
log/log.go
@@ -1,31 +1,37 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"github.com/duanhf2012/rotatelogs"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var isSetLogger bool
|
||||
var gLogger = NewDefaultLogger()
|
||||
var LogLevel zapcore.Level
|
||||
var MaxSize int
|
||||
var LogPath string
|
||||
var OpenConsole *bool
|
||||
var LogChanLen int
|
||||
|
||||
type Logger struct {
|
||||
*zap.Logger
|
||||
stack bool
|
||||
|
||||
OpenConsole *bool
|
||||
LogPath string
|
||||
FileName string
|
||||
Skip int
|
||||
LogLevel zapcore.Level
|
||||
Encoder zapcore.Encoder
|
||||
LogConfig *lumberjack.Logger
|
||||
SugaredLogger *zap.SugaredLogger
|
||||
CoreList []zapcore.Core
|
||||
FileName string
|
||||
Skip int
|
||||
Encoder zapcore.Encoder
|
||||
SugaredLogger *zap.SugaredLogger
|
||||
CoreList []zapcore.Core
|
||||
WriteSyncerFun []func() zapcore.WriteSyncer
|
||||
}
|
||||
|
||||
// 设置Logger
|
||||
func SetLogger(logger *Logger) {
|
||||
if logger != nil {
|
||||
gLogger = logger
|
||||
@@ -33,6 +39,15 @@ func SetLogger(logger *Logger) {
|
||||
}
|
||||
}
|
||||
|
||||
// 设置ZapLogger
|
||||
func SetZapLogger(zapLogger *zap.Logger) {
|
||||
if zapLogger != nil {
|
||||
gLogger = &Logger{}
|
||||
gLogger.Logger = zapLogger
|
||||
isSetLogger = true
|
||||
}
|
||||
}
|
||||
|
||||
func GetLogger() *Logger {
|
||||
return gLogger
|
||||
}
|
||||
@@ -47,8 +62,8 @@ func (logger *Logger) SetSkip(skip int) {
|
||||
|
||||
func GetJsonEncoder() zapcore.Encoder {
|
||||
encoderConfig := zap.NewProductionEncoderConfig()
|
||||
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
||||
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
|
||||
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
||||
encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendString(t.Format("2006-01-02 15:04:05.000"))
|
||||
}
|
||||
@@ -67,51 +82,100 @@ func GetTxtEncoder() zapcore.Encoder {
|
||||
return zapcore.NewConsoleEncoder(encoderConfig)
|
||||
}
|
||||
|
||||
func getLogConfig() *lumberjack.Logger {
|
||||
func (logger *Logger) getLogConfig() *lumberjack.Logger {
|
||||
return &lumberjack.Logger{
|
||||
Filename: "",
|
||||
MaxSize: 2048,
|
||||
Filename: filepath.Join(LogPath, logger.FileName),
|
||||
MaxSize: MaxSize,
|
||||
MaxBackups: 0,
|
||||
MaxAge: 0,
|
||||
Compress: false,
|
||||
LocalTime: true,
|
||||
}
|
||||
}
|
||||
|
||||
func NewDefaultLogger() *Logger {
|
||||
logger := Logger{}
|
||||
logger.Encoder = GetJsonEncoder()
|
||||
logger.LogConfig = getLogConfig()
|
||||
logger.LogConfig.LocalTime = true
|
||||
core := zapcore.NewCore(logger.Encoder, zapcore.AddSync(os.Stdout), zap.InfoLevel)
|
||||
logger.Logger = zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
|
||||
|
||||
logger.Init()
|
||||
return &logger
|
||||
}
|
||||
|
||||
func (logger *Logger) SetLogLevel(level zapcore.Level) {
|
||||
logger.LogLevel = level
|
||||
func (logger *Logger) SetSyncers(syncers ...func() zapcore.WriteSyncer) {
|
||||
logger.WriteSyncerFun = syncers
|
||||
}
|
||||
|
||||
func (logger *Logger) AppendSyncerFun(syncerFun func() zapcore.WriteSyncer) {
|
||||
logger.WriteSyncerFun = append(logger.WriteSyncerFun, syncerFun)
|
||||
}
|
||||
|
||||
func SetLogLevel(level zapcore.Level) {
|
||||
LogLevel = level
|
||||
}
|
||||
|
||||
func (logger *Logger) Enabled(zapcore.Level) bool {
|
||||
return logger.stack
|
||||
}
|
||||
|
||||
func (logger *Logger) NewLumberjackWriter() zapcore.WriteSyncer {
|
||||
return zapcore.AddSync(
|
||||
&lumberjack.Logger{
|
||||
Filename: filepath.Join(LogPath, logger.FileName),
|
||||
MaxSize: MaxSize,
|
||||
MaxBackups: 0,
|
||||
MaxAge: 0,
|
||||
Compress: false,
|
||||
LocalTime: true,
|
||||
})
|
||||
}
|
||||
|
||||
func (logger *Logger) NewRotatelogsWriter() zapcore.WriteSyncer {
|
||||
var options []rotatelogs.Option
|
||||
|
||||
if MaxSize > 0 {
|
||||
options = append(options, rotatelogs.WithRotateMaxSize(int64(MaxSize)))
|
||||
}
|
||||
if LogChanLen > 0 {
|
||||
options = append(options, rotatelogs.WithChannelLen(LogChanLen))
|
||||
}
|
||||
options = append(options, rotatelogs.WithRotationTime(time.Hour*24))
|
||||
|
||||
fileName := strings.TrimRight(logger.FileName, filepath.Ext(logger.FileName))
|
||||
rotateLogs, err := rotatelogs.NewRotateLogs(LogPath, "20060102/"+fileName+"_20060102_150405", options...)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return zapcore.AddSync(rotateLogs)
|
||||
}
|
||||
|
||||
func (logger *Logger) Init() {
|
||||
if isSetLogger {
|
||||
return
|
||||
}
|
||||
|
||||
var syncerList []zapcore.WriteSyncer
|
||||
if logger.WriteSyncerFun == nil {
|
||||
syncerList = append(syncerList, logger.NewRotatelogsWriter())
|
||||
} else {
|
||||
for _, syncer := range logger.WriteSyncerFun {
|
||||
syncerList = append(syncerList, syncer())
|
||||
}
|
||||
}
|
||||
|
||||
var coreList []zapcore.Core
|
||||
if logger.OpenConsole == nil || *logger.OpenConsole {
|
||||
core := zapcore.NewCore(logger.Encoder, zapcore.AddSync(os.Stdout), logger.LogLevel)
|
||||
if OpenConsole == nil || *OpenConsole {
|
||||
syncerList = append(syncerList, zapcore.AddSync(os.Stdout))
|
||||
}
|
||||
|
||||
for _, writer := range syncerList {
|
||||
core := zapcore.NewCore(logger.Encoder, writer, LogLevel)
|
||||
coreList = append(coreList, core)
|
||||
}
|
||||
|
||||
if logger.CoreList != nil {
|
||||
coreList = append(coreList, logger.CoreList...)
|
||||
}else if logger.LogPath != "" {
|
||||
WriteSyncer := zapcore.AddSync(logger.LogConfig)
|
||||
core := zapcore.NewCore(logger.Encoder, WriteSyncer, logger.LogLevel)
|
||||
coreList = append(coreList, core)
|
||||
}
|
||||
|
||||
core := zapcore.NewTee(coreList...)
|
||||
|
||||
44
node/node.go
44
node/node.go
@@ -17,7 +17,6 @@ import (
|
||||
_ "net/http/pprof"
|
||||
"os"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
@@ -59,6 +58,7 @@ func init() {
|
||||
console.RegisterCommandString("loglevel", "debug", "<-loglevel debug|info|warn|error|stackerror|fatal> Set loglevel.", setLevel)
|
||||
console.RegisterCommandString("logpath", "", "<-logpath path> Set log file path.", setLogPath)
|
||||
console.RegisterCommandInt("logsize", 0, "<-logsize size> Set log size(MB).", setLogSize)
|
||||
console.RegisterCommandInt("logchanlen", 0, "<-logchanlen len> Set log channel len.", setLogChanLen)
|
||||
console.RegisterCommandString("pprof", "", "<-pprof ip:port> Open performance analysis.", setPprof)
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ func initNode(id string) {
|
||||
|
||||
func initLog() error {
|
||||
logger := log.GetLogger()
|
||||
if logger.LogPath == "" {
|
||||
if log.LogPath == "" {
|
||||
err := setLogPath("./log")
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -230,7 +230,6 @@ func initLog() error {
|
||||
localNodeInfo := cluster.GetCluster().GetLocalNodeInfo()
|
||||
fileName := fmt.Sprintf("%s.log", localNodeInfo.NodeId)
|
||||
logger.FileName = fileName
|
||||
logger.LogConfig.Filename = filepath.Join(logger.LogPath, logger.FileName)
|
||||
|
||||
logger.Init()
|
||||
return nil
|
||||
@@ -440,10 +439,10 @@ func openConsole(args interface{}) error {
|
||||
strOpen := strings.ToLower(strings.TrimSpace(args.(string)))
|
||||
if strOpen == "false" {
|
||||
bOpenConsole := false
|
||||
log.GetLogger().OpenConsole = &bOpenConsole
|
||||
log.OpenConsole = &bOpenConsole
|
||||
} else if strOpen == "true" {
|
||||
bOpenConsole := true
|
||||
log.GetLogger().OpenConsole = &bOpenConsole
|
||||
log.OpenConsole = &bOpenConsole
|
||||
} else {
|
||||
return errors.New("parameter console error")
|
||||
}
|
||||
@@ -458,17 +457,17 @@ func setLevel(args interface{}) error {
|
||||
strlogLevel := strings.TrimSpace(args.(string))
|
||||
switch strlogLevel {
|
||||
case "debug":
|
||||
log.GetLogger().LogLevel = zapcore.DebugLevel
|
||||
log.LogLevel = zapcore.DebugLevel
|
||||
case "info":
|
||||
log.GetLogger().LogLevel = zapcore.InfoLevel
|
||||
log.LogLevel = zapcore.InfoLevel
|
||||
case "warn":
|
||||
log.GetLogger().LogLevel = zapcore.WarnLevel
|
||||
log.LogLevel = zapcore.WarnLevel
|
||||
case "error":
|
||||
log.GetLogger().LogLevel = zapcore.ErrorLevel
|
||||
log.LogLevel = zapcore.ErrorLevel
|
||||
case "stackerror":
|
||||
log.GetLogger().LogLevel = zapcore.ErrorLevel
|
||||
log.LogLevel = zapcore.ErrorLevel
|
||||
case "fatal":
|
||||
log.GetLogger().LogLevel = zapcore.FatalLevel
|
||||
log.LogLevel = zapcore.FatalLevel
|
||||
default:
|
||||
return errors.New("unknown level: " + strlogLevel)
|
||||
}
|
||||
@@ -480,11 +479,7 @@ func setLogPath(args interface{}) error {
|
||||
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)
|
||||
}
|
||||
|
||||
_, err := os.Stat(logPath)
|
||||
if err != nil {
|
||||
err = os.MkdirAll(logPath, os.ModePerm)
|
||||
if err != nil {
|
||||
@@ -492,7 +487,7 @@ func setLogPath(args interface{}) error {
|
||||
}
|
||||
}
|
||||
|
||||
log.GetLogger().LogPath = logPath
|
||||
log.LogPath = logPath
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -505,7 +500,20 @@ func setLogSize(args interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
log.GetLogger().LogConfig.MaxSize = logSize
|
||||
log.MaxSize = logSize
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func setLogChanLen(args interface{}) error {
|
||||
logChanLen, ok := args.(int)
|
||||
if ok == false {
|
||||
return errors.New("param logsize is error")
|
||||
}
|
||||
if logChanLen == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
log.LogChanLen = logChanLen
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -192,7 +192,7 @@ func (s *Service) run() {
|
||||
break
|
||||
}
|
||||
if s.profiler != nil {
|
||||
analyzer = s.profiler.Push("[Req]" + rpcRequest.RpcRequestData.GetServiceMethod())
|
||||
analyzer = s.profiler.Push("[RpcReq]" + rpcRequest.RpcRequestData.GetServiceMethod()+"."+strconv.Itoa(int(rpcRequest.RpcRequestData.GetRpcMethodId())))
|
||||
}
|
||||
|
||||
s.GetRpcHandler().HandlerRpcRequest(rpcRequest)
|
||||
|
||||
@@ -83,6 +83,7 @@ type HttpSession struct {
|
||||
sessionDone chan *HttpSession
|
||||
}
|
||||
|
||||
// Deprecated: replace it with the GinModule
|
||||
type HttpService struct {
|
||||
service.Service
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"time"
|
||||
)
|
||||
|
||||
// Deprecated: replace it with the TcpModule
|
||||
type TcpService struct {
|
||||
tcpServer network.TCPServer
|
||||
service.Service
|
||||
|
||||
@@ -12,6 +12,7 @@ import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
// Deprecated: replace it with the WSModule
|
||||
type WSService struct {
|
||||
service.Service
|
||||
wsServer network.WSServer
|
||||
|
||||
Reference in New Issue
Block a user