From cc72f79e0beffd011b60e220b0591d64ffc60731 Mon Sep 17 00:00:00 2001 From: Andrew Cantino Date: Mon, 25 Jul 2016 19:59:14 -0400 Subject: [PATCH] Allow PostAgent headers to interpolate event data (#1606) --- app/models/agents/post_agent.rb | 17 +++++++++-------- spec/models/agents/post_agent_spec.rb | 23 ++++++++++++++++++++++- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/app/models/agents/post_agent.rb b/app/models/agents/post_agent.rb index 082d8538..a6e754d0 100644 --- a/app/models/agents/post_agent.rb +++ b/app/models/agents/post_agent.rb @@ -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' diff --git a/spec/models/agents/post_agent_spec.rb b/spec/models/agents/post_agent_spec.rb index 77b0f947..e940d330 100644 --- a/spec/models/agents/post_agent_spec.rb +++ b/spec/models/agents/post_agent_spec.rb @@ -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('hello') 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