web hooks: improve resilience by adding a configurable retry

the retryable http client is used for hooks that notify events
This commit is contained in:
Nicola Murino
2021-02-12 21:42:49 +01:00
parent 51f110bc7b
commit 6a6e8fffbc
13 changed files with 103 additions and 16 deletions

View File

@@ -58,6 +58,56 @@ func (l *StdLoggerWrapper) Write(p []byte) (n int, err error) {
return
}
// LeveledLogger is a logger that accepts a message string and a variadic number of key-value pairs
type LeveledLogger struct {
Sender string
}
func (l *LeveledLogger) addKeysAndValues(ev *zerolog.Event, keysAndValues ...interface{}) {
for i := 0; i < len(keysAndValues); {
if i == len(keysAndValues)-1 {
break
}
key, val := keysAndValues[i], keysAndValues[i+1]
if keyStr, ok := key.(string); ok {
ev.Str(keyStr, fmt.Sprintf("%v", val))
}
i += 2
}
}
// Error logs at error level for the specified sender
func (l *LeveledLogger) Error(msg string, keysAndValues ...interface{}) {
ev := logger.Error()
ev.Timestamp().Str("sender", l.Sender)
l.addKeysAndValues(ev, keysAndValues...)
ev.Send()
}
// Info logs at info level for the specified sender
func (l *LeveledLogger) Info(msg string, keysAndValues ...interface{}) {
ev := logger.Info()
ev.Timestamp().Str("sender", l.Sender)
l.addKeysAndValues(ev, keysAndValues...)
ev.Send()
}
// Debug logs at debug level for the specified sender
func (l *LeveledLogger) Debug(msg string, keysAndValues ...interface{}) {
ev := logger.Debug()
ev.Timestamp().Str("sender", l.Sender)
l.addKeysAndValues(ev, keysAndValues...)
ev.Send()
}
// Warn logs at warn level for the specified sender
func (l *LeveledLogger) Warn(msg string, keysAndValues ...interface{}) {
ev := logger.Warn()
ev.Timestamp().Str("sender", l.Sender)
l.addKeysAndValues(ev, keysAndValues...)
ev.Send()
}
// GetLogger get the configured logger instance
func GetLogger() *zerolog.Logger {
return &logger