pong 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,8 @@
1
- == 0.0.1 2007-09-04
1
+ == 0.2.0 2007-09-23
2
+
3
+ fill out ping arrays, so that a ping that's lasted more than one second counts as a miss (until it actually returns)
4
+
5
+ == 0.1.0
6
+
7
+ give buffer a maximum size (one hour)
2
8
 
3
- * 1 major enhancement:
4
- * Initial release
@@ -27,7 +27,6 @@ Run 'rubyforge setup' to prepare your env for access to Rubyforge
27
27
  RUBYFORGE_USERNAME.replace @config["username"]
28
28
  end
29
29
 
30
-
31
30
  REV = nil
32
31
  # UNCOMMENT IF REQUIRED:
33
32
  # REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
@@ -5,10 +5,32 @@ require "fileutils"
5
5
 
6
6
  module Pong
7
7
  class Series < Array
8
- MAX = 32767
8
+ MAX = 3600 # only save an hour of pings
9
+
10
+ def initialize(max = MAX)
11
+ @max = max
12
+ @offset = 0
13
+ end
14
+
15
+ def squeeze
16
+ while size >= @max
17
+ shift
18
+ @offset += 1
19
+ end
20
+ end
21
+
22
+ def []=(i, val)
23
+ squeeze
24
+ super(i-@offset, val)
25
+ end
26
+
27
+ def [](i)
28
+ squeeze
29
+ super(i-@offset)
30
+ end
9
31
 
10
32
  def num(n)
11
- n = MAX if n.nil?
33
+ n = @max if n.nil?
12
34
  [n, size].min
13
35
  end
14
36
 
@@ -24,7 +46,7 @@ module Pong
24
46
  end
25
47
 
26
48
  def mean(n = MAX)
27
- size == 0 ? 0 : sum(n) / num(n)
49
+ size == 0 ? 0 : sum(n).to_f / num(n)
28
50
  end
29
51
 
30
52
  def nils(n = MAX)
@@ -70,6 +92,11 @@ module Pong
70
92
  end
71
93
  end
72
94
 
95
+ def at_least(n)
96
+ # this fills out the array with nils if it needs to
97
+ @pings[n] = @pings[n] unless n < 0
98
+ end
99
+
73
100
  def missing(n=nil)
74
101
  pings.nils(n)
75
102
  end
@@ -112,7 +139,8 @@ module Pong
112
139
  end
113
140
 
114
141
  def stats(n = nil)
115
- puts n.nil? ? "Entire run (#{first.pings.size} sec):" : "Last #{n} seconds:"
142
+ n = first.pings.size if n.nil?
143
+ puts "Last #{n} seconds:"
116
144
  puts first.header
117
145
  self.each do |host|
118
146
  puts host.stats(n)
@@ -120,8 +148,11 @@ module Pong
120
148
  end
121
149
 
122
150
  def run
151
+ start = Time.now
123
152
  each {|host| host.start }
124
153
  while true
154
+ secs_since_starting = Time.now - start
155
+ each {|host| host.at_least(secs_since_starting - 1) }
125
156
  system("clear")
126
157
  stats(10)
127
158
  puts
@@ -1,7 +1,7 @@
1
1
  module Pong #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 1
4
+ MINOR = 2
5
5
  TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+
4
+ class TestSeries < Test::Unit::TestCase
5
+
6
+ def test_only_fill_up_to_max
7
+ series = Pong::Series.new(2)
8
+ series[0] = 1
9
+ series[1] = 2
10
+ series[2] = 3
11
+ assert_equal 2.5, series.mean
12
+ end
13
+
14
+ def test_sum
15
+ series = Pong::Series.new
16
+ series[0] = 3
17
+ assert_equal 3, series.sum
18
+ series[1] = 6
19
+ assert_equal 9, series.sum
20
+ series[2] = 9
21
+ assert_equal 18, series.sum
22
+
23
+ assert_equal 15, series.sum(2)
24
+ end
25
+
26
+ def test_mean
27
+ series = Pong::Series.new
28
+ series[0] = 3
29
+ assert_equal 3, series.mean
30
+ series[1] = 6
31
+ assert_equal 4.5, series.mean
32
+ series[2] = 9
33
+ assert_equal 6, series.mean
34
+
35
+ assert_equal 7.5, series.mean(2)
36
+ end
37
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: pong
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2007-09-04 00:00:00 -07:00
6
+ version: 0.2.0
7
+ date: 2007-09-23 00:00:00 -07:00
8
8
  summary: pong is a wrapper for ping that adds statistics over time, multiple hosts, etc.
9
9
  require_paths:
10
10
  - lib
@@ -52,6 +52,7 @@ files:
52
52
  test_files:
53
53
  - test/test_helper.rb
54
54
  - test/test_pong.rb
55
+ - test/test_series.rb
55
56
  rdoc_options:
56
57
  - --main
57
58
  - README.txt