-
Notifications
You must be signed in to change notification settings - Fork 0
/
re_configuration.go
94 lines (68 loc) · 2.26 KB
/
re_configuration.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package sentry
import (
"github.com/D3rus/go-library/configurator"
"github.com/D3rus/go-library/logger"
logrusSentry "github.com/evalphobia/logrus_sentry"
"github.com/sirupsen/logrus"
"sync"
)
type ReConfiguration struct {
sentryHook *logrusSentry.SentryHook
rwMutex *sync.RWMutex
informer logger.Informer
config *Config
}
func NewReConfigurationWithConfigurator(informer logger.Informer, config *Config, configurator configurator.Configurator) (*ReConfiguration, error) {
return NewReConfiguration(informer, Configuration(config, configurator))
}
func NewReConfiguration(informer logger.Informer, config *Config) (*ReConfiguration, error) {
reConfiguration := &ReConfiguration{informer: informer, config: config, rwMutex: &sync.RWMutex{}}
return reConfiguration, reConfiguration.init(config)
}
func (reConfiguration *ReConfiguration) Levels() []logrus.Level {
sentryHook := reConfiguration.SentryHook()
if sentryHook == nil {
return nil
}
return sentryHook.Levels()
}
func (reConfiguration *ReConfiguration) Fire(entry *logrus.Entry) error {
sentryHook := reConfiguration.SentryHook()
if sentryHook == nil {
return nil
}
return sentryHook.Fire(entry)
}
func (reConfiguration *ReConfiguration) ReConfiguration(configurator configurator.Configurator) error {
isConfigChange := false
config := Configuration(NewConfig(), configurator)
if config.DSN != reConfiguration.config.DSN {
reConfiguration.informer.Infof("logger.sentry: old dsn '%s', new dsn '%s'", reConfiguration.config.DSN, config.DSN)
reConfiguration.config.DSN = config.DSN
isConfigChange = true
}
if isConfigChange {
reConfiguration.informer.Info("logger.sentry: config change detected")
return reConfiguration.init(reConfiguration.config)
}
return nil
}
func (reConfiguration *ReConfiguration) init(config *Config) error {
reConfiguration.rwMutex.Lock()
defer reConfiguration.rwMutex.Unlock()
reConfiguration.sentryHook = nil
if config.DSN == "" {
return nil
}
sentryHook, err := New(config)
if err != nil {
return err
}
reConfiguration.sentryHook = sentryHook
return nil
}
func (reConfiguration *ReConfiguration) SentryHook() *logrusSentry.SentryHook {
reConfiguration.rwMutex.RLock()
defer reConfiguration.rwMutex.RUnlock()
return reConfiguration.sentryHook
}