newrelic_em_http 0.0.1
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 +7 -0
- data/.gitignore +12 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/README.md +26 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/new_relic/agent/http_clients/em_http_wrappers.rb +62 -0
- data/lib/new_relic/agent/instrumentation/em_http.rb +53 -0
- data/lib/newrelic_em_http.rb +5 -0
- data/newrelic_em_http.gemspec +29 -0
- metadata +140 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f656b05621633cca404166dc0245b7a8b6fe21b2
|
4
|
+
data.tar.gz: 6ea08d4a59d264e3298eb78376652ebce982defb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 41f111199a2106a0954591a0ce7ff29959746f5c6477d25e9d4f65b3d3631e178873d4b9c7da081d3df6899194b0f1b6304ce0e8348414e3e394ce31f447b673
|
7
|
+
data.tar.gz: c9c305015795e0ca04aff7827216f35f6e32588b16c82072ecf3fe7ee1f2634f0f4c891e2f2afda48f03cec9ff60d02b9a0fc883d75af478ffb5b81c49689e5e
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# New Relic EM::HTTP instrumentation
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
Add this line to your application's Gemfile:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
gem 'newrelic_em_http'
|
9
|
+
```
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install newrelic_em_http
|
18
|
+
|
19
|
+
## Author
|
20
|
+
|
21
|
+
[Andriy Yanko](http://ayanko.github.com/)
|
22
|
+
|
23
|
+
## License
|
24
|
+
|
25
|
+
* Copyright (c) 2017 Railsware [www.railsware.com](http://www.railsware.com)
|
26
|
+
* [MIT](www.opensource.org/licenses/MIT)
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "newrelic_em_http"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
module NewRelic
|
2
|
+
module Agent
|
3
|
+
module HTTPClients
|
4
|
+
|
5
|
+
class EmHttpRequest
|
6
|
+
EM_HTTP = 'EM::HTTP'.freeze
|
7
|
+
HOST = 'host'.freeze
|
8
|
+
COLON = ':'.freeze
|
9
|
+
|
10
|
+
def initialize(client, headers = nil)
|
11
|
+
@client = client
|
12
|
+
@headers = headers || @client.req.headers
|
13
|
+
end
|
14
|
+
|
15
|
+
def type
|
16
|
+
EM_HTTP
|
17
|
+
end
|
18
|
+
|
19
|
+
def host_from_header
|
20
|
+
if hostname = self[HOST]
|
21
|
+
hostname.split(COLON).first
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def host
|
26
|
+
@client.req.uri.host
|
27
|
+
end
|
28
|
+
|
29
|
+
def method
|
30
|
+
@client.req.method
|
31
|
+
end
|
32
|
+
|
33
|
+
def [](key)
|
34
|
+
@headers[key]
|
35
|
+
end
|
36
|
+
|
37
|
+
def []=(key, value)
|
38
|
+
@headers[key] = value
|
39
|
+
end
|
40
|
+
|
41
|
+
def uri
|
42
|
+
URI.parse @client.req.uri.to_s
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class EmHttpResponse
|
47
|
+
def initialize(client)
|
48
|
+
@client = client
|
49
|
+
end
|
50
|
+
|
51
|
+
def [](key)
|
52
|
+
@client.response_header[key]
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_hash
|
56
|
+
@client.response_header.to_hash
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
DependencyDetection.defer do
|
2
|
+
|
3
|
+
named :em_http
|
4
|
+
|
5
|
+
depends_on do
|
6
|
+
defined?(EM::HTTPMethods)
|
7
|
+
end
|
8
|
+
|
9
|
+
executes do
|
10
|
+
::NewRelic::Agent.logger.info 'Installing EM::HTTP instrumentation'
|
11
|
+
require 'new_relic/agent/cross_app_tracing'
|
12
|
+
require 'new_relic/agent/http_clients/em_http_wrappers'
|
13
|
+
end
|
14
|
+
|
15
|
+
executes do
|
16
|
+
class EventMachine::HttpConnection
|
17
|
+
def activate_connection_with_newrelic(client)
|
18
|
+
wrapped_request = ::NewRelic::Agent::HTTPClients::EmHttpRequest.new(client)
|
19
|
+
|
20
|
+
client.newrelic_segment = ::NewRelic::Agent::Transaction.start_external_request_segment(
|
21
|
+
wrapped_request.type, wrapped_request.uri, wrapped_request.method
|
22
|
+
)
|
23
|
+
|
24
|
+
client.callback do
|
25
|
+
wrapped_response = ::NewRelic::Agent::HTTPClients::EmHttpResponse.new(client)
|
26
|
+
client.newrelic_segment.read_response_headers wrapped_response
|
27
|
+
client.newrelic_segment.finish
|
28
|
+
end
|
29
|
+
|
30
|
+
activate_connection_without_newrelic(client)
|
31
|
+
end
|
32
|
+
|
33
|
+
alias_method :activate_connection_without_newrelic, :activate_connection
|
34
|
+
alias_method :activate_connection, :activate_connection_with_newrelic
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
executes do
|
39
|
+
class EventMachine::HttpClient
|
40
|
+
attr_accessor :newrelic_segment
|
41
|
+
|
42
|
+
def send_request_with_newrelic(head, body)
|
43
|
+
wrapped_request = ::NewRelic::Agent::HTTPClients::EmHttpRequest.new(self, head)
|
44
|
+
newrelic_segment.add_request_headers wrapped_request
|
45
|
+
send_request_without_newrelic(head, body)
|
46
|
+
end
|
47
|
+
|
48
|
+
alias_method :send_request_without_newrelic, :send_request
|
49
|
+
alias_method :send_request, :send_request_with_newrelic
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "newrelic_em_http"
|
7
|
+
spec.version = "0.0.1"
|
8
|
+
spec.authors = ["Andriy Yanko"]
|
9
|
+
spec.email = ["andriy.yanko@railsware.com"]
|
10
|
+
|
11
|
+
spec.summary = %q{EM::HTTP instrumentation for New Relic RPM}
|
12
|
+
spec.homepage = "https://github.com/railsware/newrelic_em_http"
|
13
|
+
|
14
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
15
|
+
f.match(%r{^(test|spec|features)/})
|
16
|
+
end
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "newrelic_rpm", "> 4.0.0"
|
22
|
+
|
23
|
+
spec.add_development_dependency "eventmachine", ">= 1.2.0"
|
24
|
+
spec.add_development_dependency "em-http-request", ">= 1.0.0"
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.15"
|
27
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
28
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: newrelic_em_http
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andriy Yanko
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-07-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: newrelic_rpm
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: eventmachine
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.2.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: em-http-request
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.0.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.15'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.15'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
description:
|
98
|
+
email:
|
99
|
+
- andriy.yanko@railsware.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- ".gitignore"
|
105
|
+
- ".rspec"
|
106
|
+
- ".travis.yml"
|
107
|
+
- Gemfile
|
108
|
+
- README.md
|
109
|
+
- Rakefile
|
110
|
+
- bin/console
|
111
|
+
- bin/setup
|
112
|
+
- lib/new_relic/agent/http_clients/em_http_wrappers.rb
|
113
|
+
- lib/new_relic/agent/instrumentation/em_http.rb
|
114
|
+
- lib/newrelic_em_http.rb
|
115
|
+
- newrelic_em_http.gemspec
|
116
|
+
homepage: https://github.com/railsware/newrelic_em_http
|
117
|
+
licenses: []
|
118
|
+
metadata: {}
|
119
|
+
post_install_message:
|
120
|
+
rdoc_options: []
|
121
|
+
require_paths:
|
122
|
+
- lib
|
123
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
requirements: []
|
134
|
+
rubyforge_project:
|
135
|
+
rubygems_version: 2.6.11
|
136
|
+
signing_key:
|
137
|
+
specification_version: 4
|
138
|
+
summary: EM::HTTP instrumentation for New Relic RPM
|
139
|
+
test_files: []
|
140
|
+
has_rdoc:
|