Add logging
This commit is contained in:
parent
d8a2f84bca
commit
02a4e4a575
7
go.mod
7
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
|
go 1.19
|
||||||
|
|
||||||
require (
|
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
|
github.com/satori/go.uuid v1.2.0
|
||||||
google.golang.org/protobuf v1.28.1
|
google.golang.org/protobuf v1.28.1
|
||||||
)
|
)
|
||||||
|
@ -11,5 +12,5 @@ require (
|
||||||
require (
|
require (
|
||||||
github.com/nats-io/nkeys v0.3.0 // indirect
|
github.com/nats-io/nkeys v0.3.0 // indirect
|
||||||
github.com/nats-io/nuid v1.0.1 // 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
|
||||||
)
|
)
|
||||||
|
|
10
go.sum
10
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/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/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 h1:o480Ao6kuSSFyJO75rGTXCEPj7LGkY84C1Ye+Uhm4c0=
|
||||||
github.com/nats-io/nats.go v1.18.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
|
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 h1:H6j8aBnTQFoVrTGB6Xjd903UMdE7jz6DS4YkmAqgZ9Q=
|
||||||
github.com/nats-io/nats.go v1.19.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA=
|
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 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8=
|
||||||
github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4=
|
github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4=
|
||||||
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
|
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.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||||
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
|
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.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/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/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
|
|
@ -7,7 +7,9 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"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"
|
"github.com/nats-io/nats.go"
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
|
@ -27,6 +29,7 @@ type funcDesc struct {
|
||||||
conn *nats.Conn
|
conn *nats.Conn
|
||||||
timeout time.Duration
|
timeout time.Duration
|
||||||
acceptFunc func(access string) bool
|
acceptFunc func(access string) bool
|
||||||
|
logger *ytlogger.YTLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fDesc *funcDesc) worker() {
|
func (fDesc *funcDesc) worker() {
|
||||||
|
@ -42,6 +45,7 @@ func (fDesc *funcDesc) worker() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
timeStart := time.Now()
|
||||||
// Проверка может ли вызывающая сторона вызвать функцию
|
// Проверка может ли вызывающая сторона вызвать функцию
|
||||||
if !fDesc.acceptFunc(pkg.Metadata.CallFrom) {
|
if !fDesc.acceptFunc(pkg.Metadata.CallFrom) {
|
||||||
if pkg.Metadata.QueueCallback != "" {
|
if pkg.Metadata.QueueCallback != "" {
|
||||||
|
@ -52,9 +56,16 @@ func (fDesc *funcDesc) worker() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
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 {
|
if err = fDesc.conn.Publish(pkg.Metadata.QueueCallback, buff); err != nil {
|
||||||
continue
|
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
|
continue
|
||||||
}
|
}
|
||||||
|
@ -81,6 +92,9 @@ func (fDesc *funcDesc) worker() {
|
||||||
pkg.Error = ""
|
pkg.Error = ""
|
||||||
}*/
|
}*/
|
||||||
pkg.Metadata.CallResponseID = uuid.NewV4().String()
|
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)
|
buff, err := proto.Marshal(pkg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//panic(err)
|
//panic(err)
|
||||||
|
@ -94,6 +108,9 @@ func (fDesc *funcDesc) worker() {
|
||||||
if pkg.Metadata.QueueCallback != "" {
|
if pkg.Metadata.QueueCallback != "" {
|
||||||
pkg.Payload = res.res
|
pkg.Payload = res.res
|
||||||
pkg.Metadata.CallResponseID = uuid.NewV4().String()
|
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)
|
buff, err := proto.Marshal(pkg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//panic(err)
|
//panic(err)
|
||||||
|
@ -111,6 +128,9 @@ func (fDesc *funcDesc) worker() {
|
||||||
//pkg.Error = err.Error()
|
//pkg.Error = err.Error()
|
||||||
pkg.Error = "function call timeout"
|
pkg.Error = "function call timeout"
|
||||||
pkg.Metadata.CallResponseID = uuid.NewV4().String()
|
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)
|
buff, err := proto.Marshal(pkg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
|
@ -150,10 +170,12 @@ type Serve struct {
|
||||||
callbackFuncs map[string]*CallbackFunc
|
callbackFuncs map[string]*CallbackFunc
|
||||||
callbackFuncsMutex sync.Mutex
|
callbackFuncsMutex sync.Mutex
|
||||||
accept map[string]map[string]bool
|
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, " ") == "" {
|
if strings.Trim(moduleName, " ") == "" {
|
||||||
moduleName = "default"
|
moduleName = "default"
|
||||||
} else {
|
} else {
|
||||||
|
@ -188,9 +210,28 @@ func NewServe(addr string, projectName string, moduleName string, natsServ *nats
|
||||||
|
|
||||||
serve.timeoutCallback = time.Second * 30
|
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
|
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 {
|
func (serve *Serve) AddAccept(ruleName string) bool {
|
||||||
return serve.AddAcceptBool(ruleName, true)
|
return serve.AddAcceptBool(ruleName, true)
|
||||||
|
@ -364,6 +405,7 @@ func (serve *Serve) RegisterFunctionWithTimeout(funcName string, timeout time.Du
|
||||||
fDesc := funcDesc{
|
fDesc := funcDesc{
|
||||||
Name: fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName),
|
Name: fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName),
|
||||||
F: f,
|
F: f,
|
||||||
|
logger: serve.logger,
|
||||||
}
|
}
|
||||||
fDesc.inputChan = make(chan *nats.Msg)
|
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)
|
fDesc.subj, err = serve.nc.ChanQueueSubscribe(fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName), serve.projectName+"."+serve.moduleName, fDesc.inputChan)
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network"
|
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go/network"
|
||||||
)
|
)
|
||||||
|
|
||||||
var serve *Serve
|
var serve *Serve
|
||||||
|
@ -24,7 +24,7 @@ func setup() {
|
||||||
port = "4222"
|
port = "4222"
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
serve = NewServe(addr, "", "test", nil)
|
serve = NewServe(addr, "", "test", nil, nil, nil)
|
||||||
if serve == nil {
|
if serve == nil {
|
||||||
panic(fmt.Errorf(`serve is not created`))
|
panic(fmt.Errorf(`serve is not created`))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user