memcache_check 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 93a54941a1ac5c17564d14f5ab974f3d1ace1148
4
- data.tar.gz: faf2d53e47d3f989b43960978f7682b449f423a8
3
+ metadata.gz: e8c9f252507107f19b6767e5e377372087a3d0e9
4
+ data.tar.gz: ea8b9a78e5dbe898b2ff9b8ec0f2c06e4f1282e8
5
5
  SHA512:
6
- metadata.gz: 3f9f221d9aba6cc31ab5c560abf0e48e369e7cc8e18471f8bec4f953d6a2a60b7e7e7bb179678317fcfc5671ef58063ead40d7f29d623c07c1bb24ccd8fc48c6
7
- data.tar.gz: 506bdb02a49042a93ff2c2316fdd9aa242a9c5b815ffeb5e688e229e2a073392d451a3f9b724393082f0efc6b72d4e025c5714b716f24c12dc140b566c9db7cc
6
+ metadata.gz: b4bc79da94b12c7751d3fbb1e80beccee64df3aa47aeff0ce62ad05a15ac1d4ee8c563bf5439881c43220be112d7941dac57f2fb041a81c09d1532bbe9eebb06
7
+ data.tar.gz: 38291151d049fb7d0de9215a3537419fe2f524dd31779d1c377f50cb1f8402cdc45d9fc9ec916ee635a5a9bb96cee5a269a3d7862d89b1c50a2d7c8a5f885fe1
data/README.md CHANGED
@@ -24,6 +24,11 @@ Or install it yourself as:
24
24
 
25
25
  ## Usage
26
26
 
27
+ There are now 2 primary methods to use the gem. The original single server
28
+ benchmark and the new group benchmark.
29
+
30
+ ### Single
31
+
27
32
  Create an instance of MemcacheCheck::Checker and pass in an argument of
28
33
  the server's IP address as a string. If you don't pass an IP address in it
29
34
  will default to localhost. You can optionally pass in a second argument of
@@ -41,6 +46,7 @@ The start method returns an array of 3 numbers:
41
46
 
42
47
  example.rb
43
48
 
49
+ ```ruby
44
50
  require 'memcache_check'
45
51
 
46
52
  memcache_check = MemcacheCheck::Checker.new('127.0.0.1')
@@ -49,13 +55,61 @@ example.rb
49
55
  puts "Number of passes: #{passes}"
50
56
  puts "Number of failures: #{fails}"
51
57
  puts "Total time: #{time} seconds"
58
+ ```
52
59
 
53
60
  Running on my local machine this produces:
54
61
 
55
62
  Number of passes: 500
56
63
  Number of failures: 0
57
- Total time: 0.61212 seconds
64
+ Total time: 0.369204 seconds
65
+
66
+ ### Group
67
+
68
+ Pass a list of hostnames and/or IP addresses to
69
+ MemcacheCheck::Checker.group_benchmark. It runs 100 set and get checks
70
+ against each hostname and returns an array of Server objects once the
71
+ benchmark has completed.
72
+
73
+ The Server attributes available are:
74
+ - hostname (string)
75
+ - port (string)
76
+ - passes (fixnum)
77
+ - fails (fixnum)
78
+ - time (Benchmark::Tms)
79
+
80
+ example.rb
81
+
82
+ ```ruby
83
+ require 'memcache_check'
84
+
85
+ memcache_check = MemcacheCheck::Checker.group_benchmark('127.0.0.1', 'localhost', '127.0.0.1')
58
86
 
87
+ memcache_check.each do |server|
88
+ puts "Server: #{server.hostname}"
89
+ puts "Number of passes: #{server.passes}"
90
+ puts "Number of failures: #{server.fails}"
91
+ puts "Total time: #{server.time.real.round(3)}"
92
+ puts
93
+ end
94
+ ```
95
+
96
+ Running on my local machine this produces:
97
+
98
+ Server: 127.0.0.1
99
+ Number of passes: 100
100
+ Number of failures: 0
101
+ Total time: 0.074
102
+
103
+ Server: localhost
104
+ Number of passes: 100
105
+ Number of failures: 0
106
+ Total time: 0.066
107
+
108
+
109
+ Server: 127.0.0.1
110
+ Number of passes: 100
111
+ Number of failures: 0
112
+ Total time: 0.082
59
113
 
60
114
 
61
115
  ## Contributing
@@ -1,78 +1,3 @@
1
- require "memcache_check/version"
2
- require 'dalli'
3
- require 'faker'
4
- require 'benchmark'
5
-
6
- module MemcacheCheck
7
- class Checker
8
- attr_reader :passes, :fails
9
-
10
- def initialize(server = 'localhost', port = '11211')
11
- @server = Server.new(server, port)
12
- @passes = 0
13
- @fails = 0
14
- end
15
-
16
- def start(num_times = 50)
17
- time = Benchmark.measure do
18
- num_times.times do
19
- test_server
20
- end
21
- end
22
- [@passes, @fails, time.real]
23
- end
24
-
25
- def test_server
26
- key, value = create_key_value_pair
27
- begin
28
- @server.set(key, value)
29
- if is_valid?(key, value)
30
- @passes += 1
31
- else
32
- @fails += 1
33
- end
34
- rescue
35
- @fails += 1
36
- end
37
- end
38
-
39
- def create_key_value_pair
40
- [Utils.generate_key, Utils.generate_test_data]
41
- end
42
-
43
- def is_valid?(key, value)
44
- value == @server.get(key)
45
- end
46
- end
47
-
48
- class Server
49
- def initialize(host, port)
50
- @memcache = Dalli::Client.new("#{host}:#{port}")
51
- end
52
-
53
- def set(key, value)
54
- @memcache.set(key, value)
55
- end
56
-
57
- def get(key)
58
- @memcache.get(key)
59
- end
60
- end
61
-
62
- class Utils
63
- def self.generate_key
64
- "MemcacheCheck" + Time.now.strftime("%s%6N")
65
- end
66
-
67
- def self.generate_test_data
68
- {
69
- name: Faker::Name.name,
70
- email: Faker::Internet.email,
71
- phone: Faker::PhoneNumber.phone_number,
72
- city: Faker::Address.city,
73
- state: Faker::Address.state,
74
- bio: Faker::Lorem.words(num = 100).join(", ")
75
- }
76
- end
77
- end
78
- end
1
+ require 'memcache_check/utils'
2
+ require 'memcache_check/server'
3
+ require 'memcache_check/checker'
@@ -0,0 +1,22 @@
1
+ module MemcacheCheck
2
+ class Checker
3
+ def initialize(hostname = 'localhost', port = '11211')
4
+ @server = Server.new(hostname, port)
5
+ end
6
+
7
+ def start(num_times = 50)
8
+ @server.benchmark(num_times)
9
+ [@server.passes, @server.fails, @server.time.real]
10
+ end
11
+
12
+ def self.group_benchmark(*args)
13
+ group = []
14
+ args.each do |hostname|
15
+ server = Server.new(hostname)
16
+ server.benchmark(100)
17
+ group << server
18
+ end
19
+ group
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,60 @@
1
+ require 'dalli'
2
+ require 'benchmark'
3
+
4
+ module MemcacheCheck
5
+ class Server
6
+ attr_reader :hostname, :port, :passes, :fails, :time
7
+
8
+ def initialize(hostname = '127.0.0.1', port = '11211')
9
+ @memcache_client = Dalli::Client.new("#{hostname}:#{port}")
10
+ @hostname = hostname
11
+ @port = port
12
+ @passes = 0
13
+ @fails = 0
14
+ end
15
+
16
+ def benchmark(num_times)
17
+ test_run
18
+ @time = Benchmark.measure do
19
+ num_times.times do
20
+ run_test
21
+ end
22
+ end
23
+ end
24
+
25
+ def run_test
26
+ key, value = Utils.generate_key_value_pair
27
+ begin
28
+ set(key, value)
29
+ if is_valid?(key, value)
30
+ @passes += 1
31
+ else
32
+ @fails += 1
33
+ end
34
+ rescue
35
+ @fails += 1
36
+ end
37
+ end
38
+
39
+ def test_run
40
+ key, value = Utils.generate_key_value_pair
41
+ begin
42
+ set(key, value)
43
+ get(key)
44
+ rescue
45
+ end
46
+ end
47
+
48
+ def set(key, value)
49
+ @memcache_client.set(key, value)
50
+ end
51
+
52
+ def get(key)
53
+ @memcache_client.get(key)
54
+ end
55
+
56
+ def is_valid?(key, value)
57
+ value == get(key)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,26 @@
1
+ require 'faker'
2
+
3
+ module MemcacheCheck
4
+ module Utils
5
+ extend self
6
+
7
+ def generate_key_value_pair
8
+ [generate_key, generate_test_data]
9
+ end
10
+
11
+ def generate_key
12
+ "MemcacheCheck" + Time.now.strftime("%s%6N")
13
+ end
14
+
15
+ def generate_test_data
16
+ {
17
+ name: Faker::Name.name,
18
+ email: Faker::Internet.email,
19
+ phone: Faker::PhoneNumber.phone_number,
20
+ city: Faker::Address.city,
21
+ state: Faker::Address.state,
22
+ bio: Faker::Lorem.words(num = 100).join(", ")
23
+ }
24
+ end
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module MemcacheCheck
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = MemcacheCheck::VERSION
9
9
  spec.authors = ["Mike Admire"]
10
10
  spec.email = ["mike@mikeadmire.com"]
11
- spec.description = %q{Run checks against a Memcached server}
11
+ spec.description = %q{Ruby gem to test the speed of a Memcached server and verify that it's working correctly.}
12
12
  spec.summary = %q{MemcacheCheck runs a series of set and get commands against a Memcache host to validate data integrity, verify that the host is responding correctly, and benchmark host speed.}
13
13
  spec.homepage = "https://github.com/mikeadmire/memcache_check"
14
14
  spec.license = "MIT"
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
- spec.add_development_dependency "ZenTest", "~> 4.9.2"
24
+ spec.add_development_dependency "ZenTest", "~> 4.9.3"
25
25
 
26
26
  spec.add_runtime_dependency "dalli"
27
27
  spec.add_runtime_dependency "faker"
@@ -5,34 +5,81 @@ require 'memcache_check'
5
5
  describe MemcacheCheck do
6
6
 
7
7
  describe "Checker" do
8
-
9
8
  before(:each) do
10
9
  @checker = MemcacheCheck::Checker.new
11
10
  end
12
11
 
13
12
  it { MemcacheCheck::Checker.should respond_to(:new) }
14
13
 
15
- context "start" do
16
- it { @checker.should respond_to(:start).with(1).arguments }
14
+ describe "start" do
15
+ it { @checker.should respond_to(:start).with(1).arguments }
16
+
17
+ it "returns an array" do
18
+ expect(@checker.start).to be_an_instance_of(Array)
19
+ end
20
+
21
+ it "returns an array with 3 numeric elements" do
22
+ passes, fails, time = @checker.start
23
+ expect(passes).to be_an_instance_of(Fixnum)
24
+ expect(fails).to be_an_instance_of(Fixnum)
25
+ expect(time).to be_an_instance_of(Float)
26
+ end
27
+
28
+ it "passes and fails should add up to correct number" do
29
+ passes, fails, time = @checker.start(50)
30
+ expect(passes + fails).to eq(50)
31
+ end
17
32
 
18
- it "returns an array" do
19
- expect(@checker.start).to be_an_instance_of(Array)
33
+ it "passes while running locally" do
34
+ passes, fails, time = @checker.start(50)
35
+ expect(passes).to eq(50)
36
+ end
37
+ end # context 'start'
38
+
39
+ describe "group_benchmark" do
40
+ before(:each) do
41
+ @response_array = MemcacheCheck::Checker.group_benchmark('localhost', '127.0.0.1', 'localhost')
42
+ end
43
+
44
+ it { MemcacheCheck::Checker.should respond_to(:group_benchmark) }
45
+
46
+ it "returns an array the same length as the number of hostname arguments" do
47
+ expect(@response_array.length).to eq(3)
48
+ end
49
+
50
+ it "returns an array of Server objects" do
51
+ expect(@response_array.first).to be_an_instance_of(MemcacheCheck::Server)
52
+ end
53
+
54
+ it "passes and fails should add up to the correct number" do
55
+ @response_array.each do |i|
56
+ expect(i.passes + i.fails).to eq(100)
20
57
  end
58
+ end
21
59
 
22
- it "returns an array with 3 numeric elements" do
23
- passes, fails, time = @checker.start
24
- expect(passes).to be_an_instance_of(Fixnum)
25
- expect(fails).to be_an_instance_of(Fixnum)
26
- expect(time).to be_an_instance_of(Float)
60
+ it "passes every time when running local" do
61
+ @response_array.each do |i|
62
+ expect(i.passes).to eq(100)
27
63
  end
64
+ end
28
65
 
29
- it "passes and fails should add up to correct number" do
30
- passes, fails, time = @checker.start(50)
31
- expect(passes + fails).to eq(50)
66
+ it "response hostname and time are populated" do
67
+ @response_array.each do |i|
68
+ expect(i.hostname).to_not be_nil
69
+ expect(i.time).to be_an_instance_of(Benchmark::Tms)
32
70
  end
33
- end
71
+ end
34
72
 
35
- end
73
+ it "localhost should be close to the same twice in a row" do
74
+ first = @response_array[0]
75
+ second = @response_array[1]
76
+ third = @response_array[2]
77
+ expect(first.time.real.round(1)).to eq(second.time.real.round(1))
78
+ expect(second.time.real.round(1)).to eq(third.time.real.round(1))
79
+ end
80
+ end # group_benchmark
81
+
82
+ end # Checker
36
83
 
37
84
  context "Server" do
38
85
  before(:each) do
@@ -49,69 +96,67 @@ describe MemcacheCheck do
49
96
  it "set and retrieve data from memcached" do
50
97
  key = "abc123"
51
98
  value = {name: 'Mike Admire',
52
- text: "Lorem ipsum dolor sit amet, consectetur adipisicing" }
99
+ text: "Lorem ipsum dolor sit amet, consectetur adipisicing" }
53
100
  @tester.set(key, value)
54
101
  expect(@tester.get(key)).to eq(value)
55
102
  end
56
- end
103
+ end # context 'Server'
57
104
 
58
105
 
59
106
  describe "Utils" do
60
- it { MemcacheCheck::Utils.should respond_to :generate_key }
61
- it { MemcacheCheck::Utils.should respond_to :generate_test_data }
107
+ it { MemcacheCheck::Utils.should respond_to :generate_key_value_pair }
62
108
 
63
- context "generate_key" do
109
+ describe "generate_key_value_pair" do
64
110
  before(:each) do
65
- @key = MemcacheCheck::Utils.generate_key
111
+ @key, @data = MemcacheCheck::Utils.generate_key_value_pair
66
112
  end
67
113
 
68
- it "can generate an appropriate sized key" do
69
- expect(@key.length).to be >= 25
70
- end
114
+ context "key" do
115
+ it "can generate an appropriate sized key" do
116
+ expect(@key.length).to be >= 25
117
+ end
71
118
 
72
- it "starts with the string MemCacheCheck in key" do
73
- expect(@key).to start_with("MemcacheCheck")
74
- end
119
+ it "starts with the string MemCacheCheck in key" do
120
+ expect(@key).to start_with("MemcacheCheck")
121
+ end
75
122
 
76
- it "is unique" do
77
- key1 = MemcacheCheck::Utils.generate_key
78
- key2 = MemcacheCheck::Utils.generate_key
79
- key3 = MemcacheCheck::Utils.generate_key
80
- expect(@key).to_not eq(key1)
81
- expect(@key).to_not eq(key2)
82
- expect(@key).to_not eq(key3)
83
- expect(key1).to_not eq(key2)
84
- expect(key1).to_not eq(key3)
85
- expect(key2).to_not eq(key3)
86
- end
87
- end # generate_key
123
+ it "is unique" do
124
+ key1 = MemcacheCheck::Utils.generate_key_value_pair.first
125
+ key2 = MemcacheCheck::Utils.generate_key_value_pair.first
126
+ key3 = MemcacheCheck::Utils.generate_key_value_pair.first
127
+ expect(@key).to_not eq(key1)
128
+ expect(@key).to_not eq(key2)
129
+ expect(@key).to_not eq(key3)
130
+ expect(key1).to_not eq(key2)
131
+ expect(key1).to_not eq(key3)
132
+ expect(key2).to_not eq(key3)
133
+ end
134
+ end # context 'key'
88
135
 
89
- context "generate_test_data" do
90
- before(:each) do
91
- @data = MemcacheCheck::Utils.generate_test_data
92
- end
136
+ context "value" do
137
+ it "generates a data hash" do
138
+ expect(@data).to be_an_instance_of(Hash)
139
+ end
93
140
 
94
- it "generates a data hash" do
95
- expect(@data).to be_an_instance_of(Hash)
96
- end
141
+ it "is a reasonable amount of data" do
142
+ expect(@data.length).to be >= 5
143
+ expect(@data.to_s.length).to be >= 500
144
+ end
97
145
 
98
- it "is a reasonable amount of data" do
99
- expect(@data.length).to be >= 5
100
- expect(@data.to_s.length).to be >= 500
101
- end
146
+ it "is unique" do
147
+ data1 = MemcacheCheck::Utils.generate_key_value_pair.last
148
+ data2 = MemcacheCheck::Utils.generate_key_value_pair.last
149
+ data3 = MemcacheCheck::Utils.generate_key_value_pair.last
150
+ expect(@data).to_not eq(data1)
151
+ expect(@data).to_not eq(data2)
152
+ expect(@data).to_not eq(data3)
153
+ expect(data1).to_not eq(data2)
154
+ expect(data1).to_not eq(data3)
155
+ expect(data2).to_not eq(data3)
156
+ end
157
+ end # context 'value'
102
158
 
103
- it "is unique" do
104
- data1 = MemcacheCheck::Utils.generate_test_data
105
- data2 = MemcacheCheck::Utils.generate_test_data
106
- data3 = MemcacheCheck::Utils.generate_test_data
107
- expect(@data).to_not eq(data1)
108
- expect(@data).to_not eq(data2)
109
- expect(@data).to_not eq(data3)
110
- expect(data1).to_not eq(data2)
111
- expect(data1).to_not eq(data3)
112
- expect(data2).to_not eq(data3)
113
- end
114
- end # generate_test_data
159
+ end # generate_key_value_pair
115
160
  end # Utils
116
-
161
+
117
162
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memcache_check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Admire
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-08 00:00:00.000000000 Z
11
+ date: 2013-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 4.9.2
61
+ version: 4.9.3
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: 4.9.2
68
+ version: 4.9.3
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: dalli
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +94,8 @@ dependencies:
94
94
  - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
- description: Run checks against a Memcached server
97
+ description: Ruby gem to test the speed of a Memcached server and verify that it's
98
+ working correctly.
98
99
  email:
99
100
  - mike@mikeadmire.com
100
101
  executables: []
@@ -109,6 +110,9 @@ files:
109
110
  - Rakefile
110
111
  - autotest/discover.rb
111
112
  - lib/memcache_check.rb
113
+ - lib/memcache_check/checker.rb
114
+ - lib/memcache_check/server.rb
115
+ - lib/memcache_check/utils.rb
112
116
  - lib/memcache_check/version.rb
113
117
  - memcache_check.gemspec
114
118
  - spec/lib/memcache_check_spec.rb