9
9
"github.com/grafana/agent/component/otelcol/receiver"
10
10
otel_service "github.com/grafana/agent/service/otel"
11
11
"github.com/grafana/river/rivertypes"
12
+ "github.com/mitchellh/mapstructure"
12
13
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter"
13
14
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver"
14
15
otelcomponent "go.opentelemetry.io/collector/component"
@@ -38,10 +39,11 @@ type Arguments struct {
38
39
ClientID string `river:"client_id,attr,optional"`
39
40
InitialOffset string `river:"initial_offset,attr,optional"`
40
41
41
- Authentication AuthenticationArguments `river:"authentication,block,optional"`
42
- Metadata MetadataArguments `river:"metadata,block,optional"`
43
- AutoCommit AutoCommitArguments `river:"autocommit,block,optional"`
44
- MessageMarking MessageMarkingArguments `river:"message_marking,block,optional"`
42
+ Authentication AuthenticationArguments `river:"authentication,block,optional"`
43
+ Metadata MetadataArguments `river:"metadata,block,optional"`
44
+ AutoCommit AutoCommitArguments `river:"autocommit,block,optional"`
45
+ MessageMarking MessageMarkingArguments `river:"message_marking,block,optional"`
46
+ HeaderExtraction HeaderExtraction `river:"header_extraction,block,optional"`
45
47
46
48
// DebugMetrics configures component internal metrics. Optional.
47
49
DebugMetrics otelcol.DebugMetricsArguments `river:"debug_metrics,block,optional"`
@@ -79,6 +81,10 @@ var DefaultArguments = Arguments{
79
81
AfterExecution : false ,
80
82
IncludeUnsuccessful : false ,
81
83
},
84
+ HeaderExtraction : HeaderExtraction {
85
+ ExtractHeaders : false ,
86
+ Headers : []string {},
87
+ },
82
88
}
83
89
84
90
// SetToDefault implements river.Defaulter.
@@ -88,20 +94,28 @@ func (args *Arguments) SetToDefault() {
88
94
89
95
// Convert implements receiver.Arguments.
90
96
func (args Arguments ) Convert () (otelcomponent.Config , error ) {
91
- return & kafkareceiver.Config {
92
- Brokers : args .Brokers ,
93
- ProtocolVersion : args .ProtocolVersion ,
94
- Topic : args .Topic ,
95
- Encoding : args .Encoding ,
96
- GroupID : args .GroupID ,
97
- ClientID : args .ClientID ,
98
- InitialOffset : args .InitialOffset ,
99
-
100
- Authentication : args .Authentication .Convert (),
101
- Metadata : args .Metadata .Convert (),
102
- AutoCommit : args .AutoCommit .Convert (),
103
- MessageMarking : args .MessageMarking .Convert (),
104
- }, nil
97
+ input := make (map [string ]interface {})
98
+ input ["auth" ] = args .Authentication .Convert ()
99
+
100
+ var result kafkareceiver.Config
101
+ err := mapstructure .Decode (input , & result )
102
+ if err != nil {
103
+ return nil , err
104
+ }
105
+
106
+ result .Brokers = args .Brokers
107
+ result .ProtocolVersion = args .ProtocolVersion
108
+ result .Topic = args .Topic
109
+ result .Encoding = args .Encoding
110
+ result .GroupID = args .GroupID
111
+ result .ClientID = args .ClientID
112
+ result .InitialOffset = args .InitialOffset
113
+ result .Metadata = args .Metadata .Convert ()
114
+ result .AutoCommit = args .AutoCommit .Convert ()
115
+ result .MessageMarking = args .MessageMarking .Convert ()
116
+ result .HeaderExtraction = args .HeaderExtraction .Convert ()
117
+
118
+ return & result , nil
105
119
}
106
120
107
121
// Extensions implements receiver.Arguments.
@@ -128,26 +142,26 @@ type AuthenticationArguments struct {
128
142
}
129
143
130
144
// Convert converts args into the upstream type.
131
- func (args AuthenticationArguments ) Convert () kafkaexporter. Authentication {
132
- var res kafkaexporter. Authentication
145
+ func (args AuthenticationArguments ) Convert () map [ string ] interface {} {
146
+ auth := make ( map [ string ] interface {})
133
147
134
148
if args .Plaintext != nil {
135
149
conv := args .Plaintext .Convert ()
136
- res . PlainText = & conv
150
+ auth [ "plain_text" ] = & conv
137
151
}
138
152
if args .SASL != nil {
139
153
conv := args .SASL .Convert ()
140
- res . SASL = & conv
154
+ auth [ "sasl" ] = & conv
141
155
}
142
156
if args .TLS != nil {
143
- res . TLS = args .TLS .Convert ()
157
+ auth [ "tls" ] = args .TLS .Convert ()
144
158
}
145
159
if args .Kerberos != nil {
146
160
conv := args .Kerberos .Convert ()
147
- res . Kerberos = & conv
161
+ auth [ "kerberos" ] = & conv
148
162
}
149
163
150
- return res
164
+ return auth
151
165
}
152
166
153
167
// PlaintextArguments configures plaintext authentication against the Kafka
@@ -158,10 +172,10 @@ type PlaintextArguments struct {
158
172
}
159
173
160
174
// Convert converts args into the upstream type.
161
- func (args PlaintextArguments ) Convert () kafkaexporter. PlainTextConfig {
162
- return kafkaexporter. PlainTextConfig {
163
- Username : args .Username ,
164
- Password : string (args .Password ),
175
+ func (args PlaintextArguments ) Convert () map [ string ] interface {} {
176
+ return map [ string ] interface {} {
177
+ "username" : args .Username ,
178
+ "password" : string (args .Password ),
165
179
}
166
180
}
167
181
@@ -170,16 +184,18 @@ type SASLArguments struct {
170
184
Username string `river:"username,attr"`
171
185
Password rivertypes.Secret `river:"password,attr"`
172
186
Mechanism string `river:"mechanism,attr"`
187
+ Version int `river:"version,attr,optional"`
173
188
AWSMSK AWSMSKArguments `river:"aws_msk,block,optional"`
174
189
}
175
190
176
191
// Convert converts args into the upstream type.
177
- func (args SASLArguments ) Convert () kafkaexporter.SASLConfig {
178
- return kafkaexporter.SASLConfig {
179
- Username : args .Username ,
180
- Password : string (args .Password ),
181
- Mechanism : args .Mechanism ,
182
- AWSMSK : args .AWSMSK .Convert (),
192
+ func (args SASLArguments ) Convert () map [string ]interface {} {
193
+ return map [string ]interface {}{
194
+ "username" : args .Username ,
195
+ "password" : string (args .Password ),
196
+ "mechanism" : args .Mechanism ,
197
+ "version" : args .Version ,
198
+ "aws_msk" : args .AWSMSK .Convert (),
183
199
}
184
200
}
185
201
@@ -191,10 +207,10 @@ type AWSMSKArguments struct {
191
207
}
192
208
193
209
// Convert converts args into the upstream type.
194
- func (args AWSMSKArguments ) Convert () kafkaexporter. AWSMSKConfig {
195
- return kafkaexporter. AWSMSKConfig {
196
- Region : args .Region ,
197
- BrokerAddr : args .BrokerAddr ,
210
+ func (args AWSMSKArguments ) Convert () map [ string ] interface {} {
211
+ return map [ string ] interface {} {
212
+ "region" : args .Region ,
213
+ "broker_addr" : args .BrokerAddr ,
198
214
}
199
215
}
200
216
@@ -211,15 +227,15 @@ type KerberosArguments struct {
211
227
}
212
228
213
229
// Convert converts args into the upstream type.
214
- func (args KerberosArguments ) Convert () kafkaexporter. KerberosConfig {
215
- return kafkaexporter. KerberosConfig {
216
- ServiceName : args .ServiceName ,
217
- Realm : args .Realm ,
218
- UseKeyTab : args .UseKeyTab ,
219
- Username : args .Username ,
220
- Password : string (args .Password ),
221
- ConfigPath : args .ConfigPath ,
222
- KeyTabPath : args .KeyTabPath ,
230
+ func (args KerberosArguments ) Convert () map [ string ] interface {} {
231
+ return map [ string ] interface {} {
232
+ "service_name" : args .ServiceName ,
233
+ "realm" : args .Realm ,
234
+ "use_keytab" : args .UseKeyTab ,
235
+ "username" : args .Username ,
236
+ "password" : string (args .Password ),
237
+ "config_file" : args .ConfigPath ,
238
+ "keytab_file" : args .KeyTabPath ,
223
239
}
224
240
}
225
241
@@ -283,6 +299,19 @@ func (args MessageMarkingArguments) Convert() kafkareceiver.MessageMarking {
283
299
}
284
300
}
285
301
302
+ type HeaderExtraction struct {
303
+ ExtractHeaders bool `river:"extract_headers,attr,optional"`
304
+ Headers []string `river:"headers,attr,optional"`
305
+ }
306
+
307
+ // Convert converts HeaderExtraction into the upstream type.
308
+ func (h HeaderExtraction ) Convert () kafkareceiver.HeaderExtraction {
309
+ return kafkareceiver.HeaderExtraction {
310
+ ExtractHeaders : h .ExtractHeaders ,
311
+ Headers : h .Headers ,
312
+ }
313
+ }
314
+
286
315
// DebugMetricsConfig implements receiver.Arguments.
287
316
func (args Arguments ) DebugMetricsConfig () otelcol.DebugMetricsArguments {
288
317
return args .DebugMetrics
0 commit comments