Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# use container-based infrastructure
sudo: false

jdk:
- oraclejdk8
rvm:
- 1.9.3
- 2.1.10
Expand Down
3 changes: 2 additions & 1 deletion lib/appoptics/metrics.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ module Metrics
:get_snapshot, :get_source, :metrics,
:persistence, :persistence=, :persister, :proxy, :proxy=,
:sources, :submit, :update_metric, :update_metrics,
:update_source, :custom_headers=
:update_source, :custom_headers=, :client_timeout=,
:open_timeout=, :retry_count=

# The AppOptics::Metrics::Client being used by module-level
# access.
Expand Down
9 changes: 6 additions & 3 deletions lib/appoptics/metrics/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ class Client

def_delegator :annotator, :add, :annotate

attr_accessor :api_key, :proxy
attr_accessor :custom_headers
attr_accessor :api_key, :proxy, :custom_headers, :client_timeout,
:open_timeout, :retry_count

# @example Have the gem build your identifier string
# AppOptics::Metrics.agent_identifier 'flintstone', '0.5', 'fred'
Expand Down Expand Up @@ -63,7 +63,10 @@ def connection
# prevent successful creation if no credentials set
raise CredentialsMissing unless (self.api_key)
@connection ||= Connection.new(client: self, api_endpoint: api_endpoint,
adapter: faraday_adapter, proxy: self.proxy)
adapter: faraday_adapter, proxy: self.proxy,
client_timeout: client_timeout,
open_timeout: open_timeout,
retry_count: retry_count)
end

# Overrride user agent for this client's connections. If you
Expand Down
23 changes: 19 additions & 4 deletions lib/appoptics/metrics/connection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ def initialize(options={})
@api_endpoint = options[:api_endpoint]
@adapter = options[:adapter]
@proxy = options[:proxy]
@open_timeout = options[:open_timeout]
@client_timeout = options[:client_timeout]
@retry_count = options[:retry_count]
end

# API endpoint that will be used for requests.
Expand All @@ -32,10 +35,10 @@ def transport
raise(NoClientProvided, "No client provided.") unless @client
@transport ||= Faraday::Connection.new(
url: api_endpoint + "/v1/",
request: {open_timeout: 20, timeout: 30}) do |f|
request: {open_timeout: open_timeout, timeout: client_timeout}) do |f|

f.use AppOptics::Metrics::Middleware::RequestBody
f.use AppOptics::Metrics::Middleware::Retry
f.use AppOptics::Metrics::Middleware::Retry, retry_count
f.use AppOptics::Metrics::Middleware::CountRequests
f.use AppOptics::Metrics::Middleware::ExpectsStatus

Expand All @@ -48,11 +51,11 @@ def transport
transport.basic_auth @client.api_key, nil
end
end

def custom_headers
@client.custom_headers
end

def merge_custom_headers(transport)
return if custom_headers.nil?
custom_headers.each do |key, val|
Expand Down Expand Up @@ -107,6 +110,18 @@ def transport_adapter
end
end

def open_timeout
@open_timeout || 20
end

def client_timeout
@client_timeout || 30
end

def retry_count
@retry_count || 3
end

end

end
Expand Down
17 changes: 17 additions & 0 deletions spec/unit/metrics/connection_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,23 @@ module Metrics
expect(Middleware::CountRequests.total_requests).to eq(4) # did retries
expect(status).to eq(502) # body is sent for retries
end

it "doesn't retry with num retries set to 0" do
Middleware::CountRequests.reset
status = 0
begin
with_rackup('status.ru') do
client.retry_count = 0
response = client.connection.transport.post do |req|
req.url 'retry_body'
req.body = '{"foo": "bar", "baz": "kaboom"}'
end
end
rescue Exception => error
status = error.response[:status].to_i
end
expect(status).to eq(502) # body is sent for retries
end
end
end
end
Expand Down
16 changes: 10 additions & 6 deletions spec/unit/metrics/queue_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ module Metrics
it "raises exception" do
expect {
Queue.new(
tags: { hostname: "metrics-web-stg-1" }
tags: { hostname: "metrics-web-stg-1" }, source: anything
)
}.to raise_error(InvalidParameters)
end
Expand Down Expand Up @@ -102,7 +102,11 @@ module Metrics
context "with invalid arguments" do
it "raises exception" do
expect {
subject.add test: { tags: { hostname: "metrics-web-stg-1" }, value: 123 }
subject.add test: {
value: 123,
source: anything,
tags: { hostname: "metrics-web-stg-1" },
}
}.to raise_error(InvalidParameters)
end
end
Expand Down Expand Up @@ -135,10 +139,10 @@ module Metrics
subject.add disk_use: {value: 35.4, period: 2,
description: 'current disk utilization', measure_time: measure_time,
tags: { source: 'db2'}}
expected = {gauges: [{value: 35.4, name: 'disk_use', period: 2,
description: 'current disk utilization', measure_time: measure_time.to_i,
source: 'db2'}]}
expect(subject.queued).to equal_unordered(expected)
expected = {measurements: [{value: 35.4, name: 'disk_use', period: 2,
description: 'current disk utilization', time: measure_time.to_i,
tags: { source: 'db2'}}]}
expect(subject.queued).to eq(expected)
end

context "with a prefix set" do
Expand Down