Allow PostAgent headers to interpolate event data (#1606)

This commit is contained in:
Andrew Cantino 2016-07-25 19:59:14 -04:00 committed by GitHub
parent 6c9d1c0f55
commit cc72f79e0b
2 changed files with 31 additions and 9 deletions

View file

@ -122,17 +122,19 @@ module Agents
def receive(incoming_events)
incoming_events.each do |event|
outgoing = interpolated(event)['payload'].presence || {}
if boolify(interpolated['no_merge'])
handle outgoing, event.payload
else
handle outgoing.merge(event.payload), event.payload
interpolate_with(event) do
outgoing = interpolated['payload'].presence || {}
if boolify(interpolated['no_merge'])
handle outgoing, event.payload, headers(interpolated[:headers])
else
handle outgoing.merge(event.payload), event.payload, headers(interpolated[:headers])
end
end
end
end
def check
handle interpolated['payload'].presence || {}
handle interpolated['payload'].presence || {}, headers
end
private
@ -160,9 +162,8 @@ module Agents
}
end
def handle(data, payload = {})
def handle(data, payload = {}, headers)
url = interpolated(payload)[:post_url]
headers = headers()
case method
when 'get', 'delete'

View file

@ -33,7 +33,7 @@ describe Agents::PostAgent do
stub_request(:any, /:/).to_return { |request|
method = request.method
@requests += 1
@sent_requests[method] << req = OpenStruct.new(uri: request.uri)
@sent_requests[method] << req = OpenStruct.new(uri: request.uri, headers: request.headers)
case method
when :get, :delete
req.data = request.uri.query
@ -137,6 +137,18 @@ describe Agents::PostAgent do
expect(uri.path).to eq('/a_variable')
expect(uri.query).to eq("existing_param=existing_value")
end
it "interpolates outgoing headers with the event payload" do
@checker.options['headers'] = {
"Foo" => "{{ variable }}"
}
@event.payload = {
'variable' => 'a_variable'
}
@checker.receive([@event])
headers = @sent_requests[:post].first.headers
expect(headers["Foo"]).to eq("a_variable")
end
end
describe "#check" do
@ -199,6 +211,15 @@ describe Agents::PostAgent do
expect(@sent_requests[:post][0].data).to eq('<test>hello</test>')
end
it "interpolates outgoing headers" do
@checker.options['headers'] = {
"Foo" => "{% credential aws_key %}"
}
@checker.check
headers = @sent_requests[:post].first.headers
expect(headers["Foo"]).to eq("2222222222-jane")
end
describe "emitting events" do
context "when emit_events is not set to true" do
it "does not emit events" do