Skip to content
Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
079d98d
Add API OpenTelemetry::Adapter
Nov 9, 2019
5ac7d4e
Add faraday instrumentation adapter Gemfile/gemspec
duonoid Nov 8, 2019
3f7f6b0
Add faraday instrumentation adapter
duonoid Nov 11, 2019
ed31c85
Add faraday example with docker-compose service
duonoid Nov 8, 2019
22ccf4f
Avoid hard-dependency on faraday
duonoid Nov 12, 2019
7562579
Fix undefined method `version' for nil:NilClass
duonoid Nov 13, 2019
6987351
Doc: reminder to handle common use case
duonoid Nov 12, 2019
92ba1bc
Add explicit 'require' statements in faraday/adapter
duonoid Nov 13, 2019
60d41d6
Use in_span(attributes:) instead of set_attribute
duonoid Nov 13, 2019
33f28c0
Change SDK::Trace::TracerFactory to subclass API's TracerFactory
duonoid Nov 11, 2019
937cf6c
Add context propagation
duonoid Nov 13, 2019
d42721b
Fix occasional test failure in sdk batch_span_processor_test
duonoid Nov 13, 2019
0e0d69f
Merge remote-tracking branch 'upstream/master' into dd/wip--faraday-i…
duonoid Nov 14, 2019
814e330
Don't extract context, just inject
duonoid Nov 14, 2019
4ee20b1
Load tracer_version lazily
duonoid Nov 14, 2019
915b052
Allow auto-installer to inject a tracer
duonoid Nov 14, 2019
89e6453
Merge remote-tracking branch 'upstream/master' into faraday-instrumen…
duonoid Nov 18, 2019
89ba2cb
Fix circular loading issue
duonoid Nov 20, 2019
a45dac2
Avoid requiring changes to API (OpenTelemetry::Adapter)
duonoid Nov 23, 2019
a558f71
sig-feedback: remove name and version from config
Dec 4, 2019
00ad878
sig-feedback: Use the http text format for propagation
Dec 4, 2019
1658d2e
Tests: Change Gemfile, gemspec, add Rakefile
duonoid Nov 20, 2019
21c8ada
Add test_helper and first test
duonoid Nov 20, 2019
eb243a9
Add appraisals for running tests against multiple versions
duonoid Nov 20, 2019
cfcdf5f
Add Circle CI config
duonoid Nov 21, 2019
dd680bb
Add TracerMiddleware test
duonoid Nov 26, 2019
5808423
Add Adapter test
duonoid Nov 26, 2019
29346a0
Add/refine tests
duonoid Dec 12, 2019
bc9e879
Allow for easier overriding of TracerMiddleware for per-connection rules
duonoid Dec 19, 2019
73f6086
Fix failing circleci builds
duonoid Dec 20, 2019
fd66e7d
Fix failing circleci - jruby
duonoid Dec 30, 2019
4098dd4
Appraisal: add faraday-1.0.x
duonoid Jan 6, 2020
537b4c1
Merge branch 'master' into faraday-instrumentation--67
mwear Jan 9, 2020
36cfd8a
circleci: Remove appraisal support, use latest bundler
duonoid Jan 9, 2020
dc05f82
circleci: Workaround failing appraisal+bundler(2.1.x)+ruby-2.7 issue
duonoid Jan 9, 2020
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
11 changes: 10 additions & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ executors:
- image: "circleci/ruby:2.6-stretch"
jruby:
docker:
- image: "circleci/jruby:latest"
- image: "circleci/jruby:9.2.8-jre"
environment:
JRUBY_OPTS: "--debug"
commands:
Expand All @@ -40,6 +40,15 @@ commands:
- run:
name: CI (Jaeger)
command: "cd exporters/jaeger && bundle exec rake"
- run:
name: Bundle + CI (Adapters - Faraday)
command: |
cd adapters/faraday
gem uninstall -aIx bundler
gem install --no-document bundler -v '~> 2.0.2'
bundle install --jobs=3 --retry=3
bundle exec appraisal install
bundle exec appraisal rake test
rake-release:
steps:
- checkout
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@
**/coverage
**/*.gem
**/.bundle

# Appraisals
adapters/**/*.gemfile.lock
15 changes: 15 additions & 0 deletions adapters/faraday/Appraisals
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
appraise "faraday-1.0" do
gem "faraday", "~> 1.0.0"
end

appraise "faraday-0.17" do
gem "faraday", "0.17.0"
end

appraise "faraday-0.16" do
gem "faraday", "0.16.2"
end

appraise "faraday-0.13" do
gem "faraday", "0.13.1"
end
15 changes: 15 additions & 0 deletions adapters/faraday/Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# frozen_string_literal: true

# Copyright 2019 OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

source 'https://rubygems.org'

gemspec

gem 'opentelemetry-api', path: '../../api'

group :test do
gem 'opentelemetry-sdk', path: '../../sdk'
end
14 changes: 14 additions & 0 deletions adapters/faraday/Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

# Copyright 2019 OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

require 'bundler/gem_tasks'
require 'rake/testtask'

Rake::TestTask.new :test do |t|
t.libs << 'test'
t.libs << 'lib'
t.test_files = FileList['test/**/*_test.rb']
end
7 changes: 7 additions & 0 deletions adapters/faraday/example/Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# frozen_string_literal: true

source 'https://rubygems.org'

gem 'faraday'
gem 'opentelemetry-api', path: '../../../api'
gem 'opentelemetry-sdk', path: '../../../sdk'
31 changes: 31 additions & 0 deletions adapters/faraday/example/faraday.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
require 'rubygems'
require 'bundler/setup'

require 'faraday'
require 'opentelemetry/sdk'
require_relative '../lib/opentelemetry/adapters/faraday'

# Set preferred tracer implementation:
SDK = OpenTelemetry::SDK

factory = OpenTelemetry.tracer_factory = SDK::Trace::TracerFactory.new
factory.add_span_processor(
SDK::Trace::Export::SimpleSpanProcessor.new(
SDK::Trace::Export::ConsoleSpanExporter.new
)
)

# Demonstrate disabling span reporting:
#
# require_relative '../lib/opentelemetry/adapters/faraday/middlewares/tracer_middleware'
# class NoOp < OpenTelemetry::Adapters::Faraday::Middlewares::TracerMiddleware
# def disable_span_reporting?(env)
# env.url.to_s =~ /example.com/
# end
# end
# OpenTelemetry::Adapters::Faraday.install(tracer_middleware: NoOp)

OpenTelemetry::Adapters::Faraday.install

conn = Faraday.new('http://example.com')
conn.get '/'
12 changes: 12 additions & 0 deletions adapters/faraday/gemfiles/faraday_0.13.gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# This file was generated by Appraisal

source "https://rubygems.org"

gem "opentelemetry-api", path: "../../../api"
gem "faraday", "0.13.1"

group :test do
gem "opentelemetry-sdk", path: "../../../sdk"
end

gemspec path: "../"
12 changes: 12 additions & 0 deletions adapters/faraday/gemfiles/faraday_0.16.gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# This file was generated by Appraisal

source "https://rubygems.org"

gem "opentelemetry-api", path: "../../../api"
gem "faraday", "0.16.2"

group :test do
gem "opentelemetry-sdk", path: "../../../sdk"
end

gemspec path: "../"
12 changes: 12 additions & 0 deletions adapters/faraday/gemfiles/faraday_0.17.gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# This file was generated by Appraisal

source "https://rubygems.org"

gem "opentelemetry-api", path: "../../../api"
gem "faraday", "0.17.0"

group :test do
gem "opentelemetry-sdk", path: "../../../sdk"
end

gemspec path: "../"
12 changes: 12 additions & 0 deletions adapters/faraday/gemfiles/faraday_1.0.gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# This file was generated by Appraisal

source "https://rubygems.org"

gem "opentelemetry-api", path: "../../../api"
gem "faraday", "~> 1.0.0"

group :test do
gem "opentelemetry-sdk", path: "../../../sdk"
end

gemspec path: "../"
14 changes: 14 additions & 0 deletions adapters/faraday/lib/opentelemetry/adapters.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# frozen_string_literal: true

# Copyright 2019 OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
# "Instrumentation adapters" are specified by
# https://github.com/open-telemetry/opentelemetry-specification/blob/57714f7547fe4dcb342ad0ad10a80d86118431c7/specification/overview.md#instrumentation-adapters
#
# Adapters should be able to handle the case when the library is not installed on a user's system.
module Adapters
end
end
30 changes: 30 additions & 0 deletions adapters/faraday/lib/opentelemetry/adapters/faraday.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# frozen_string_literal: true

# Copyright 2019 OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
module Adapters
module Faraday
module_function

def install(config = {})
require_relative 'faraday/adapter'
Faraday::Adapter.install(config)
end

# Convenience method to access the nested module name
def name
Module.nesting[0].to_s
end

# Convenience method to access the adapter version
def version
VERSION
end
end
end
end

require_relative './faraday/version'
57 changes: 57 additions & 0 deletions adapters/faraday/lib/opentelemetry/adapters/faraday/adapter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# frozen_string_literal: true

# Copyright 2019 OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

require 'faraday'
require 'opentelemetry'

require_relative 'middlewares/tracer_middleware'
require_relative 'patches/rack_builder'

module OpenTelemetry
module Adapters
module Faraday
class Adapter
class << self
attr_reader :config,
:propagator

def install(config = {})
@config = config
# allow custom middleware to override default implementation:
@config[:tracer_middleware] ||= Middlewares::TracerMiddleware
@propagator = OpenTelemetry.tracer_factory.http_text_format

new.install
end

def tracer
@tracer ||= OpenTelemetry.tracer_factory.tracer(
Faraday.name,
Faraday.version
)
end
end

def install
register_tracer_middleware
use_middleware_by_default
end

private

def register_tracer_middleware
::Faraday::Middleware.register_middleware(
open_telemetry: self.class.config[:tracer_middleware]
)
end

def use_middleware_by_default
::Faraday::RackBuilder.prepend(Patches::RackBuilder)
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# frozen_string_literal: true

# Copyright 2019 OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
module Adapters
module Faraday
module Middlewares
class TracerMiddleware < ::Faraday::Middleware
def call(env)
return app.call(env) if disable_span_reporting?(env)

tracer.in_span(env.url.to_s,
attributes: { 'component' => 'http',
'http.method' => env.method,
'http.url' => env.url.to_s },
kind: :client) do |span|
propagate_context(span, env)

app.call(env).on_complete { |resp| trace_response(span, resp) }
end
end

# Override implementation (subclass) to determine per-connection
# span reporting rules.
def disable_span_reporting?(_env)
false
end

private

attr_reader :app

# Outbound requests should only need to inject the current span.
def propagate_context(span, env)
propagator.inject(span.context, env.request_headers)
end

def propagator
Faraday::Adapter.propagator
end

def tracer
Faraday::Adapter.tracer
end

def trace_response(span, response)
span.set_attribute('http.status_code', response.status)
span.set_attribute('http.status_text', response.reason_phrase)
end
end
end
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# frozen_string_literal: true

# Copyright 2019 OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0
require_relative '../middlewares/tracer_middleware'

module OpenTelemetry
module Adapters
module Faraday
module Patches
# Module to be prepended to force Faraday to use the middleware by
# default so the user doesn't have to call `use` for every connection.
module RackBuilder
def adapter(*args)
use(:open_telemetry) unless @handlers.any? do |handler|
handler.klass == Faraday::Adapter.config[:tracer_middleware]
end

super
end
end
end
end
end
end
13 changes: 13 additions & 0 deletions adapters/faraday/lib/opentelemetry/adapters/faraday/version.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# frozen_string_literal: true

# Copyright 2019 OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0

module OpenTelemetry
module Adapters
module Faraday
VERSION = '0.0.0'
end
end
end
Loading