redis-stat 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -17,6 +17,7 @@ usage: redis-stat [HOST[:PORT] ...] [INTERVAL [COUNT]]
17
17
  --csv=OUTPUT_CSV_FILE_PATH Save the result in CSV format
18
18
  -v, --verbose Show more info
19
19
  --style=STYLE Output style: unicode|ascii
20
+ --no-color Suppress ANSI color codes
20
21
  --version Show version
21
22
  --help Show this message
22
23
  ```
data/lib/redis-stat.rb CHANGED
@@ -22,6 +22,7 @@ class RedisStat
22
22
  }
23
23
  @interval = options[:interval]
24
24
  @max_count = options[:count]
25
+ @mono = options[:mono]
25
26
  @colors = options[:colors] || COLORS
26
27
  @csv = options[:csv]
27
28
  @auth = options[:auth]
@@ -49,6 +50,7 @@ class RedisStat
49
50
  end
50
51
 
51
52
  @started_at = Time.now
53
+ all_measures = MEASURES.values.inject(:+).uniq - [:at]
52
54
  prev_info = nil
53
55
  loop do
54
56
  info = {}.insensitive
@@ -62,9 +64,9 @@ class RedisStat
62
64
  @redises.pmap(@redises.length) { |redis|
63
65
  redis.info.insensitive
64
66
  }.each do |rinfo|
65
- rinfo.each do |k, v|
67
+ all_measures.each do |k|
66
68
  info[k] ||= []
67
- info[k] << v
69
+ info[k] << rinfo[k]
68
70
  end
69
71
  end
70
72
 
@@ -191,18 +193,8 @@ private
191
193
  )
192
194
  tab << [nil] + @hosts.map { |h| ansi(:bold, :green) { h } }
193
195
  tab.separator!
194
- [
195
- :redis_version,
196
- :process_id,
197
- :uptime_in_seconds,
198
- :uptime_in_days,
199
- :gcc_version,
200
- :role,
201
- :connected_slaves,
202
- :aof_enabled,
203
- :vm_enabled
204
- ].each do |key|
205
- tab << [ansi(:bold) { key }] + info[key] if info[key]
196
+ MEASURES[:static].each do |key|
197
+ tab << [ansi(:bold) { key }] + info[key] unless info[key].compact.empty?
206
198
  end
207
199
  @os.puts tab
208
200
  end
@@ -211,7 +203,7 @@ private
211
203
  table = Tabularize.new :unicode => false,
212
204
  :align => :right,
213
205
  :border_style => @style,
214
- :border_color => ANSI::Code.red,
206
+ :border_color => @mono ? nil : ANSI::Code.red,
215
207
  :vborder => ' ',
216
208
  :pad_left => 0,
217
209
  :pad_right => 0,
@@ -295,7 +287,7 @@ private
295
287
  end
296
288
 
297
289
  def ansi *args, &block
298
- if args.empty?
290
+ if @mono || args.empty?
299
291
  block.call
300
292
  else
301
293
  ANSI::Code.ansi *args, &block
@@ -303,6 +295,17 @@ private
303
295
  end
304
296
 
305
297
  MEASURES = {
298
+ :static => [
299
+ :redis_version,
300
+ :process_id,
301
+ :uptime_in_seconds,
302
+ :uptime_in_days,
303
+ :gcc_version,
304
+ :role,
305
+ :connected_slaves,
306
+ :aof_enabled,
307
+ :vm_enabled
308
+ ],
306
309
  :default => [
307
310
  :at,
308
311
  :used_cpu_user,
@@ -34,6 +34,10 @@ module Option
34
34
  options[:style] = v.downcase.to_sym
35
35
  end
36
36
 
37
+ opts.on('--no-color', 'Suppress ANSI color codes') do |v|
38
+ options[:mono] = true
39
+ end
40
+
37
41
  opts.on('--version', 'Show version') do
38
42
  puts RedisStat::VERSION
39
43
  exit 0
@@ -1,3 +1,3 @@
1
1
  class RedisStat
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
@@ -1,9 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: utf-8
2
3
 
3
4
  require 'rubygems'
4
- require 'test/unit'
5
+ require 'test-unit'
5
6
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
7
  require 'redis-stat'
8
+ require 'redis'
9
+ require 'stringio'
7
10
 
8
11
  class TestRedisStat < Test::Unit::TestCase
9
12
  def test_humanize_number
@@ -87,6 +90,9 @@ class TestRedisStat < Test::Unit::TestCase
87
90
  :csv => '/tmp/a.csv',
88
91
  :style => :ascii
89
92
  }.sort, options.sort)
93
+
94
+ options = RedisStat::Option.parse(%w[--no-color])
95
+ assert_equal true, options[:mono]
90
96
  end
91
97
 
92
98
  def test_option_parse_invalid
@@ -107,7 +113,7 @@ class TestRedisStat < Test::Unit::TestCase
107
113
  def test_start
108
114
  csv = '/tmp/redis-stat.csv'
109
115
  cnt = 100
110
- rs = RedisStat.new :hosts => %w[localhost] * 5, :interval => 0.02, :count => cnt,
116
+ rs = RedisStat.new :hosts => %w[localhost] * 5, :interval => 0.01, :count => cnt,
111
117
  :verbose => true, :csv => csv, :auth => 'pw'
112
118
  rs.start $stdout
113
119
 
@@ -115,6 +121,36 @@ class TestRedisStat < Test::Unit::TestCase
115
121
  ensure
116
122
  File.unlink csv
117
123
  end
118
- end
119
124
 
125
+ def test_mono
126
+ [true, false].each do |mono|
127
+ rs = RedisStat.new :hosts => %w[localhost] * 5, :interval => 0.02, :count => 20,
128
+ :verbose => true, :auth => 'pw', :mono => mono
129
+ output = StringIO.new
130
+ rs.start output
131
+ puts output.string
132
+ assert_equal mono, output.string !~ /\e\[\d*(;\d+)*m/
133
+ end
134
+ end
135
+
136
+ def test_static_info_of_mixed_versions
137
+ # prerequisite
138
+ r1 = Redis.new(:host => 'localhost')
139
+ r2 = Redis.new(:host => 'localhost', :port => 6380)
140
+
141
+ if r1.info['redis_version'] =~ /^2\.4/ && r2.info['redis_version'] =~ /^2\.2/
142
+ rs = RedisStat.new :hosts => %w[localhost:6380 localhost], :interval => 1, :count => 1,
143
+ :auth => 'pw', :style => :ascii
144
+ output = StringIO.new
145
+ rs.start output
146
+ vline = output.string.lines.select { |line| line =~ /gcc_version/ }.first
147
+ puts vline.gsub(/ +/, ' ')
148
+ assert vline.gsub(/ +/, ' ').include?('| | 4.2.1 |')
149
+ else
150
+ raise NotImplementedError.new # FIXME
151
+ end
152
+ rescue Redis::CannotConnectError, NotImplementedError
153
+ pend "redises not ready"
154
+ end
155
+ end
120
156
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-stat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-04 00:00:00.000000000 Z
12
+ date: 2012-08-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ansi