@@ -20,13 +20,15 @@ import (
20
20
"time"
21
21
22
22
"github.com/BurntSushi/toml"
23
+ "github.com/bluele/logrus_slack"
23
24
"github.com/signal18/replication-manager/cluster/configurator"
24
25
"github.com/signal18/replication-manager/cluster/nbc"
25
26
"github.com/signal18/replication-manager/config"
26
27
v3 "github.com/signal18/replication-manager/repmanv3"
27
28
"github.com/signal18/replication-manager/router/maxscale"
28
29
"github.com/signal18/replication-manager/utils/cron"
29
30
"github.com/signal18/replication-manager/utils/dbhelper"
31
+ "github.com/signal18/replication-manager/utils/logrus/hooks/pushover"
30
32
"github.com/signal18/replication-manager/utils/s18log"
31
33
"github.com/signal18/replication-manager/utils/state"
32
34
log "github.com/sirupsen/logrus"
@@ -95,7 +97,9 @@ type Cluster struct {
95
97
DBIndexSize int64 `json:"dbIndexSize"`
96
98
Connections int `json:"connections"`
97
99
QPS int64 `json:"qps"`
100
+ LogVault * log.Logger `json:"-"`
98
101
Log s18log.HttpLog `json:"log"`
102
+ LogSlack * log.Logger `json:"-"`
99
103
JobResults map [string ]* JobResult `json:"jobResults"`
100
104
Grants map [string ]string `json:"-"`
101
105
tlog * s18log.TermLog `json:"-"`
@@ -252,7 +256,7 @@ const (
252
256
)
253
257
254
258
// Init initial cluster definition
255
- func (cluster * Cluster ) Init (conf config.Config , cfgGroup string , tlog * s18log.TermLog , log * s18log.HttpLog , termlength int , runUUID string , repmgrVersion string , repmgrHostname string , key []byte ) error {
259
+ func (cluster * Cluster ) Init (conf config.Config , cfgGroup string , tlog * s18log.TermLog , loghttp * s18log.HttpLog , termlength int , runUUID string , repmgrVersion string , repmgrHostname string , key []byte ) error {
256
260
cluster .SqlErrorLog = logsql .New ()
257
261
cluster .SqlGeneralLog = logsql .New ()
258
262
cluster .crcTable = crc64 .MakeTable (crc64 .ECMA ) // http://golang.org/pkg/hash/crc64/#pkg-constants
@@ -270,7 +274,7 @@ func (cluster *Cluster) Init(conf config.Config, cfgGroup string, tlog *s18log.T
270
274
cluster .testStopCluster = true
271
275
cluster .testStartCluster = true
272
276
cluster .tlog = tlog
273
- cluster .htlog = log
277
+ cluster .htlog = loghttp
274
278
cluster .termlength = termlength
275
279
cluster .Name = cfgGroup
276
280
cluster .WorkingDir = conf .WorkingDir + "/" + cluster .Name
@@ -307,6 +311,29 @@ func (cluster *Cluster) Init(conf config.Config, cfgGroup string, tlog *s18log.T
307
311
os .MkdirAll (cluster .Conf .WorkingDir + "/" + cluster .Name , os .ModePerm )
308
312
}
309
313
314
+ cluster .LogVault = log .New ()
315
+
316
+ if cluster .Conf .PushoverAppToken != "" && cluster .Conf .PushoverUserToken != "" {
317
+ cluster .LogVault .AddHook (
318
+ pushover .NewHook (cluster .Conf .PushoverAppToken , cluster .Conf .PushoverUserToken ),
319
+ )
320
+ cluster .LogVault .SetLevel (log .WarnLevel )
321
+ }
322
+
323
+ cluster .LogSlack = log .New ()
324
+
325
+ if cluster .Conf .SlackURL != "" {
326
+ cluster .LogSlack .AddHook (& logrus_slack.SlackHook {
327
+ HookURL : cluster .Conf .SlackURL ,
328
+ AcceptedLevels : logrus_slack .LevelThreshold (log .WarnLevel ),
329
+ Channel : cluster .Conf .SlackChannel ,
330
+ IconEmoji : ":ghost:" ,
331
+ Username : cluster .Conf .SlackUser ,
332
+ Timeout : 5 * time .Second , // request timeout for calling slack api
333
+ })
334
+ }
335
+ cluster .LogPrintf ("ALERT" , "Replication manager init cluster version : %s" , cluster .Conf .Version )
336
+
310
337
hookerr , err := s18log .NewRotateFileHook (s18log.RotateFileConfig {
311
338
Filename : cluster .WorkingDir + "/sql_error.log" ,
312
339
MaxSize : cluster .Conf .LogRotateMaxSize ,
0 commit comments