faraday-honeycomb 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 528655cf7e365e6f896409616b92a37d88dc8dcc
4
+ data.tar.gz: 750102a966db633f9318b112f9cddcbf2520824e
5
+ SHA512:
6
+ metadata.gz: d483d76fe1fc6087d1acb12f4bd6d51c1e5f75099466633868605f38d42d69cfb2cb67bf203dbfbcfbd831f4a293071b409ea256dfd62036598543676bfbe244
7
+ data.tar.gz: d5beb0e6701bbe26ec07e0518849b35174bbf408c3faf6944d520f3cf269859eabe7debe4f284b65147fb262ff97542db47c8c97a3e3d95328f1e90c6f90801b
@@ -0,0 +1,9 @@
1
+ require 'faraday/honeycomb/version'
2
+
3
+ begin
4
+ gem 'faraday', ">= #{Faraday::Honeycomb::MIN_FARADAY_VERSION}"
5
+
6
+ require 'faraday/honeycomb'
7
+ rescue Gem::LoadError
8
+ warn 'Faraday not detected, not enabling faraday-honeycomb'
9
+ end
@@ -0,0 +1,38 @@
1
+ require 'faraday/honeycomb/version'
2
+
3
+ module Faraday
4
+ module Honeycomb
5
+ module AutoInstall
6
+ class << self
7
+ def available?(**_)
8
+ gem 'faraday', ">= #{::Faraday::Honeycomb::MIN_FARADAY_VERSION}"
9
+ rescue Gem::LoadError
10
+ false
11
+ end
12
+
13
+ def auto_install!(honeycomb_client:, logger: nil)
14
+ require 'faraday'
15
+ require 'faraday-honeycomb'
16
+
17
+ Faraday::Connection.extend(Module.new do
18
+ define_method :new do |*args, &orig_block|
19
+ block = if orig_block
20
+ proc do |b|
21
+ b.use :honeycomb, client: honeycomb_client
22
+ orig_block.call(b)
23
+ end
24
+ else
25
+ proc do |b|
26
+ b.use :honeycomb, client: honeycomb_client
27
+ b.adapter Faraday.default_adapter
28
+ end
29
+ end
30
+ super(*args, &block).tap do
31
+ end
32
+ end
33
+ end)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,4 @@
1
+ require 'faraday'
2
+ require 'faraday/honeycomb/middleware'
3
+
4
+ Faraday::Middleware.register_middleware honeycomb: ->{ Faraday::Honeycomb::Middleware }
@@ -0,0 +1,69 @@
1
+ require 'faraday'
2
+ require 'libhoney'
3
+ require 'securerandom'
4
+
5
+ require 'faraday/honeycomb/version'
6
+
7
+ module Faraday
8
+ module Honeycomb
9
+ USER_AGENT_SUFFIX = "#{GEM_NAME}/#{VERSION}"
10
+
11
+ class Middleware
12
+ def initialize(app, options = {})
13
+ @honeycomb = options[:client] || Libhoney::Client.new(options.merge(user_agent_addition: USER_AGENT_SUFFIX))
14
+ @app = app
15
+ end
16
+
17
+ def call(env)
18
+ event = @honeycomb.event
19
+
20
+ event.add_field :url, env.url.to_s
21
+
22
+ event.add_field :protocol, env.url.scheme
23
+ event.add_field :host, env.url.host
24
+ event.add_field :path, env.url.path
25
+
26
+ start = Time.now
27
+ response = adding_span_metadata_if_available(event, env) do
28
+ @app.call(env)
29
+ end
30
+
31
+ event.add_field :status, response.status
32
+
33
+ response
34
+ rescue Exception => e
35
+ if event
36
+ event.add_field :exception_class, e.class
37
+ event.add_field :exception_message, e.message
38
+ end
39
+ raise
40
+ ensure
41
+ if start && event
42
+ finish = Time.now
43
+ duration = finish - start
44
+ event.add_field :durationMs, duration * 1000
45
+ event.send
46
+ end
47
+ end
48
+
49
+ private
50
+ def adding_span_metadata_if_available(event, env)
51
+ return yield unless defined?(::Honeycomb.trace_id)
52
+
53
+ trace_id = ::Honeycomb.trace_id
54
+ name = "#{env.method} #{env.url.path}"
55
+
56
+ event.add_field :traceId, trace_id if trace_id
57
+ span_id = SecureRandom.uuid
58
+ event.add_field :id, span_id
59
+ event.add_field :serviceName, 'faraday'
60
+ event.add_field :name, name if name
61
+
62
+ ::Honeycomb.with_span_id(span_id) do |parent_span_id|
63
+ event.add_field :parentId, parent_span_id
64
+ yield
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,8 @@
1
+ module Faraday
2
+ module Honeycomb
3
+ GEM_NAME = 'faraday-honeycomb'
4
+ VERSION = '0.0.2'
5
+
6
+ MIN_FARADAY_VERSION = '0.8'
7
+ end
8
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: faraday-honeycomb
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Sam Stokes
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: libhoney
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.5.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.5.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0.8'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bump
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: " TO DO *is* a description\n"
98
+ email:
99
+ - sam@honeycomb.io
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - lib/faraday-honeycomb.rb
105
+ - lib/faraday-honeycomb/auto_install.rb
106
+ - lib/faraday/honeycomb.rb
107
+ - lib/faraday/honeycomb/middleware.rb
108
+ - lib/faraday/honeycomb/version.rb
109
+ homepage: https://github.com/honeycombio/faraday-honeycomb
110
+ licenses:
111
+ - MIT
112
+ metadata: {}
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubyforge_project:
129
+ rubygems_version: 2.6.11
130
+ signing_key:
131
+ specification_version: 4
132
+ summary: Instrument your Faraday HTTP requests with Honeycomb
133
+ test_files: []