clientperf 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/clientperf.gemspec CHANGED
@@ -1,16 +1,16 @@
1
1
 
2
- # Gem::Specification for Clientperf-0.0.2
2
+ # Gem::Specification for Clientperf-0.0.3
3
3
  # Originally generated by Echoe
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = %q{clientperf}
7
- s.version = "0.0.2"
7
+ s.version = "0.0.3"
8
8
 
9
9
  s.specification_version = 2 if s.respond_to? :specification_version=
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Eric Falcao"]
13
- s.date = %q{2008-06-18}
13
+ s.date = %q{2008-06-20}
14
14
  s.default_executable = %q{clientperf}
15
15
  s.description = %q{Instrumentation for the FiveRuns TuneUp product.}
16
16
  s.email = %q{efalcao@gmail.com}
data/lib/clientperf.rb CHANGED
@@ -27,7 +27,7 @@ module Clientperf
27
27
  end
28
28
 
29
29
  def version
30
- "0.0.2"
30
+ "0.0.3"
31
31
  end
32
32
 
33
33
  private
@@ -1,5 +1,6 @@
1
1
  require 'yaml'
2
- require 'activesupport'
2
+ require 'rubygems'
3
+ require 'active_support'
3
4
 
4
5
  class ClientperfConfig
5
6
 
@@ -5,6 +5,7 @@ class ClientperfController < ActionController::Base
5
5
 
6
6
  def show
7
7
  @uri = ClientperfUri.find(params[:id], :include => :clientperf_results)
8
+ @page_title = @uri.uri
8
9
  end
9
10
 
10
11
  def reset
@@ -1,22 +1,85 @@
1
1
  class ClientperfUri < ActiveRecord::Base
2
- has_many :clientperf_results, :dependent => :delete_all
3
-
4
- def result_average
5
- @result_average ||= clientperf_results.inject(0) {|sum, result| sum += result.milliseconds; next sum} / clientperf_results.size
6
- end
2
+
3
+ has_many :clientperf_results, :dependent => :delete_all do
4
+ def last_hour
5
+ end_time = (Time.now + 1.minute).change(:sec => 0)
6
+ start_time = end_time - 1.hour
7
+ results = average(:milliseconds, :conditions => ['created_at between ? and ?', start_time, end_time] ,
8
+ :group => 'minute(created_at)')
9
+
10
+ max = 0
11
+ padded_results = (start_time.min..start_time.min + 59).map do |i|
12
+ minute = i % 60
13
+ data = data_for(minute, results)
14
+ max = data if data && data > max
15
+ [minute, data]
16
+ end
17
+ [padded_results, max]
18
+ end
19
+
20
+ def last_day
21
+ end_time = (Time.now + 1.hour).change(:min => 0)
22
+ start_time = end_time - 1.day
23
+ results = average(:milliseconds, :conditions => ['created_at between ? and ?', start_time, end_time],
24
+ :group => 'hour(created_at)')
25
+
26
+ max = 0
27
+ padded_results = (start_time.hour..start_time.hour + 23).map do |i|
28
+ hour = i % 24
29
+ data = data_for(hour, results)
30
+ max = data if data && data > max
31
+ [hour, data]
32
+ end
33
+ [padded_results, max]
34
+ end
35
+
36
+ def last_month
37
+ end_time = (Time.now + 1.day).change(:hour => 0)
38
+ start_time = end_time - 30.days
39
+ results = average(:milliseconds, :conditions => ['created_at between ? and ?', start_time, end_time],
40
+ :group => 'day(created_at)')
41
+
42
+ max = 0
43
+ padded_results = (start_time.day..start_time.day + 29).map do |i|
44
+ day = i % Time.days_in_month(start_time.month)
45
+ data = data_for(day, results)
46
+ max = data if data && data > max
47
+ [day, data]
48
+ end
49
+ [padded_results, max]
50
+ end
51
+
52
+ def data_for(point, results)
53
+ data = results.detect {|p,d| point == p.to_i}
54
+ data ? data[1].to_i : 0
55
+ end
56
+ end
7
57
 
8
58
  def chart_url
9
- "http://chart.apis.google.com/chart?cht=ls&chs=300x200&chd=s:#{chart_data}"
59
+ "http://chart.apis.google.com/chart?cht=ls&chs=300x50&chm=B&chd=s:"
60
+ end
61
+
62
+ def hour_chart
63
+ "#{chart_url}#{chart_data(clientperf_results.last_hour)}"
64
+ end
65
+
66
+ def day_chart
67
+ "#{chart_url}#{chart_data(clientperf_results.last_day)}"
10
68
  end
11
69
 
12
- private
70
+ def month_chart
71
+ "#{chart_url}#{chart_data(clientperf_results.last_month)}"
72
+ end
13
73
 
14
- def chart_data
74
+ private
75
+
76
+ def chart_data(args)
77
+ data, max = args
78
+ max += 10
15
79
  encode = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
16
- max_value = clientperf_results.max {|a, b| a.milliseconds <=> b.milliseconds}.milliseconds + 10
17
-
18
- clientperf_results.map do |result|
19
- char = 62 * result.milliseconds / max_value.to_f
80
+
81
+ data.map do |result|
82
+ char = 62 * result[1] / max.to_f
20
83
  encode[char.round,1]
21
84
  end.join
22
85
  end
@@ -1,7 +1,7 @@
1
- <%= button_to "Reset all data", {:action => 'reset'}, :confirm => "are you sure?" %>
1
+ <h2>all urls</h2>
2
2
  <table>
3
3
  <tr>
4
- <td>URI</td>
4
+ <td>URL</td>
5
5
  <td># of times measured</td>
6
6
  <td>avg. client time (ms)</td>
7
7
  <td>first measured</td>
@@ -10,10 +10,11 @@
10
10
  <% @uris.each do |uri| %>
11
11
  <tr>
12
12
  <td><%= link_to uri.uri, "/clientperf/#{uri.id}" %></td>
13
- <td><%= uri.clientperf_results.size %></td>
14
- <td><%= uri.result_average %></td>
13
+ <td><%= uri.clientperf_results.count %></td>
14
+ <td><%= uri.clientperf_results.average(:milliseconds).to_i %></td>
15
15
  <td><%= uri.created_at.strftime("%M/%d/%y") %></td>
16
16
  <td><%= uri.updated_at.strftime("%M/%d/%y") %></td>
17
17
  </tr>
18
18
  <% end %>
19
- </table>
19
+ </table>
20
+ <p><%= button_to "Reset all data", {:action => 'reset'}, :confirm => "are you sure?" %></p>
@@ -1,5 +1,18 @@
1
- <%= button_to "Reset this URI", {:action => 'reset', :id => @uri.id}, :confirm => "are you sure?" %>
2
- <h1><%= @uri.uri %></h1>
3
- <h3>times measured: <%= @uri.clientperf_results.size %></h3>
4
- <h3>average time: <%= @uri.result_average %>ms</h3>
5
- <img src="<%= @uri.chart_url %>" />
1
+ <h2>summary</h2>
2
+ <p>recorded <%= @uri.clientperf_results.count %> times with average time of <%= @uri.clientperf_results.average(:milliseconds).to_i %>ms. last recorded <%= @uri.updated_at.strftime("%Y-%m-%d") %>.</p>
3
+
4
+ <h2>trends</h2>
5
+ <div class="chart">
6
+ <h4>last hour</h4>
7
+ <img src="<%= @uri.hour_chart %>" />
8
+ </div>
9
+ <div class="chart">
10
+ <h4>last day</h4>
11
+ <img src="<%= @uri.day_chart %>" />
12
+ </div>
13
+ <div class="chart">
14
+ <h4>last month</h4>
15
+ <img src="<%= @uri.month_chart %>" />
16
+ </div>
17
+
18
+ <p><%= button_to "Reset this URI", {:action => 'reset', :id => @uri.id}, :confirm => "are you sure?" %></p>
@@ -1,12 +1,52 @@
1
1
  <html>
2
2
  <head>
3
- <title></title>
3
+ <title>clientperf <%= ": #{@page_title}" if @page_title %></title>
4
4
  <style type="text/css">
5
+ body {margin:0; font-family: helvetica, arial, sans-serif; font-size: 14px;}
6
+
7
+ #header {
8
+ background-color: #dedede;
9
+ border-bottom: 2px solid #bbb;
10
+ padding: 5px 20px;
11
+ }
12
+
13
+ #header h1, #header h3 {
14
+ color: #222;
15
+ margin: 0;
16
+ padding: 0;
17
+ }
18
+
19
+ #header h1 a {
20
+ color: inherit;
21
+ text-decoration: none;
22
+ }
23
+
24
+ #header h3 {
25
+ margin-top: 0px;
26
+ font-size: 14px;
27
+ }
28
+
29
+ #header h3 span {
30
+ }
31
+
32
+ #content {
33
+ padding: 0 20px;
34
+ }
35
+
36
+ #content h2 {
37
+ margin-top: 20px;
38
+ border-bottom: 1px solid #d3d3d3;
39
+ }
5
40
  </style>
6
41
  </head>
7
42
  <body>
8
- <h1>clientperf</h1>
9
- <h3>a measurement tool for client-side performance</h3>
10
- <%= yield %>
43
+ <div id="header">
44
+ <h1><%= link_to "clientperf", :controller => 'clientperf', :action => 'index' %></h1>
45
+ <%= "<h3><span>&raquo;</span>#{@uri.uri}</h3>" if @uri %>
46
+ <div style="clear:both"></div>
47
+ </div>
48
+ <div id="content">
49
+ <%= yield %>
50
+ </div>
11
51
  </body>
12
52
  </html>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clientperf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Falcao
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-06-18 00:00:00 -05:00
12
+ date: 2008-06-20 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency