mirror of
https://github.com/retailcrm/mg-transport-core.git
synced 2024-11-24 06:06:03 +03:00
update adapters & fixes
This commit is contained in:
parent
4bca4c491e
commit
e9e9c4c442
@ -43,7 +43,7 @@ func (c CounterProcessor) Process(id int, counter Counter) bool { // nolint:varn
|
|||||||
err := c.Notifier(apiURL, apiKey, counter.Message())
|
err := c.Notifier(apiURL, apiKey, counter.Message())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.debugLog("cannot send notification for counter",
|
c.debugLog("cannot send notification for counter",
|
||||||
slog.Int(logger.CounterIDAttr, id), logger.ErrAttr(err), slog.String(logger.FailureMessageAttr, counter.Message()))
|
slog.Int(logger.CounterIDAttr, id), logger.Err(err), slog.String(logger.FailureMessageAttr, counter.Message()))
|
||||||
}
|
}
|
||||||
counter.FailureProcessed()
|
counter.FailureProcessed()
|
||||||
return true
|
return true
|
||||||
@ -81,7 +81,7 @@ func (c CounterProcessor) Process(id int, counter Counter) bool { // nolint:varn
|
|||||||
err := c.Notifier(apiURL, apiKey, c.getErrorText(counter.Name(), c.Error, lang))
|
err := c.Notifier(apiURL, apiKey, c.getErrorText(counter.Name(), c.Error, lang))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.debugLog("cannot send notification for counter",
|
c.debugLog("cannot send notification for counter",
|
||||||
slog.Int(logger.CounterIDAttr, id), logger.ErrAttr(err), slog.String(logger.FailureMessageAttr, counter.Message()))
|
slog.Int(logger.CounterIDAttr, id), logger.Err(err), slog.String(logger.FailureMessageAttr, counter.Message()))
|
||||||
}
|
}
|
||||||
counter.CountersProcessed()
|
counter.CountersProcessed()
|
||||||
return true
|
return true
|
||||||
|
@ -96,7 +96,7 @@ func (t *CounterProcessorTest) Test_FailureProcessed() {
|
|||||||
p.Process(1, c)
|
p.Process(1, c)
|
||||||
c.AssertExpectations(t.T())
|
c.AssertExpectations(t.T())
|
||||||
t.Assert().Contains(log.String(), "skipping counter because its failure is already processed")
|
t.Assert().Contains(log.String(), "skipping counter because its failure is already processed")
|
||||||
t.Assert().Contains(log.String(), "id=1")
|
t.Assert().Contains(log.String(), "counterId=1")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *CounterProcessorTest) Test_CounterFailed_CannotFindConnection() {
|
func (t *CounterProcessorTest) Test_CounterFailed_CannotFindConnection() {
|
||||||
@ -109,7 +109,7 @@ func (t *CounterProcessorTest) Test_CounterFailed_CannotFindConnection() {
|
|||||||
p.Process(1, c)
|
p.Process(1, c)
|
||||||
c.AssertExpectations(t.T())
|
c.AssertExpectations(t.T())
|
||||||
t.Assert().Contains(log.String(), "cannot find connection data for counter")
|
t.Assert().Contains(log.String(), "cannot find connection data for counter")
|
||||||
t.Assert().Contains(log.String(), "id=1")
|
t.Assert().Contains(log.String(), "counterId=1")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *CounterProcessorTest) Test_CounterFailed_ErrWhileNotifying() {
|
func (t *CounterProcessorTest) Test_CounterFailed_ErrWhileNotifying() {
|
||||||
@ -124,9 +124,9 @@ func (t *CounterProcessorTest) Test_CounterFailed_ErrWhileNotifying() {
|
|||||||
p.Process(1, c)
|
p.Process(1, c)
|
||||||
c.AssertExpectations(t.T())
|
c.AssertExpectations(t.T())
|
||||||
t.Assert().Contains(log.String(), "cannot send notification for counter")
|
t.Assert().Contains(log.String(), "cannot send notification for counter")
|
||||||
t.Assert().Contains(log.String(), "id=1")
|
t.Assert().Contains(log.String(), "counterId=1")
|
||||||
t.Assert().Contains(log.String(), `error="http status code: 500"`)
|
t.Assert().Contains(log.String(), `error="http status code: 500"`)
|
||||||
t.Assert().Contains(log.String(), `message="error message"`)
|
t.Assert().Contains(log.String(), `failureMessage="error message"`)
|
||||||
t.Assert().Equal(t.apiURL, n.apiURL)
|
t.Assert().Equal(t.apiURL, n.apiURL)
|
||||||
t.Assert().Equal(t.apiKey, n.apiKey)
|
t.Assert().Equal(t.apiKey, n.apiKey)
|
||||||
t.Assert().Equal("error message", n.message)
|
t.Assert().Equal("error message", n.message)
|
||||||
@ -160,7 +160,7 @@ func (t *CounterProcessorTest) Test_TooFewRequests() {
|
|||||||
p.Process(1, c)
|
p.Process(1, c)
|
||||||
c.AssertExpectations(t.T())
|
c.AssertExpectations(t.T())
|
||||||
t.Assert().Contains(log.String(),
|
t.Assert().Contains(log.String(),
|
||||||
fmt.Sprintf(`msg="skipping counter because it has too few requests" id=%d minRequests=%d`, 1, DefaultMinRequests))
|
fmt.Sprintf(`msg="skipping counter because it has too few requests" counterId=%d minRequests=%d`, 1, DefaultMinRequests))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *CounterProcessorTest) Test_ThresholdNotPassed() {
|
func (t *CounterProcessorTest) Test_ThresholdNotPassed() {
|
||||||
@ -206,7 +206,7 @@ func (t *CounterProcessorTest) Test_ThresholdPassed_NoConnectionFound() {
|
|||||||
p.Process(1, c)
|
p.Process(1, c)
|
||||||
c.AssertExpectations(t.T())
|
c.AssertExpectations(t.T())
|
||||||
t.Assert().Contains(log.String(), "cannot find connection data for counter")
|
t.Assert().Contains(log.String(), "cannot find connection data for counter")
|
||||||
t.Assert().Contains(log.String(), "id=1")
|
t.Assert().Contains(log.String(), "counterId=1")
|
||||||
t.Assert().Empty(n.message)
|
t.Assert().Empty(n.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +224,7 @@ func (t *CounterProcessorTest) Test_ThresholdPassed_NotifyingError() {
|
|||||||
|
|
||||||
p.Process(1, c)
|
p.Process(1, c)
|
||||||
c.AssertExpectations(t.T())
|
c.AssertExpectations(t.T())
|
||||||
t.Assert().Contains(log.String(), `msg="cannot send notification for counter" id=1 error="unknown error" message=""`)
|
t.Assert().Contains(log.String(), `msg="cannot send notification for counter" counterId=1 error="unknown error" failureMessage=""`)
|
||||||
t.Assert().Equal(`default error [{"Name":"MockedCounter"}]`, n.message)
|
t.Assert().Equal(`default error [{"Name":"MockedCounter"}]`, n.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ func NewJobManager() *JobManager {
|
|||||||
func DefaultJobErrorHandler() JobErrorHandler {
|
func DefaultJobErrorHandler() JobErrorHandler {
|
||||||
return func(name string, err error, log logger.Logger) {
|
return func(name string, err error, log logger.Logger) {
|
||||||
if err != nil && name != "" {
|
if err != nil && name != "" {
|
||||||
log.Error("job failed with an error", slog.String("job", name), logger.ErrAttr(err))
|
log.Error("job failed with an error", slog.String("job", name), logger.Err(err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package logger
|
package logger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"log/slog"
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
@ -18,7 +19,7 @@ const (
|
|||||||
HTTPStatusNameAttr = "httpStatusName"
|
HTTPStatusNameAttr = "httpStatusName"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ErrAttr(err any) slog.Attr {
|
func Err(err any) slog.Attr {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return slog.String(ErrorAttr, "<nil>")
|
return slog.String(ErrorAttr, "<nil>")
|
||||||
}
|
}
|
||||||
@ -34,5 +35,12 @@ func HTTPStatusName(code int) slog.Attr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Body(val any) slog.Attr {
|
func Body(val any) slog.Attr {
|
||||||
return slog.Any(BodyAttr, val)
|
switch item := val.(type) {
|
||||||
|
case string:
|
||||||
|
return slog.String(BodyAttr, item)
|
||||||
|
case []byte:
|
||||||
|
return slog.String(BodyAttr, string(item))
|
||||||
|
default:
|
||||||
|
return slog.String(BodyAttr, fmt.Sprintf("%#v", val))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
18
core/logger/mg_transport_client_adapter.go
Normal file
18
core/logger/mg_transport_client_adapter.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package logger
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
v1 "github.com/retailcrm/mg-transport-api-client-go/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type mgTransportClientAdapter struct {
|
||||||
|
log Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func MGTransportClientAdapter(log Logger) v1.DebugLogger {
|
||||||
|
return &mgTransportClientAdapter{log: log}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mgTransportClientAdapter) Debugf(msg string, args ...interface{}) {
|
||||||
|
m.log.Debug(fmt.Sprintf(msg, args...))
|
||||||
|
}
|
@ -65,13 +65,13 @@ func NewModuleFeaturesUploader(
|
|||||||
awsConfig.WithCredentialsProvider(customProvider),
|
awsConfig.WithCredentialsProvider(customProvider),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("cannot load S3 configuration", logger.ErrAttr(err))
|
log.Error("cannot load S3 configuration", logger.Err(err))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
client := manager.NewUploader(s3.NewFromConfig(cfg))
|
client := manager.NewUploader(s3.NewFromConfig(cfg))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("cannot load S3 configuration", logger.ErrAttr(err))
|
log.Error("cannot load S3 configuration", logger.Err(err))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,14 +91,14 @@ func (s *ModuleFeaturesUploader) Upload() {
|
|||||||
|
|
||||||
content, err := os.ReadFile(s.featuresFilename)
|
content, err := os.ReadFile(s.featuresFilename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Error("cannot read markdown file %s %s", slog.String("fileName", s.featuresFilename), logger.ErrAttr(err))
|
s.log.Error("cannot read markdown file %s %s", slog.String("fileName", s.featuresFilename), logger.Err(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, lang := range languages {
|
for _, lang := range languages {
|
||||||
translated, err := s.translate(content, lang)
|
translated, err := s.translate(content, lang)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Error("cannot translate module features file", slog.String("lang", lang.String()), logger.ErrAttr(err))
|
s.log.Error("cannot translate module features file", slog.String("lang", lang.String()), logger.Err(err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ func (s *ModuleFeaturesUploader) Upload() {
|
|||||||
resp, err := s.uploadFile(html, lang.String())
|
resp, err := s.uploadFile(html, lang.String())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Error("cannot upload file", slog.String("lang", lang.String()), logger.ErrAttr(err))
|
s.log.Error("cannot upload file", slog.String("lang", lang.String()), logger.Err(err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ func (s *Sentry) recoveryMiddleware() gin.HandlerFunc { // nolint
|
|||||||
if l != nil {
|
if l != nil {
|
||||||
// TODO: Check if we can output stacktraces with prefix data like before if we really need it.
|
// TODO: Check if we can output stacktraces with prefix data like before if we really need it.
|
||||||
stack := stacktrace.FormattedStack(3, "trace: ")
|
stack := stacktrace.FormattedStack(3, "trace: ")
|
||||||
formattedErr := logger.ErrAttr(err)
|
formattedErr := logger.Err(err)
|
||||||
httpRequest, _ := httputil.DumpRequest(c.Request, false)
|
httpRequest, _ := httputil.DumpRequest(c.Request, false)
|
||||||
headers := strings.Split(string(httpRequest), "\r\n")
|
headers := strings.Split(string(httpRequest), "\r\n")
|
||||||
for idx, header := range headers {
|
for idx, header := range headers {
|
||||||
|
2
go.mod
2
go.mod
@ -24,7 +24,7 @@ require (
|
|||||||
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
|
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/retailcrm/api-client-go/v2 v2.1.3
|
github.com/retailcrm/api-client-go/v2 v2.1.3
|
||||||
github.com/retailcrm/mg-transport-api-client-go v1.1.32
|
github.com/retailcrm/mg-transport-api-client-go v1.3.4
|
||||||
github.com/retailcrm/zabbix-metrics-collector v1.0.0
|
github.com/retailcrm/zabbix-metrics-collector v1.0.0
|
||||||
github.com/stretchr/testify v1.8.3
|
github.com/stretchr/testify v1.8.3
|
||||||
go.uber.org/atomic v1.10.0
|
go.uber.org/atomic v1.10.0
|
||||||
|
2
go.sum
2
go.sum
@ -379,6 +379,8 @@ github.com/retailcrm/api-client-go/v2 v2.1.3 h1:AVcp9oeSOm6+3EWXCgdQs+XE3PTjzCKK
|
|||||||
github.com/retailcrm/api-client-go/v2 v2.1.3/go.mod h1:1yTZl9+gd3+/k0kAJe7sYvC+mL4fqMwIwtnSgSWZlkQ=
|
github.com/retailcrm/api-client-go/v2 v2.1.3/go.mod h1:1yTZl9+gd3+/k0kAJe7sYvC+mL4fqMwIwtnSgSWZlkQ=
|
||||||
github.com/retailcrm/mg-transport-api-client-go v1.1.32 h1:IBPltSoD5q2PPZJbNC/prK5F9rEVPXVx/ZzDpi7HKhs=
|
github.com/retailcrm/mg-transport-api-client-go v1.1.32 h1:IBPltSoD5q2PPZJbNC/prK5F9rEVPXVx/ZzDpi7HKhs=
|
||||||
github.com/retailcrm/mg-transport-api-client-go v1.1.32/go.mod h1:AWV6BueE28/6SCoyfKURTo4lF0oXYoOKmHTzehd5vAI=
|
github.com/retailcrm/mg-transport-api-client-go v1.1.32/go.mod h1:AWV6BueE28/6SCoyfKURTo4lF0oXYoOKmHTzehd5vAI=
|
||||||
|
github.com/retailcrm/mg-transport-api-client-go v1.3.4 h1:HIn4eorABNfudn7hr5Rd6XYC/ieDTqCkaq6wv0AFTBE=
|
||||||
|
github.com/retailcrm/mg-transport-api-client-go v1.3.4/go.mod h1:gDe/tj7t3Hr/uwIFSBVgGAmP85PoLajVl1A+skBo1Ro=
|
||||||
github.com/retailcrm/zabbix-metrics-collector v1.0.0 h1:ju3rhpgVoiKII6oXEJEf2eoJy5bNcYAmOPRp1oPWDmA=
|
github.com/retailcrm/zabbix-metrics-collector v1.0.0 h1:ju3rhpgVoiKII6oXEJEf2eoJy5bNcYAmOPRp1oPWDmA=
|
||||||
github.com/retailcrm/zabbix-metrics-collector v1.0.0/go.mod h1:3Orc+gfSg1tXj89QNvOn22t0cO1i2whR/4NJUGonWJA=
|
github.com/retailcrm/zabbix-metrics-collector v1.0.0/go.mod h1:3Orc+gfSg1tXj89QNvOn22t0cO1i2whR/4NJUGonWJA=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
|
Loading…
Reference in New Issue
Block a user