appdash 0.6.0 → 0.6.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 +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +6 -0
- data/Gemfile.lock +4 -1
- data/README.md +12 -0
- data/appdash.gemspec +2 -1
- data/lib/appdash/event/base.rb +1 -1
- data/lib/appdash/event/rack_server.rb +2 -2
- data/lib/appdash/middleware.rb +39 -0
- data/spec/appdash/event/base_spec.rb +1 -1
- data/spec/appdash/event/log_spec.rb +1 -1
- data/spec/appdash/event/rack_server_spec.rb +4 -4
- data/spec/appdash/middleware_spec.rb +27 -0
- data/spec/spec_helper.rb +2 -2
- metadata +21 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 600ac6a714c1c25d63a282f1e2995c280e858b19
|
4
|
+
data.tar.gz: d465ba502a447dea8b85236887dcda663f3aa811
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 912e56d21fbe32ae827d509357f631735f95068e1a85122f59d8f6826177acf96cd474a76b26b63fa13c731fcd22655ea3a0914a5063cb3a7b3c6691fd5e1b00
|
7
|
+
data.tar.gz: 583bd30c42842628bfc8ad7e7422353a003a8d719569109ea9028b1345a3511b7fb2cd6d4a76d988e6e0b2f714d18f6fbbeba0a8bc57ba03fad360a42ef0b45b
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.gem
|
data/.travis.yml
ADDED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
appdash (0.6.
|
4
|
+
appdash (0.6.1)
|
5
5
|
protobuf
|
6
6
|
|
7
7
|
GEM
|
@@ -24,6 +24,8 @@ GEM
|
|
24
24
|
thor
|
25
25
|
thread_safe
|
26
26
|
rack (1.6.4)
|
27
|
+
rack-test (0.6.3)
|
28
|
+
rack (>= 1.0)
|
27
29
|
rake (10.4.2)
|
28
30
|
rspec (3.4.0)
|
29
31
|
rspec-core (~> 3.4.0)
|
@@ -50,6 +52,7 @@ DEPENDENCIES
|
|
50
52
|
appdash!
|
51
53
|
bundler
|
52
54
|
rack
|
55
|
+
rack-test
|
53
56
|
rake
|
54
57
|
rspec
|
55
58
|
|
data/README.md
CHANGED
@@ -24,6 +24,18 @@ Collect spans:
|
|
24
24
|
s.log "a log entry with a timestamp"
|
25
25
|
end
|
26
26
|
|
27
|
+
Rack middleware:
|
28
|
+
|
29
|
+
require 'sinatra'
|
30
|
+
require 'appdash/middleware'
|
31
|
+
|
32
|
+
client = Appdash::Client.new host: "remote.host", port: 7701
|
33
|
+
use Appdash::Middleware, client
|
34
|
+
|
35
|
+
get '/' do
|
36
|
+
"OK"
|
37
|
+
end
|
38
|
+
|
27
39
|
For full options and event types, please see the [Documentation](http://www.rubydoc.info/gems/appdash).
|
28
40
|
|
29
41
|
## Contributing
|
data/appdash.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "appdash"
|
5
|
-
s.version = "0.6.
|
5
|
+
s.version = "0.6.1"
|
6
6
|
s.authors = ["Black Square Media"]
|
7
7
|
s.email = ["dimitrij@blacksquaremedia.com"]
|
8
8
|
s.summary = %q{Appdash client for ruby}
|
@@ -20,4 +20,5 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.add_development_dependency(%q<rack>)
|
21
21
|
s.add_development_dependency(%q<bundler>)
|
22
22
|
s.add_development_dependency(%q<rspec>)
|
23
|
+
s.add_development_dependency(%q<rack-test>)
|
23
24
|
end
|
data/lib/appdash/event/base.rb
CHANGED
@@ -27,7 +27,7 @@ module Appdash
|
|
27
27
|
def parse_request(req)
|
28
28
|
data = {
|
29
29
|
method: req.request_method,
|
30
|
-
|
30
|
+
path: req.fullpath,
|
31
31
|
scheme: req.scheme,
|
32
32
|
host: req.host,
|
33
33
|
remote_ip: req.ip,
|
@@ -44,7 +44,7 @@ module Appdash
|
|
44
44
|
|
45
45
|
def parse_response(resp)
|
46
46
|
{
|
47
|
-
content_length: resp.
|
47
|
+
content_length: resp.content_length,
|
48
48
|
status_code: resp.status
|
49
49
|
}
|
50
50
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'appdash'
|
2
|
+
require 'rack'
|
3
|
+
require 'appdash/event/rack_server'
|
4
|
+
|
5
|
+
module Appdash
|
6
|
+
# Middleware is a rack middleware that can be used to add tracing to Rack servers.
|
7
|
+
# It creates a span per incoming request and stores it on the 'appdash.span' key on the env.
|
8
|
+
class Middleware
|
9
|
+
ENV_KEY = 'appdash.span'.freeze
|
10
|
+
|
11
|
+
def initialize(app, client)
|
12
|
+
@app = app
|
13
|
+
@client = client
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
recv = Time.now
|
18
|
+
span = env[ENV_KEY] = @client.span
|
19
|
+
|
20
|
+
status, headers, body = @app.call(env)
|
21
|
+
span.event build(recv, env, status, headers)
|
22
|
+
[status, headers, body]
|
23
|
+
ensure
|
24
|
+
env[ENV_KEY].flush if env.key?(ENV_KEY)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def build(recv, env, status, headers)
|
30
|
+
Appdash::Event::RackServer.new Rack::Request.new(env), nil,
|
31
|
+
response: {
|
32
|
+
status_code: status,
|
33
|
+
content_length: headers['Content-Length'],
|
34
|
+
},
|
35
|
+
recv: recv
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
@@ -14,7 +14,7 @@ RSpec.describe Appdash::Event::Base do
|
|
14
14
|
"Name" => "Query",
|
15
15
|
"SomeOther" => "2",
|
16
16
|
"Sub.ReqURL" => "http://example.com/path",
|
17
|
-
"Sub.Nest.V"=>"2015-01-01T00:00:00+00:00",
|
17
|
+
"Sub.Nest.V"=>"2015-01-01T00:00:00.000000+00:00",
|
18
18
|
"_schema:test"=>"",
|
19
19
|
)
|
20
20
|
end
|
@@ -5,7 +5,7 @@ RSpec.describe Appdash::Event::RackServer do
|
|
5
5
|
let(:time) { Time.utc(2001,2,3,4,5,6) }
|
6
6
|
let(:response) { Rack::Response.new([], 201, 'Content-Length' => 33) }
|
7
7
|
let(:request) do
|
8
|
-
env = Rack::MockRequest.env_for("http://example.com:8080/", "REMOTE_ADDR" => "10.10.10.10", 'CONTENT_LENGTH' => 12, 'HTTP_USER_AGENT' => 'Test/1.0')
|
8
|
+
env = Rack::MockRequest.env_for("http://example.com:8080/path?a=1", "REMOTE_ADDR" => "10.10.10.10", 'CONTENT_LENGTH' => 12, 'HTTP_USER_AGENT' => 'Test/1.0')
|
9
9
|
Rack::Request.new(env)
|
10
10
|
end
|
11
11
|
|
@@ -24,12 +24,12 @@ RSpec.describe Appdash::Event::RackServer do
|
|
24
24
|
"Server.Request.Method" => "GET",
|
25
25
|
"Server.Request.Scheme" => "http",
|
26
26
|
"Server.Request.RemoteIP" => "10.10.10.10",
|
27
|
-
"Server.Request.
|
27
|
+
"Server.Request.Path" => "/path?a=1",
|
28
28
|
"Server.Request.UserAgent" => "Test/1.0",
|
29
|
-
"Server.Response.ContentLength" => "
|
29
|
+
"Server.Response.ContentLength" => "33",
|
30
30
|
"Server.Response.StatusCode" => "201",
|
31
31
|
"Server.Route" => "createPost",
|
32
|
-
"Server.Send" => "2001-02-03T04:05:06+00:00",
|
32
|
+
"Server.Send" => "2001-02-03T04:05:06.000000+00:00",
|
33
33
|
"_schema:HTTPServer" => "",
|
34
34
|
)
|
35
35
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Appdash::Middleware do
|
4
|
+
include Rack::Test::Methods
|
5
|
+
|
6
|
+
let(:mock_socket) { double("TCPSocket", shutdown: nil) }
|
7
|
+
before { allow(TCPSocket).to receive(:new).and_return(mock_socket) }
|
8
|
+
|
9
|
+
let(:app) do
|
10
|
+
mware = described_class
|
11
|
+
client = Appdash::Client.new
|
12
|
+
|
13
|
+
Rack::Builder.new do
|
14
|
+
use mware, client
|
15
|
+
run ->_ { [200, {'Content-Type' => 'text/plain'}, ["OK"]] }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should trace requests' do
|
20
|
+
expect(mock_socket).to receive(:write) do |msg|
|
21
|
+
expect(msg.size).to eq(406)
|
22
|
+
end
|
23
|
+
get '/'
|
24
|
+
expect(last_response.status).to eq(200)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'rspec'
|
2
2
|
require 'rack'
|
3
|
+
require 'rack/test'
|
3
4
|
require 'appdash'
|
5
|
+
require 'appdash/middleware'
|
4
6
|
|
5
7
|
helpers = Module.new do
|
6
|
-
|
7
8
|
def atoh(annotations)
|
8
9
|
annotations.inject({}) {|h, a| h[a.key] = a.value; h }
|
9
10
|
end
|
10
|
-
|
11
11
|
end
|
12
12
|
|
13
13
|
RSpec.configure do |c|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: appdash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Black Square Media
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: protobuf
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rack-test
|
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'
|
83
97
|
description: Ruby client for Appdash, Sourcegraph's application tracing system, based
|
84
98
|
on Google's Dapper
|
85
99
|
email:
|
@@ -89,6 +103,8 @@ extensions: []
|
|
89
103
|
extra_rdoc_files: []
|
90
104
|
files:
|
91
105
|
- ".editorconfig"
|
106
|
+
- ".gitignore"
|
107
|
+
- ".travis.yml"
|
92
108
|
- Gemfile
|
93
109
|
- Gemfile.lock
|
94
110
|
- MIT-LICENCE
|
@@ -105,6 +121,7 @@ files:
|
|
105
121
|
- lib/appdash/event/rack_server.rb
|
106
122
|
- lib/appdash/event/span_name.rb
|
107
123
|
- lib/appdash/events.rb
|
124
|
+
- lib/appdash/middleware.rb
|
108
125
|
- lib/appdash/span.rb
|
109
126
|
- lib/appdash/span/id.rb
|
110
127
|
- lib/appdash/wire.rb
|
@@ -114,6 +131,7 @@ files:
|
|
114
131
|
- spec/appdash/event/message_spec.rb
|
115
132
|
- spec/appdash/event/rack_server_spec.rb
|
116
133
|
- spec/appdash/event/span_name_spec.rb
|
134
|
+
- spec/appdash/middleware_spec.rb
|
117
135
|
- spec/appdash/span/id_spec.rb
|
118
136
|
- spec/appdash/span_spec.rb
|
119
137
|
- spec/appdash/wire_spec.rb
|
@@ -148,6 +166,7 @@ test_files:
|
|
148
166
|
- spec/appdash/event/message_spec.rb
|
149
167
|
- spec/appdash/event/rack_server_spec.rb
|
150
168
|
- spec/appdash/event/span_name_spec.rb
|
169
|
+
- spec/appdash/middleware_spec.rb
|
151
170
|
- spec/appdash/span/id_spec.rb
|
152
171
|
- spec/appdash/span_spec.rb
|
153
172
|
- spec/appdash/wire_spec.rb
|