From 02a4e4a575b5b4764de61ed35093edeb506b9da7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A4=D0=B5=D0=B4=D0=BE=D1=80=D1=8E=D0=BA?= Date: Thu, 1 Dec 2022 15:23:42 +0300 Subject: [PATCH] Add logging --- go.mod | 7 ++++--- go.sum | 10 ++++++++++ ytfunction.go | 50 ++++++++++++++++++++++++++++++++++++++++++---- ytfunction_test.go | 4 ++-- 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index fec3d70..678fb9d 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,10 @@ -module git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git +module git.ymnuktech.ru/ymnuk/yt-function-sdk-go go 1.19 require ( - github.com/nats-io/nats.go v1.19.0 + git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.3 + github.com/nats-io/nats.go v1.20.0 github.com/satori/go.uuid v1.2.0 google.golang.org/protobuf v1.28.1 ) @@ -11,5 +12,5 @@ require ( require ( github.com/nats-io/nkeys v0.3.0 // indirect github.com/nats-io/nuid v1.0.1 // indirect - golang.org/x/crypto v0.1.0 // indirect + golang.org/x/crypto v0.3.0 // indirect ) diff --git a/go.sum b/go.sum index d820c50..34358af 100644 --- a/go.sum +++ b/go.sum @@ -1,9 +1,17 @@ +git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.1 h1:lZYpXPfOi/5VQVz6zj51mInYzlN+QjDUoR/wNk4KsYU= +git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.1/go.mod h1:wnWM6xEhOOWsf2pURh/OaugZEZDkbRJY4mpbaz4ETxk= +git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.2 h1:ihmsdfv6TFP+RW+12iLTzag9CnuhUFMwlPJucUGY8TU= +git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.2/go.mod h1:wnWM6xEhOOWsf2pURh/OaugZEZDkbRJY4mpbaz4ETxk= +git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.3 h1:Bv9mT6k/9RJXD53H5POszfB2XstCPmvO/XKzScpuvQI= +git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.3/go.mod h1:wnWM6xEhOOWsf2pURh/OaugZEZDkbRJY4mpbaz4ETxk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/nats-io/nats.go v1.18.0 h1:o480Ao6kuSSFyJO75rGTXCEPj7LGkY84C1Ye+Uhm4c0= github.com/nats-io/nats.go v1.18.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nats.go v1.19.0 h1:H6j8aBnTQFoVrTGB6Xjd903UMdE7jz6DS4YkmAqgZ9Q= github.com/nats-io/nats.go v1.19.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA= +github.com/nats-io/nats.go v1.20.0 h1:T8JJnQfVSdh1CzGiwAOv5hEobYCBho/0EupGznYw0oM= +github.com/nats-io/nats.go v1.20.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= @@ -14,6 +22,8 @@ golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b h1:wSOdpTq0/eI46Ez/LkDwIs golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= diff --git a/ytfunction.go b/ytfunction.go index fc953ac..df41c8c 100644 --- a/ytfunction.go +++ b/ytfunction.go @@ -7,7 +7,9 @@ import ( "sync" "time" - "git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network" + "git.ymnuktech.ru/ymnuk/yt-function-sdk-go/network" + ytlogger "git.ymnuktech.ru/ymnuk/yt-logger-go" + "git.ymnuktech.ru/ymnuk/yt-logger-go/log" "github.com/nats-io/nats.go" uuid "github.com/satori/go.uuid" "google.golang.org/protobuf/proto" @@ -27,6 +29,7 @@ type funcDesc struct { conn *nats.Conn timeout time.Duration acceptFunc func(access string) bool + logger *ytlogger.YTLogger } func (fDesc *funcDesc) worker() { @@ -42,6 +45,7 @@ func (fDesc *funcDesc) worker() { if err != nil { panic(err) } + timeStart := time.Now() // Проверка может ли вызывающая сторона вызвать функцию if !fDesc.acceptFunc(pkg.Metadata.CallFrom) { if pkg.Metadata.QueueCallback != "" { @@ -52,9 +56,16 @@ func (fDesc *funcDesc) worker() { if err != nil { panic(err) } + if fDesc.logger != nil { + fDesc.logger.Err(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, nil, nil) + } if err = fDesc.conn.Publish(pkg.Metadata.QueueCallback, buff); err != nil { continue } + } else { + if fDesc.logger != nil { + fDesc.logger.Err(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, nil, nil) + } } continue } @@ -81,6 +92,9 @@ func (fDesc *funcDesc) worker() { pkg.Error = "" }*/ pkg.Metadata.CallResponseID = uuid.NewV4().String() + if fDesc.logger != nil { + fDesc.logger.Err(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, nil, nil) + } buff, err := proto.Marshal(pkg) if err != nil { //panic(err) @@ -94,6 +108,9 @@ func (fDesc *funcDesc) worker() { if pkg.Metadata.QueueCallback != "" { pkg.Payload = res.res pkg.Metadata.CallResponseID = uuid.NewV4().String() + if fDesc.logger != nil { + fDesc.logger.Info(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, &[]int64{int64(len(pkg.Payload))}[0], nil) + } buff, err := proto.Marshal(pkg) if err != nil { //panic(err) @@ -111,6 +128,9 @@ func (fDesc *funcDesc) worker() { //pkg.Error = err.Error() pkg.Error = "function call timeout" pkg.Metadata.CallResponseID = uuid.NewV4().String() + if fDesc.logger != nil { + fDesc.logger.Err(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, nil, nil) + } buff, err := proto.Marshal(pkg) if err != nil { continue @@ -150,10 +170,12 @@ type Serve struct { callbackFuncs map[string]*CallbackFunc callbackFuncsMutex sync.Mutex accept map[string]map[string]bool + logger *ytlogger.YTLogger + queueNameLog *string } // Создание нового инстанса сервера -func NewServe(addr string, projectName string, moduleName string, natsServ *nats.Conn) *Serve { +func NewServe(addr string, projectName string, moduleName string, natsServ *nats.Conn, priority *ytlogger.Priority, queueNameLog *string) *Serve { if strings.Trim(moduleName, " ") == "" { moduleName = "default" } else { @@ -188,9 +210,28 @@ func NewServe(addr string, projectName string, moduleName string, natsServ *nats serve.timeoutCallback = time.Second * 30 + if queueNameLog != nil { + if priority == nil { + priority = &[]ytlogger.Priority{ytlogger.LOG_INFO}[0] + } + serve.logger = ytlogger.NewYTLogger(*priority, 100000, serve.sendLog) + serve.queueNameLog = queueNameLog + } + return serve } +// Функция отправки логов на удаленный сервер +func (serve *Serve) sendLog(pkg *log.Pkg) { + var b []byte + var err error + b, err = proto.Marshal(pkg) + if err != nil { + return + } + serve.nc.Publish(*serve.queueNameLog, b) +} + // Установка разрешающих правил выполнения функций func (serve *Serve) AddAccept(ruleName string) bool { return serve.AddAcceptBool(ruleName, true) @@ -362,8 +403,9 @@ func (serve *Serve) RegisterFunctionWithTimeout(funcName string, timeout time.Du } fDesc := funcDesc{ - Name: fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName), - F: f, + Name: fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName), + F: f, + logger: serve.logger, } fDesc.inputChan = make(chan *nats.Msg) fDesc.subj, err = serve.nc.ChanQueueSubscribe(fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName), serve.projectName+"."+serve.moduleName, fDesc.inputChan) diff --git a/ytfunction_test.go b/ytfunction_test.go index 6808061..65b1344 100644 --- a/ytfunction_test.go +++ b/ytfunction_test.go @@ -5,7 +5,7 @@ import ( "os" "testing" - "git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network" + "git.ymnuktech.ru/ymnuk/yt-function-sdk-go/network" ) var serve *Serve @@ -24,7 +24,7 @@ func setup() { port = "4222" }*/ - serve = NewServe(addr, "", "test", nil) + serve = NewServe(addr, "", "test", nil, nil, nil) if serve == nil { panic(fmt.Errorf(`serve is not created`)) }