profit 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,6 +8,7 @@ describe Profit::Server do
8
8
 
9
9
  after do
10
10
  redis.del("profit:metric:some_slow_piece_of_code")
11
+ redis.del("profit:keys")
11
12
  end
12
13
 
13
14
  it "stores metrics messages" do
@@ -15,7 +16,7 @@ describe Profit::Server do
15
16
 
16
17
  pusher.send({ recorded_time: (now = Time.now),
17
18
  total_time: 12.012,
18
- metric_type: "some_slow_piece_of_code",
19
+ metric_key: "some_slow_piece_of_code",
19
20
  start_line: 1,
20
21
  end_line: 42,
21
22
  start_file: "/foo/bar/baz.rb",
@@ -34,4 +35,60 @@ describe Profit::Server do
34
35
  expect(metric["end_file"]).to eq "/foo/bar/biz.rb"
35
36
  expect(metric["recorded_time"]).to eq now.to_s
36
37
  end
38
+
39
+ it "stores a set of all metric keys" do
40
+ pusher = server.ctx.connect(:PUSH, "tcp://127.0.0.1:5556")
41
+
42
+ pusher.send({ recorded_time: (now = Time.now),
43
+ total_time: 12.012,
44
+ metric_key: "some_slow_piece_of_code",
45
+ start_line: 1,
46
+ end_line: 42,
47
+ start_file: "/foo/bar/baz.rb",
48
+ end_file: "/foo/bar/biz.rb" }.to_json)
49
+
50
+ pusher.send({ recorded_time: (now = Time.now),
51
+ total_time: 14.316,
52
+ metric_key: "some_slow_piece_of_code",
53
+ start_line: 1,
54
+ end_line: 42,
55
+ start_file: "/foo/bar/baz.rb",
56
+ end_file: "/foo/bar/biz.rb" }.to_json)
57
+
58
+ pusher.send({ recorded_time: (now = Time.now),
59
+ total_time: 1.455,
60
+ metric_key: "other_piece_of_code",
61
+ start_line: 12,
62
+ end_line: 23,
63
+ start_file: "/foo/bar/baz.rb",
64
+ end_file: "/foo/bar/biz.rb" }.to_json)
65
+ server_thread.join(0.1)
66
+
67
+ set = redis.smembers("profit:keys")
68
+ expect(set.count).to eq 2
69
+ expect(set.to_a).to eq ["profit:metric:other_piece_of_code",
70
+ "profit:metric:some_slow_piece_of_code"]
71
+ end
72
+
73
+ it "limits messages to 100" do
74
+ pusher = server.ctx.connect(:PUSH, "tcp://127.0.0.1:5556")
75
+
76
+ 102.times do |i|
77
+ pusher.send({ recorded_time: (now = Time.now),
78
+ total_time: i,
79
+ metric_key: "some_slow_piece_of_code",
80
+ start_line: 1,
81
+ end_line: 42,
82
+ start_file: "/foo/bar/baz.rb",
83
+ end_file: "/foo/bar/biz.rb" }.to_json)
84
+ end
85
+
86
+ server_thread.join(1)
87
+
88
+ expect(redis.llen("profit:metric:some_slow_piece_of_code")).to eq 100
89
+
90
+ list = redis.lrange("profit:metric:some_slow_piece_of_code", 0, -1)
91
+ expect(JSON.parse(list.last)['total_time']).to eq 2
92
+ expect(JSON.parse(list.first)['total_time']).to eq 101
93
+ end
37
94
  end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Chart App' do
4
+
5
+ let!(:redis) { Redis.new(host: "127.0.0.1", port: 6379) }
6
+ let!(:client) { Profit::Client.new(ctx: server.ctx) }
7
+ let!(:server) { TestServer.server }
8
+ let!(:server_thread) { TestServer.server_thread }
9
+
10
+ after do
11
+ redis.del("profit:metric:some_foo_metric")
12
+ redis.del("profit:keys")
13
+ end
14
+
15
+ it "has section links for each metric key" do
16
+ visit '/'
17
+
18
+ expect(page).to_not have_link("some_foo_metric")
19
+
20
+ client.start("some_foo_metric")
21
+ sleep 0.1
22
+ client.stop("some_foo_metric")
23
+
24
+ visit '/'
25
+
26
+ expect(page).to have_link("some_foo_metric")
27
+ end
28
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  require './lib/profit'
2
+ require './lib/profit/app/chart_app'
2
3
  require 'redis'
4
+ require 'capybara'
5
+ require 'capybara/dsl'
6
+
7
+ set :environment, :test
3
8
 
4
9
  class TestServer
5
10
 
@@ -12,6 +17,8 @@ class TestServer
12
17
  end
13
18
  end
14
19
 
20
+ Capybara.app = ChartApp
21
+
15
22
  RSpec.configure do |config|
16
23
 
17
24
  config.before(:suite) do
@@ -21,4 +28,7 @@ RSpec.configure do |config|
21
28
  config.after(:suite) do
22
29
  TestServer.server_thread.join(1)
23
30
  end
31
+
32
+ config.include Rack::Test::Methods
33
+ config.include Capybara::DSL
24
34
  end
metadata CHANGED
@@ -1,126 +1,195 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: profit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
5
- prerelease:
4
+ version: 0.1.6
6
5
  platform: ruby
7
6
  authors:
8
7
  - Dave Rogers
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-12 00:00:00.000000000 Z
11
+ date: 2013-06-17 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: eventmachine
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rbczmq
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: em-hiredis
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: sinatra
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
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: active_support
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
60
81
  - !ruby/object:Gem::Version
61
82
  version: '0'
62
83
  - !ruby/object:Gem::Dependency
63
84
  name: debugger
64
85
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
86
  requirements:
67
- - - ! '>='
87
+ - - '>='
68
88
  - !ruby/object:Gem::Version
69
89
  version: '0'
70
90
  type: :development
71
91
  prerelease: false
72
92
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
93
  requirements:
75
- - - ! '>='
94
+ - - '>='
76
95
  - !ruby/object:Gem::Version
77
96
  version: '0'
78
97
  - !ruby/object:Gem::Dependency
79
98
  name: redis
80
99
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
100
  requirements:
83
- - - ! '>='
101
+ - - '>='
84
102
  - !ruby/object:Gem::Version
85
103
  version: '0'
86
104
  type: :development
87
105
  prerelease: false
88
106
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
107
  requirements:
91
- - - ! '>='
108
+ - - '>='
92
109
  - !ruby/object:Gem::Version
93
110
  version: '0'
94
111
  - !ruby/object:Gem::Dependency
95
112
  name: rspec
96
113
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
114
  requirements:
99
- - - ! '>='
115
+ - - '>='
100
116
  - !ruby/object:Gem::Version
101
117
  version: '0'
102
118
  type: :development
103
119
  prerelease: false
104
120
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
121
  requirements:
107
- - - ! '>='
122
+ - - '>='
108
123
  - !ruby/object:Gem::Version
109
124
  version: '0'
110
125
  - !ruby/object:Gem::Dependency
111
126
  name: rake
112
127
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
128
  requirements:
115
- - - ! '>='
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rack-test
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: capybara
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: shotgun
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '>='
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: thin
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '>='
116
186
  - !ruby/object:Gem::Version
117
187
  version: '0'
118
188
  type: :development
119
189
  prerelease: false
120
190
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
191
  requirements:
123
- - - ! '>='
192
+ - - '>='
124
193
  - !ruby/object:Gem::Version
125
194
  version: '0'
126
195
  description: This is a client/server combination that allows you to profile code and
@@ -129,49 +198,67 @@ email:
129
198
  - david.t.rogers@gmail.com
130
199
  executables:
131
200
  - profit_server
201
+ - profit_app
132
202
  extensions: []
133
203
  extra_rdoc_files: []
134
204
  files:
205
+ - lib/profit/app/chart_app.rb
206
+ - lib/profit/app/public/css/bootstrap-responsive.css
207
+ - lib/profit/app/public/css/bootstrap-responsive.min.css
208
+ - lib/profit/app/public/css/bootstrap.css
209
+ - lib/profit/app/public/css/bootstrap.min.css
210
+ - lib/profit/app/public/css/main.css
211
+ - lib/profit/app/public/img/glyphicons-halflings-white.png
212
+ - lib/profit/app/public/img/glyphicons-halflings.png
213
+ - lib/profit/app/public/js/main.js
214
+ - lib/profit/app/public/js/vendor/bootstrap.js
215
+ - lib/profit/app/public/js/vendor/bootstrap.min.js
216
+ - lib/profit/app/public/js/vendor/Chart.js
217
+ - lib/profit/app/public/js/vendor/html5shiv.js
218
+ - lib/profit/app/public/js/vendor/jquery-1.9.1.js
219
+ - lib/profit/app/views/index.erb
135
220
  - lib/profit/client.rb
221
+ - lib/profit/key.rb
222
+ - lib/profit/metric.rb
136
223
  - lib/profit/server.rb
137
224
  - lib/profit/version.rb
138
225
  - lib/profit.rb
139
226
  - README.md
140
227
  - spec/lib/client_spec.rb
228
+ - spec/lib/key_spec.rb
229
+ - spec/lib/metric_spec.rb
141
230
  - spec/lib/server_spec.rb
231
+ - spec/profit_app/chart_app_spec.rb
142
232
  - spec/spec_helper.rb
143
233
  - bin/profit_server
234
+ - bin/profit_app
144
235
  homepage: https://github.com/davidtrogers/profit
145
236
  licenses: []
237
+ metadata: {}
146
238
  post_install_message:
147
239
  rdoc_options: []
148
240
  require_paths:
149
241
  - lib
150
242
  required_ruby_version: !ruby/object:Gem::Requirement
151
- none: false
152
243
  requirements:
153
- - - ! '>='
244
+ - - '>='
154
245
  - !ruby/object:Gem::Version
155
246
  version: '0'
156
- segments:
157
- - 0
158
- hash: 3230377706351225378
159
247
  required_rubygems_version: !ruby/object:Gem::Requirement
160
- none: false
161
248
  requirements:
162
- - - ! '>='
249
+ - - '>='
163
250
  - !ruby/object:Gem::Version
164
251
  version: '0'
165
- segments:
166
- - 0
167
- hash: 3230377706351225378
168
252
  requirements: []
169
253
  rubyforge_project:
170
- rubygems_version: 1.8.23
254
+ rubygems_version: 2.0.0
171
255
  signing_key:
172
- specification_version: 3
256
+ specification_version: 4
173
257
  summary: A simple library to store profiling information for ruby code.
174
258
  test_files:
175
259
  - spec/lib/client_spec.rb
260
+ - spec/lib/key_spec.rb
261
+ - spec/lib/metric_spec.rb
176
262
  - spec/lib/server_spec.rb
263
+ - spec/profit_app/chart_app_spec.rb
177
264
  - spec/spec_helper.rb