@@ -48,6 +48,7 @@ import (
48
48
type Module interface {
49
49
protocol.Module
50
50
GetName () string
51
+ GetCluster () string
51
52
GetGroupAllowlist () * regexp.Regexp
52
53
GetGroupDenylist () * regexp.Regexp
53
54
GetLogger () * zap.Logger
@@ -95,7 +96,7 @@ type Coordinator struct {
95
96
96
97
// getModuleForClass returns the correct module based on the passed className. As part of the Configure steps, if there
97
98
// is any error, it will panic with an appropriate message describing the problem.
98
- func getModuleForClass (app * protocol.ApplicationContext , moduleName , className string , groupAllowlist , groupDenylist * regexp.Regexp , extras map [string ]string , templateOpen , templateClose * template.Template ) protocol.Module {
99
+ func getModuleForClass (app * protocol.ApplicationContext , moduleName , className string , groupAllowlist , groupDenylist * regexp.Regexp , extras map [string ]string , templateOpen , templateClose * template.Template , cluster string ) protocol.Module {
99
100
logger := app .Logger .With (
100
101
zap .String ("type" , "module" ),
101
102
zap .String ("coordinator" , "notifier" ),
@@ -113,6 +114,7 @@ func getModuleForClass(app *protocol.ApplicationContext, moduleName, className s
113
114
extras : extras ,
114
115
templateOpen : templateOpen ,
115
116
templateClose : templateClose ,
117
+ cluster : cluster ,
116
118
}
117
119
case "email" :
118
120
return & EmailNotifier {
@@ -123,6 +125,7 @@ func getModuleForClass(app *protocol.ApplicationContext, moduleName, className s
123
125
extras : extras ,
124
126
templateOpen : templateOpen ,
125
127
templateClose : templateClose ,
128
+ cluster : cluster ,
126
129
}
127
130
case "null" :
128
131
return & NullNotifier {
@@ -133,6 +136,7 @@ func getModuleForClass(app *protocol.ApplicationContext, moduleName, className s
133
136
extras : extras ,
134
137
templateOpen : templateOpen ,
135
138
templateClose : templateClose ,
139
+ cluster : cluster ,
136
140
}
137
141
default :
138
142
panic ("Unknown notifier className provided: " + className )
@@ -194,6 +198,8 @@ func (nc *Coordinator) Configure() {
194
198
groupAllowlist = re
195
199
}
196
200
201
+ cluster := viper .GetString (configRoot + ".cluster" )
202
+
197
203
// Compile the denylist for the consumer groups to not notify for
198
204
var groupDenylist * regexp.Regexp
199
205
denylist := viper .GetString (configRoot + ".group-denylist" )
@@ -227,7 +233,7 @@ func (nc *Coordinator) Configure() {
227
233
templateClose = tmpl .Templates ()[0 ]
228
234
}
229
235
230
- module := getModuleForClass (nc .App , name , viper .GetString (configRoot + ".class-name" ), groupAllowlist , groupDenylist , extras , templateOpen , templateClose )
236
+ module := getModuleForClass (nc .App , name , viper .GetString (configRoot + ".class-name" ), groupAllowlist , groupDenylist , extras , templateOpen , templateClose , cluster )
231
237
module .Configure (name , configRoot )
232
238
nc .modules [name ] = module
233
239
interval := viper .GetInt64 (configRoot + ".interval" )
@@ -436,6 +442,9 @@ func (nc *Coordinator) checkAndSendResponseToModules(response *protocol.Consumer
436
442
for _ , genericModule := range nc .modules {
437
443
module := genericModule .(Module )
438
444
445
+ if module .GetCluster () != "" && response .Cluster != module .GetCluster () {
446
+ continue
447
+ }
439
448
// No allowlist means everything passes
440
449
groupAllowlist := module .GetGroupAllowlist ()
441
450
groupDenylist := module .GetGroupDenylist ()
0 commit comments