mashape-analytics 1.0.2 → 1.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 250f90de0c62a79b8bb236f960e08d2bc8561901
4
- data.tar.gz: a1cfe8f56a5aad8f5d37d31b92889547e5039acd
3
+ metadata.gz: 749a81257d08ac6fd003fea80ae9d24b7f2669da
4
+ data.tar.gz: 4dec0963179b2df21204485a642a632d26e1b31c
5
5
  SHA512:
6
- metadata.gz: 750577b3c2cc0ffa9ca40e6c7a460bce92482fe120003f0bc40312d4fbbd2411bb8d4c48a658d2d3fcbdddb2ac16ed0e89c0a4fb04dfc5718eddd00eb7edf22d
7
- data.tar.gz: 84f6dd47a13cdd9d169ac406958ec7bc0363df2a764d7f6b419ee404331d249fc7cc3e50531629000fdfe70998b30ec28a8348a50e4f43ac476b4ac193570cc7
6
+ metadata.gz: 2009bfccf93d9f9cf95295990ef275cb4deea653b76c517e5f6b90c31401e7e47bd9704966c5028708a9c4e22def41a85e573b84c27beb30e884f01a2a5295db
7
+ data.tar.gz: 93cae7d08cfcecbb7a57e881ee5e2b434ee4a97a0d6bf4226934103a9294520af2fd43d3a667149cc5b4aff034941c2a531f27411692a50520f8069fe920f810
data/README.md CHANGED
@@ -19,6 +19,8 @@ bundle install
19
19
 
20
20
  ### Ruby on Rails
21
21
 
22
+ Make sure to add `mashape-analytics` to your Gemfile.
23
+
22
24
  Open your `config/environment.rb` file, and within the `Rails::Initializer.run` block, add the middleware as below:
23
25
 
24
26
  ```ruby
@@ -31,6 +33,13 @@ end
31
33
 
32
34
  *In rails 4, put the `config.middleware.use` line in the `config/application.rb` file.*
33
35
 
36
+ ```ruby
37
+ module MyApp
38
+ class Application < Rails::Application
39
+ config.middleware.use 'MashapeAnalytics::Frameworks::Rails', service_token: 'SERVICE_TOKEN', environment: 'production'
40
+ end
41
+ end
42
+ ```
34
43
 
35
44
  ### Sinatra
36
45
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.0.3
@@ -29,11 +29,11 @@ module MashapeAnalytics::Frameworks
29
29
  status, headers, body = @app.call(env)
30
30
 
31
31
  if body.respond_to? :to_str
32
- body = [body.to_str]
32
+ response_body = [body.to_str]
33
33
  elsif body.respond_to?(:body)
34
- body = [body.body]
34
+ response_body = [body.body]
35
35
  elsif body.respond_to?(:each)
36
- # do nothing
36
+ response_body = body
37
37
  else
38
38
  raise TypeError, "stringable or iterable required"
39
39
  end
@@ -41,7 +41,7 @@ module MashapeAnalytics::Frameworks
41
41
  record_alf startedDateTime, env, {
42
42
  :status => status,
43
43
  :headers => header_hash(headers),
44
- :body => body
44
+ :body => response_body
45
45
  }
46
46
 
47
47
  [status, headers, body]
@@ -98,12 +98,27 @@ module MashapeAnalytics::Frameworks
98
98
  end
99
99
  end
100
100
 
101
+ def stream_size(stream)
102
+ size = nil
103
+ io = StringIO.new
104
+ begin
105
+ stream.write io
106
+ io.flush
107
+ size = io.size
108
+ ensure
109
+ io.close
110
+ end
111
+ size
112
+ end
113
+
101
114
  def request_content_size(request)
102
115
  if request['HTTP_CONTENT_LENGTH']
103
116
  request['HTTP_CONTENT_LENGTH'].to_i
104
117
  else
105
118
  if request['rack.input'].respond_to? :size
106
119
  request['rack.input'].size
120
+ elsif request['rack.input'].respond_to? :write
121
+ stream_size(request['rack.input'])
107
122
  else
108
123
  -1 # Not available
109
124
  end
@@ -126,10 +141,17 @@ module MashapeAnalytics::Frameworks
126
141
  end
127
142
 
128
143
  def response_content_size(response)
144
+ # puts 'BODY: ' << response[:body]
129
145
  if response[:headers]['Content-Length']
130
146
  response[:headers]['Content-Length'].to_i
131
147
  else
132
- response[:body].inject(0) { |sum, b| sum + b.bytesize }
148
+ if response[:body].respond_to? :inject
149
+ response[:body].inject(0) { |sum, b| sum + b.bytesize }
150
+ elsif response[:body].respond_to? :write
151
+ stream_size(response[:body])
152
+ else
153
+ -1 # Not available
154
+ end
133
155
  end
134
156
  end
135
157
 
@@ -193,8 +215,12 @@ module MashapeAnalytics::Frameworks
193
215
  request['rack.input'].rewind
194
216
  entry[:request][:content][:text] = Base64.strict_encode64(request['rack.input'].read)
195
217
 
196
- entry[:response][:content][:encoding] = 'base64'
197
- entry[:response][:content][:text] = Base64.strict_encode64(response[:body].join())
218
+
219
+ # TODO Handle streams as well
220
+ if response[:body].respond_to? :join
221
+ entry[:response][:content][:encoding] = 'base64'
222
+ entry[:response][:content][:text] = Base64.strict_encode64(response[:body].join())
223
+ end
198
224
  end
199
225
 
200
226
  alf.add_entry entry
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: mashape-analytics 1.0.2 ruby lib
5
+ # stub: mashape-analytics 1.0.3 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "mashape-analytics"
9
- s.version = "1.0.2"
9
+ s.version = "1.0.3"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Kenneth Lee"]
14
- s.date = "2015-06-25"
14
+ s.date = "2015-06-29"
15
15
  s.description = "The ruby agent reports API traffic to http://apianalytics.com"
16
16
  s.email = "kennethkl@gmail.com"
17
17
  s.extra_rdoc_files = [
data/test/test_rack.rb CHANGED
@@ -13,6 +13,16 @@ class TestRack < MiniTest::Test
13
13
  Rack::MockRequest.new(stack)
14
14
  end
15
15
 
16
+ def compressed_app
17
+ app = proc do
18
+ sleep 0.05
19
+ [200, {'CONTENT-TYPE' => 'application/json'}, ['{"messages": "Test Response"}']]
20
+ end
21
+ stack = Rack::Deflater.new app
22
+ stack = MashapeAnalytics::Frameworks::Rack.new stack, service_token: 'SERVICE-TOKEN', host: @@host, send_body: @send_body
23
+ Rack::MockRequest.new(stack)
24
+ end
25
+
16
26
  def setup
17
27
  # Create our socket server
18
28
  @zmq_pull = zmq_pull_socket(@@host)
@@ -67,5 +77,18 @@ class TestRack < MiniTest::Test
67
77
  assert_entry_response_content entry, 'base64', 'eyJtZXNzYWdlcyI6ICJUZXN0IFJlc3BvbnNlIn0='
68
78
  end
69
79
 
80
+ should 'send ALF with compressed body' do
81
+ response = compressed_app.get('/get?foo=bar&empty', {'HTTP_ACCEPT' => 'application/json'})
82
+
83
+ version, message = @zmq_pull.recv.split(' ', 2)
84
+ alf = JSON.parse(message)
85
+
86
+ assert_ruby_agent alf
87
+
88
+ entry = alf['har']['log']['entries'].first
89
+ assert_entry_request entry, 'GET', 'http://example.org/get?foo=bar&empty'
90
+ assert_entry_response entry, 200, 99
91
+ end
92
+
70
93
 
71
94
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mashape-analytics
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenneth Lee
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-25 00:00:00.000000000 Z
11
+ date: 2015-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbczmq