pinba 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/COPYING ADDED
@@ -0,0 +1,352 @@
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
6
+
7
+ Everyone is permitted to copy and distribute verbatim copies
8
+ of this license document, but changing it is not allowed.
9
+
10
+ Preamble
11
+ ========
12
+
13
+ The licenses for most software are designed to take away your freedom
14
+ to share and change it. By contrast, the GNU General Public License is
15
+ intended to guarantee your freedom to share and change free
16
+ software--to make sure the software is free for all its users. This
17
+ General Public License applies to most of the Free Software
18
+ Foundation's software and to any other program whose authors commit to
19
+ using it. (Some other Free Software Foundation software is covered by
20
+ the GNU Library General Public License instead.) You can apply it to
21
+ your programs, too.
22
+
23
+ When we speak of free software, we are referring to freedom, not price.
24
+ Our General Public Licenses are designed to make sure that you have
25
+ the freedom to distribute copies of free software (and charge for this
26
+ service if you wish), that you receive source code or can get it if you
27
+ want it, that you can change the software or use pieces of it in new
28
+ free programs; and that you know you can do these things.
29
+
30
+ To protect your rights, we need to make restrictions that forbid anyone
31
+ to deny you these rights or to ask you to surrender the rights. These
32
+ restrictions translate to certain responsibilities for you if you
33
+ distribute copies of the software, or if you modify it.
34
+
35
+ For example, if you distribute copies of such a program, whether gratis
36
+ or for a fee, you must give the recipients all the rights that you
37
+ have. You must make sure that they, too, receive or can get the source
38
+ code. And you must show them these terms so they know their rights.
39
+
40
+ We protect your rights with two steps: (1) copyright the software, and
41
+ (2) offer you this license which gives you legal permission to copy,
42
+ distribute and/or modify the software.
43
+
44
+ Also, for each author's protection and ours, we want to make certain
45
+ that everyone understands that there is no warranty for this free
46
+ software. If the software is modified by someone else and passed on, we
47
+ want its recipients to know that what they have is not the original, so
48
+ that any problems introduced by others will not reflect on the original
49
+ authors' reputations.
50
+
51
+ Finally, any free program is threatened constantly by software patents.
52
+ We wish to avoid the danger that redistributors of a free program will
53
+ individually obtain patent licenses, in effect making the program
54
+ proprietary. To prevent this, we have made it clear that any patent
55
+ must be licensed for everyone's free use or not licensed at all.
56
+
57
+ The precise terms and conditions for copying, distribution and
58
+ modification follow.
59
+
60
+ GNU GENERAL PUBLIC LICENSE
61
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
62
+ 0. This License applies to any program or other work which contains a
63
+ notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program",
65
+ below, refers to any such program or work, and a "work based on
66
+ the Program" means either the Program or any derivative work under
67
+ copyright law: that is to say, a work containing the Program or a
68
+ portion of it, either verbatim or with modifications and/or
69
+ translated into another language. (Hereinafter, translation is
70
+ included without limitation in the term "modification".) Each
71
+ licensee is addressed as "you".
72
+
73
+ Activities other than copying, distribution and modification are
74
+ not covered by this License; they are outside its scope. The act
75
+ of running the Program is not restricted, and the output from the
76
+ Program is covered only if its contents constitute a work based on
77
+ the Program (independent of having been made by running the
78
+ Program). Whether that is true depends on what the Program does.
79
+
80
+ 1. You may copy and distribute verbatim copies of the Program's
81
+ source code as you receive it, in any medium, provided that you
82
+ conspicuously and appropriately publish on each copy an appropriate
83
+ copyright notice and disclaimer of warranty; keep intact all the
84
+ notices that refer to this License and to the absence of any
85
+ warranty; and give any other recipients of the Program a copy of
86
+ this License along with the Program.
87
+
88
+ You may charge a fee for the physical act of transferring a copy,
89
+ and you may at your option offer warranty protection in exchange
90
+ for a fee.
91
+
92
+ 2. You may modify your copy or copies of the Program or any portion
93
+ of it, thus forming a work based on the Program, and copy and
94
+ distribute such modifications or work under the terms of Section 1
95
+ above, provided that you also meet all of these conditions:
96
+
97
+ a. You must cause the modified files to carry prominent notices
98
+ stating that you changed the files and the date of any change.
99
+
100
+ b. You must cause any work that you distribute or publish, that
101
+ in whole or in part contains or is derived from the Program
102
+ or any part thereof, to be licensed as a whole at no charge
103
+ to all third parties under the terms of this License.
104
+
105
+ c. If the modified program normally reads commands interactively
106
+ when run, you must cause it, when started running for such
107
+ interactive use in the most ordinary way, to print or display
108
+ an announcement including an appropriate copyright notice and
109
+ a notice that there is no warranty (or else, saying that you
110
+ provide a warranty) and that users may redistribute the
111
+ program under these conditions, and telling the user how to
112
+ view a copy of this License. (Exception: if the Program
113
+ itself is interactive but does not normally print such an
114
+ announcement, your work based on the Program is not required
115
+ to print an announcement.)
116
+
117
+ These requirements apply to the modified work as a whole. If
118
+ identifiable sections of that work are not derived from the
119
+ Program, and can be reasonably considered independent and separate
120
+ works in themselves, then this License, and its terms, do not
121
+ apply to those sections when you distribute them as separate
122
+ works. But when you distribute the same sections as part of a
123
+ whole which is a work based on the Program, the distribution of
124
+ the whole must be on the terms of this License, whose permissions
125
+ for other licensees extend to the entire whole, and thus to each
126
+ and every part regardless of who wrote it.
127
+
128
+ Thus, it is not the intent of this section to claim rights or
129
+ contest your rights to work written entirely by you; rather, the
130
+ intent is to exercise the right to control the distribution of
131
+ derivative or collective works based on the Program.
132
+
133
+ In addition, mere aggregation of another work not based on the
134
+ Program with the Program (or with a work based on the Program) on
135
+ a volume of a storage or distribution medium does not bring the
136
+ other work under the scope of this License.
137
+
138
+ 3. You may copy and distribute the Program (or a work based on it,
139
+ under Section 2) in object code or executable form under the terms
140
+ of Sections 1 and 2 above provided that you also do one of the
141
+ following:
142
+
143
+ a. Accompany it with the complete corresponding machine-readable
144
+ source code, which must be distributed under the terms of
145
+ Sections 1 and 2 above on a medium customarily used for
146
+ software interchange; or,
147
+
148
+ b. Accompany it with a written offer, valid for at least three
149
+ years, to give any third-party, for a charge no more than your
150
+ cost of physically performing source distribution, a complete
151
+ machine-readable copy of the corresponding source code, to be
152
+ distributed under the terms of Sections 1 and 2 above on a
153
+ medium customarily used for software interchange; or,
154
+
155
+ c. Accompany it with the information you received as to the offer
156
+ to distribute corresponding source code. (This alternative is
157
+ allowed only for noncommercial distribution and only if you
158
+ received the program in object code or executable form with
159
+ such an offer, in accord with Subsection b above.)
160
+
161
+ The source code for a work means the preferred form of the work for
162
+ making modifications to it. For an executable work, complete
163
+ source code means all the source code for all modules it contains,
164
+ plus any associated interface definition files, plus the scripts
165
+ used to control compilation and installation of the executable.
166
+ However, as a special exception, the source code distributed need
167
+ not include anything that is normally distributed (in either
168
+ source or binary form) with the major components (compiler,
169
+ kernel, and so on) of the operating system on which the executable
170
+ runs, unless that component itself accompanies the executable.
171
+
172
+ If distribution of executable or object code is made by offering
173
+ access to copy from a designated place, then offering equivalent
174
+ access to copy the source code from the same place counts as
175
+ distribution of the source code, even though third parties are not
176
+ compelled to copy the source along with the object code.
177
+
178
+ 4. You may not copy, modify, sublicense, or distribute the Program
179
+ except as expressly provided under this License. Any attempt
180
+ otherwise to copy, modify, sublicense or distribute the Program is
181
+ void, and will automatically terminate your rights under this
182
+ License. However, parties who have received copies, or rights,
183
+ from you under this License will not have their licenses
184
+ terminated so long as such parties remain in full compliance.
185
+
186
+ 5. You are not required to accept this License, since you have not
187
+ signed it. However, nothing else grants you permission to modify
188
+ or distribute the Program or its derivative works. These actions
189
+ are prohibited by law if you do not accept this License.
190
+ Therefore, by modifying or distributing the Program (or any work
191
+ based on the Program), you indicate your acceptance of this
192
+ License to do so, and all its terms and conditions for copying,
193
+ distributing or modifying the Program or works based on it.
194
+
195
+ 6. Each time you redistribute the Program (or any work based on the
196
+ Program), the recipient automatically receives a license from the
197
+ original licensor to copy, distribute or modify the Program
198
+ subject to these terms and conditions. You may not impose any
199
+ further restrictions on the recipients' exercise of the rights
200
+ granted herein. You are not responsible for enforcing compliance
201
+ by third parties to this License.
202
+
203
+ 7. If, as a consequence of a court judgment or allegation of patent
204
+ infringement or for any other reason (not limited to patent
205
+ issues), conditions are imposed on you (whether by court order,
206
+ agreement or otherwise) that contradict the conditions of this
207
+ License, they do not excuse you from the conditions of this
208
+ License. If you cannot distribute so as to satisfy simultaneously
209
+ your obligations under this License and any other pertinent
210
+ obligations, then as a consequence you may not distribute the
211
+ Program at all. For example, if a patent license would not permit
212
+ royalty-free redistribution of the Program by all those who
213
+ receive copies directly or indirectly through you, then the only
214
+ way you could satisfy both it and this License would be to refrain
215
+ entirely from distribution of the Program.
216
+
217
+ If any portion of this section is held invalid or unenforceable
218
+ under any particular circumstance, the balance of the section is
219
+ intended to apply and the section as a whole is intended to apply
220
+ in other circumstances.
221
+
222
+ It is not the purpose of this section to induce you to infringe any
223
+ patents or other property right claims or to contest validity of
224
+ any such claims; this section has the sole purpose of protecting
225
+ the integrity of the free software distribution system, which is
226
+ implemented by public license practices. Many people have made
227
+ generous contributions to the wide range of software distributed
228
+ through that system in reliance on consistent application of that
229
+ system; it is up to the author/donor to decide if he or she is
230
+ willing to distribute software through any other system and a
231
+ licensee cannot impose that choice.
232
+
233
+ This section is intended to make thoroughly clear what is believed
234
+ to be a consequence of the rest of this License.
235
+
236
+ 8. If the distribution and/or use of the Program is restricted in
237
+ certain countries either by patents or by copyrighted interfaces,
238
+ the original copyright holder who places the Program under this
239
+ License may add an explicit geographical distribution limitation
240
+ excluding those countries, so that distribution is permitted only
241
+ in or among countries not thus excluded. In such case, this
242
+ License incorporates the limitation as if written in the body of
243
+ this License.
244
+
245
+ 9. The Free Software Foundation may publish revised and/or new
246
+ versions of the General Public License from time to time. Such
247
+ new versions will be similar in spirit to the present version, but
248
+ may differ in detail to address new problems or concerns.
249
+
250
+ Each version is given a distinguishing version number. If the
251
+ Program specifies a version number of this License which applies
252
+ to it and "any later version", you have the option of following
253
+ the terms and conditions either of that version or of any later
254
+ version published by the Free Software Foundation. If the Program
255
+ does not specify a version number of this License, you may choose
256
+ any version ever published by the Free Software Foundation.
257
+
258
+ 10. If you wish to incorporate parts of the Program into other free
259
+ programs whose distribution conditions are different, write to the
260
+ author to ask for permission. For software which is copyrighted
261
+ by the Free Software Foundation, write to the Free Software
262
+ Foundation; we sometimes make exceptions for this. Our decision
263
+ will be guided by the two goals of preserving the free status of
264
+ all derivatives of our free software and of promoting the sharing
265
+ and reuse of software generally.
266
+
267
+ NO WARRANTY
268
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
269
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
270
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
271
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
272
+ WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
273
+ NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
274
+ FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
275
+ QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
276
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
277
+ SERVICING, REPAIR OR CORRECTION.
278
+
279
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
280
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
281
+ MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
282
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
283
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
284
+ INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
285
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
286
+ OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
287
+ OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
288
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
289
+
290
+ END OF TERMS AND CONDITIONS
291
+ How to Apply These Terms to Your New Programs
292
+ =============================================
293
+
294
+ If you develop a new program, and you want it to be of the greatest
295
+ possible use to the public, the best way to achieve this is to make it
296
+ free software which everyone can redistribute and change under these
297
+ terms.
298
+
299
+ To do so, attach the following notices to the program. It is safest to
300
+ attach them to the start of each source file to most effectively convey
301
+ the exclusion of warranty; and each file should have at least the
302
+ "copyright" line and a pointer to where the full notice is found.
303
+
304
+ ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
305
+ Copyright (C) YYYY NAME OF AUTHOR
306
+
307
+ This program is free software; you can redistribute it and/or modify
308
+ it under the terms of the GNU General Public License as published by
309
+ the Free Software Foundation; either version 2 of the License, or
310
+ (at your option) any later version.
311
+
312
+ This program is distributed in the hope that it will be useful,
313
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
314
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
315
+ GNU General Public License for more details.
316
+
317
+ You should have received a copy of the GNU General Public License
318
+ along with this program; if not, write to the Free Software
319
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
320
+
321
+ Also add information on how to contact you by electronic and paper mail.
322
+
323
+ If the program is interactive, make it output a short notice like this
324
+ when it starts in an interactive mode:
325
+
326
+ Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
327
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
328
+ This is free software, and you are welcome to redistribute it
329
+ under certain conditions; type `show c' for details.
330
+
331
+ The hypothetical commands `show w' and `show c' should show the
332
+ appropriate parts of the General Public License. Of course, the
333
+ commands you use may be called something other than `show w' and `show
334
+ c'; they could even be mouse-clicks or menu items--whatever suits your
335
+ program.
336
+
337
+ You should also get your employer (if you work as a programmer) or your
338
+ school, if any, to sign a "copyright disclaimer" for the program, if
339
+ necessary. Here is a sample; alter the names:
340
+
341
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
342
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
343
+
344
+ SIGNATURE OF TY COON, 1 April 1989
345
+ Ty Coon, President of Vice
346
+
347
+ This General Public License does not permit incorporating your program
348
+ into proprietary programs. If your program is a subroutine library,
349
+ you may consider it more useful to permit linking proprietary
350
+ applications with the library. If this is what you want to do, use the
351
+ GNU Library General Public License instead of this License.
352
+
@@ -1,36 +1,36 @@
1
- = pinbo
1
+ = pinba
2
2
 
3
3
  == Install
4
4
 
5
- sudo gem install pinbo
5
+ sudo gem install pinba
6
6
 
7
7
  == Rack middleware
8
8
 
9
9
  #environment.rb - Rails
10
10
 
11
- config.gem "pinbo"
12
- config.middleware.use "Rack::Bug"
11
+ config.gem "pinba"
12
+ config.middleware.use "Pinba::Middleware"
13
13
 
14
14
  # or
15
15
 
16
- use Pinbo::Middleware
16
+ use Pinba::Middleware
17
17
 
18
18
  == Daemons
19
19
 
20
- Pinbo.start :script_name => name
20
+ Pinba.start :script_name => name
21
21
 
22
- Pinbo.stop :status => status, :server_name => server_name, :document_size => size
22
+ Pinba.stop :status => status, :server_name => server_name, :document_size => size
23
23
 
24
24
  == Timers
25
25
 
26
- Pinbo.timer :layout => :index, :action => :generate_all do
26
+ Pinba.timer :layout => :index, :action => :generate_all do
27
27
  2 + 2 * 4
28
28
  sleep rand
29
29
  end
30
30
 
31
31
  or you can
32
32
 
33
- Object.send :include, Pinbo::Timer
33
+ Object.send :include, Pinba::Timer
34
34
 
35
35
  and simply do
36
36
 
@@ -43,13 +43,24 @@ and simply do
43
43
 
44
44
  * Fork the project.
45
45
  * Make your feature addition or bug fix.
46
- * Add tests for it. This is important so I don't break it in a
47
- future version unintentionally.
48
46
  * Commit, do not mess with rakefile, version, or history.
49
47
  (if you want to have your own version, that is fine but
50
- bump version in a commit by itself I can ignore when I pull)
51
- * Send me a pull request. Bonus points for topic branches.
48
+ bump version in a commit by itself we can ignore when we pull)
49
+ * Send us a pull request. Bonus points for topic branches.
52
50
 
53
51
  == Copyright
54
52
 
55
- Copyright (c) 2009 Andrew Rudenko. See LICENSE for details.
53
+ Copyright (C) 2009-2010 Andrew Rudenko <ceo@prepor.ru>, Evgeniy Potapov <eapotapov@gmail.com>, ITSumma Ltd.
54
+
55
+ This program is free software; you can redistribute it and/or modify
56
+ it under the terms of the GNU General Public License as published by
57
+ the Free Software Foundation; version 2 of the License.
58
+
59
+ This program is distributed in the hope that it will be useful,
60
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
61
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
62
+ GNU General Public License for more details.
63
+
64
+ You should have received a copy of the GNU General Public License
65
+ along with this program; if not, write to the Free Software
66
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.3.0
@@ -0,0 +1,100 @@
1
+ require 'rubygems'
2
+ require 'socket'
3
+ require 'timeout'
4
+ require 'ruby_protobuf'
5
+ require "socket"
6
+ require 'proto/pinba.pb'
7
+
8
+ module Pinba
9
+
10
+ require 'pinba/timer'
11
+ require 'pinba/request'
12
+ require 'pinba/middleware'
13
+
14
+ Config = {
15
+ :host => Socket.gethostname,
16
+ :pinba_host => '74.86.33.154', #:pinba_host => 'localhost',
17
+ :pinba_port => 30002
18
+ }
19
+
20
+ class << self
21
+
22
+ def counter
23
+ Thread.current[:counter] ||= 1
24
+ end
25
+
26
+ def counter=(val)
27
+ Thread.current[:counter] = val
28
+ end
29
+
30
+ def data
31
+ Thread.current[:data]
32
+ end
33
+
34
+ def data=(val)
35
+ Thread.current[:data] = val
36
+ end
37
+
38
+ def timers
39
+ Thread.current[:timers]
40
+ end
41
+
42
+ def timers=(val)
43
+ Thread.current[:timers] = val
44
+ end
45
+
46
+ def increase_counter
47
+ self.counter += 1
48
+ end
49
+
50
+ def start(options = {})
51
+ Thread.current[:request_start] = Time.now
52
+ Thread.current[:timer_counter] = 0
53
+ self.data = {
54
+ :server_name => Socket.gethostname,
55
+ :script_name => '/test.rb',
56
+ :request_count => counter,
57
+ :document_size => 0,
58
+ :memory_peak => 0,
59
+ :request_time => 0,
60
+ :ru_utime => 0,
61
+ :ru_stime => 0,
62
+ :status => 200 }.merge(options)
63
+ self.timers = []
64
+ end
65
+
66
+ def timer_counter
67
+ Thread.current[:timer_counter] += 1
68
+ Thread.current[:timer_counter] - 1
69
+ end
70
+
71
+ def stop(options = {})
72
+ data.merge!( :request_time => Time.now - Thread.current[:request_start] ).merge!(options)
73
+ Request.new( :data => data, :timers => timers).perform
74
+ increase_counter
75
+ end
76
+
77
+ def timer(tags = {}, &block)
78
+ t = get_timer(tags)
79
+ t[:start] = Time.now
80
+ block.call
81
+ time = Time.now
82
+ t[:counter] += 1
83
+ t[:stop] = time
84
+ t[:period] += t[:stop] - t[:start]
85
+ end
86
+
87
+ def normalize_tags(raw_tags)
88
+ raw_tags.map { |k, v| { :name_id => timer_counter, :value_id => timer_counter, :name => k.to_s, :value => v.to_s } }
89
+ end
90
+
91
+ def get_timer(tags)
92
+ unless (t = self.timers.detect { |v| v[:tags] == tags } )
93
+ t = { :tags => tags, :normalized_tags => normalize_tags(tags), :counter => 0, :period => 0 }
94
+ self.timers << t
95
+ end
96
+ t
97
+ end
98
+ end
99
+
100
+ end
@@ -0,0 +1,14 @@
1
+ module Pinba
2
+ class Middleware
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ Pinba.start :script_name => env['PATH_INFO']
9
+ res = @app.call(env)
10
+ Pinba.stop :status => res[0], :server_name => env['SERVER_NAME'], :document_size => res[1]['Content-Length'].to_i
11
+ res
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,47 @@
1
+ module Pinba
2
+ class Request
3
+ attr_accessor :options
4
+ def initialize(options)
5
+ self.options = options
6
+ end
7
+
8
+ def cmd
9
+ req = Proto::Pinba::Request.new
10
+ req.hostname = Config[:host]
11
+ req.server_name = options[:data][:server_name]
12
+ req.script_name = options[:data][:script_name]
13
+ req.request_count = options[:data][:request_count]
14
+ req.document_size = options[:data][:document_size]
15
+ req.memory_peak = options[:data][:memory_peak]
16
+ req.request_time = options[:data][:request_time]
17
+ req.ru_utime = options[:data][:ru_utime]
18
+ req.ru_stime = options[:data][:ru_stime]
19
+ Pinba.timers.each do |timer|
20
+ req.timer_hit_count << timer[:counter]
21
+ req.timer_value << timer[:period]
22
+ req.timer_tag_count << timer[:tags].size
23
+ timer[:normalized_tags].each do |tag|
24
+ req.timer_tag_name << tag[:name_id]
25
+ req.dictionary << tag[:name]
26
+ req.timer_tag_value << tag[:value_id]
27
+ req.dictionary << tag[:value]
28
+ end
29
+ end
30
+ req.status = options[:data][:status]
31
+ # require 'ruby-debug'
32
+ # debugger
33
+ req.serialize_to_string
34
+ end
35
+
36
+ def perform
37
+ sock = nil
38
+ begin
39
+ sock = UDPSocket.open
40
+ sock.send(cmd, 0, Config[:pinba_host], Config[:pinba_port])
41
+ rescue IOError, SystemCallError
42
+ ensure
43
+ sock.close if sock
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,5 @@
1
+ module Pinba::Timer
2
+ def timer(tags = {}, &block)
3
+ Pinba.timer(tags, &block)
4
+ end
5
+ end
@@ -0,0 +1,54 @@
1
+ ### Generated by rprotoc. DO NOT EDIT!
2
+ ### <proto file: pinba.proto>
3
+ # package Proto.Pinba;
4
+ # option optimize_for = SPEED;
5
+ #
6
+ # message Request {
7
+ # required string hostname = 1;
8
+ # required string server_name = 2;
9
+ # required string script_name = 3;
10
+ # required uint32 request_count = 4;
11
+ # required uint32 document_size = 5;
12
+ # required uint32 memory_peak = 6;
13
+ # required float request_time = 7;
14
+ # required float ru_utime = 8;
15
+ # required float ru_stime = 9;
16
+ #
17
+ # repeated uint32 timer_hit_count = 10;
18
+ # repeated float timer_value = 11;
19
+ # repeated uint32 timer_tag_count = 12;
20
+ # repeated uint32 timer_tag_name = 13;
21
+ # repeated uint32 timer_tag_value = 14;
22
+ # repeated string dictionary = 15;
23
+ # optional uint32 status = 16;
24
+ # }
25
+
26
+ require 'protobuf/message/message'
27
+ require 'protobuf/message/enum'
28
+ require 'protobuf/message/service'
29
+ require 'protobuf/message/extend'
30
+
31
+ module Proto
32
+ module Pinba
33
+ ::Protobuf::OPTIONS[:"optimize_for"] = :SPEED
34
+ class Request < ::Protobuf::Message
35
+ defined_in __FILE__
36
+ required :string, :hostname, 1
37
+ required :string, :server_name, 2
38
+ required :string, :script_name, 3
39
+ required :uint32, :request_count, 4
40
+ required :uint32, :document_size, 5
41
+ required :uint32, :memory_peak, 6
42
+ required :float, :request_time, 7
43
+ required :float, :ru_utime, 8
44
+ required :float, :ru_stime, 9
45
+ repeated :uint32, :timer_hit_count, 10
46
+ repeated :float, :timer_value, 11
47
+ repeated :uint32, :timer_tag_count, 12
48
+ repeated :uint32, :timer_tag_name, 13
49
+ repeated :uint32, :timer_tag_value, 14
50
+ repeated :string, :dictionary, 15
51
+ optional :uint32, :status, 16
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,22 @@
1
+ package Proto.Pinbo;
2
+ option optimize_for = SPEED;
3
+
4
+ message Request {
5
+ required string hostname = 1;
6
+ required string server_name = 2;
7
+ required string script_name = 3;
8
+ required uint32 request_count = 4;
9
+ required uint32 document_size = 5;
10
+ required uint32 memory_peak = 6;
11
+ required float request_time = 7;
12
+ required float ru_utime = 8;
13
+ required float ru_stime = 9;
14
+
15
+ repeated uint32 timer_hit_count = 10;
16
+ repeated float timer_value = 11;
17
+ repeated uint32 timer_tag_count = 12;
18
+ repeated uint32 timer_tag_name = 13;
19
+ repeated uint32 timer_tag_value = 14;
20
+ repeated string dictionary = 15;
21
+ optional uint32 status = 16;
22
+ }
@@ -0,0 +1,59 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{pinba}
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Andrew Rudenko"]
12
+ s.date = %q{2010-01-13}
13
+ s.description = %q{ruby client for Pinba}
14
+ s.email = %q{ceo@prepor.ru}
15
+ s.extra_rdoc_files = [
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ ".document",
20
+ ".gitignore",
21
+ "COPYING",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "examples/sinatra_app.rb",
26
+ "lib/pinba.rb",
27
+ "lib/pinba/middleware.rb",
28
+ "lib/pinba/request.rb",
29
+ "lib/pinba/timer.rb",
30
+ "lib/proto/pinba.pb.rb",
31
+ "lib/proto/pinba.proto",
32
+ "pinba.gemspec"
33
+ ]
34
+ s.homepage = %q{http://github.com/itsumma/pinba}
35
+ s.rdoc_options = ["--charset=UTF-8"]
36
+ s.require_paths = ["lib"]
37
+ s.rubygems_version = %q{1.3.5}
38
+ s.summary = %q{ruby client for Pinba}
39
+ s.test_files = [
40
+ "examples/sinatra_app.rb"
41
+ ]
42
+
43
+ if s.respond_to? :specification_version then
44
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
45
+ s.specification_version = 3
46
+
47
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
48
+ s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
49
+ s.add_runtime_dependency(%q<ruby_protobuf>, [">= 0"])
50
+ else
51
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
52
+ s.add_dependency(%q<ruby_protobuf>, [">= 0"])
53
+ end
54
+ else
55
+ s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
56
+ s.add_dependency(%q<ruby_protobuf>, [">= 0"])
57
+ end
58
+ end
59
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pinba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Rudenko
@@ -39,18 +39,22 @@ executables: []
39
39
  extensions: []
40
40
 
41
41
  extra_rdoc_files:
42
- - LICENSE
43
42
  - README.rdoc
44
43
  files:
45
44
  - .document
46
45
  - .gitignore
47
- - LICENSE
46
+ - COPYING
48
47
  - README.rdoc
49
48
  - Rakefile
50
49
  - VERSION
51
50
  - examples/sinatra_app.rb
52
- - spec/spec.opts
53
- - spec/spec_helper.rb
51
+ - lib/pinba.rb
52
+ - lib/pinba/middleware.rb
53
+ - lib/pinba/request.rb
54
+ - lib/pinba/timer.rb
55
+ - lib/proto/pinba.pb.rb
56
+ - lib/proto/pinba.proto
57
+ - pinba.gemspec
54
58
  has_rdoc: true
55
59
  homepage: http://github.com/itsumma/pinba
56
60
  licenses: []
@@ -80,6 +84,4 @@ signing_key:
80
84
  specification_version: 3
81
85
  summary: ruby client for Pinba
82
86
  test_files:
83
- - spec/pinba_spec.rb
84
- - spec/spec_helper.rb
85
87
  - examples/sinatra_app.rb
data/LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2009 Andrew Rudenko
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,11 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "Pinba" do
4
-
5
- describe "common statistics" do
6
- it "should description" do
7
-
8
- end
9
- end
10
-
11
- end
@@ -1 +0,0 @@
1
- --color
@@ -1,9 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'pinba'
4
- require 'spec'
5
- require 'spec/autorun'
6
-
7
- Spec::Runner.configure do |config|
8
-
9
- end