redis-stat 0.2.1 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -16,6 +16,7 @@ usage: redis-stat [HOST[:PORT] ...] [INTERVAL [COUNT]]
16
16
  --auth=PASSWORD Password
17
17
  --csv=OUTPUT_CSV_FILE_PATH Save the result in CSV format
18
18
  -v, --verbose Show more info
19
+ --style=STYLE Output style: unicode|ascii
19
20
  --version Show version
20
21
  --help Show this message
21
22
  ```
@@ -38,7 +39,7 @@ redis-stat localhost localhost:6380 1 10 --csv=/tmp/output.csv --verbose
38
39
 
39
40
  ## Screenshot
40
41
 
41
- ![](https://github.com/junegunn/redis-stat/raw/master/screenshots/redis-stat-0.1.0.png)
42
+ ![](https://github.com/junegunn/redis-stat/raw/master/screenshots/redis-stat-0.2.4.png)
42
43
 
43
44
 
44
45
  ## Contributing
data/lib/redis-stat.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require "redis-stat/version"
2
4
  require "redis-stat/option"
3
5
  require 'insensitive_hash'
@@ -12,19 +14,21 @@ class RedisStat
12
14
  DEFAULT_TERM_HEIGHT = 25
13
15
 
14
16
  def initialize options = {}
15
- options = RedisStat::Option::DEFAULT.merge options
16
- @hosts = options[:hosts]
17
- @redises = @hosts.map { |e|
17
+ options = RedisStat::Option::DEFAULT.merge options
18
+ @hosts = options[:hosts]
19
+ @redises = @hosts.map { |e|
18
20
  host, port = e.split(':')
19
21
  Redis.new(Hash[ {:host => host, :port => port}.select { |k, v| v } ])
20
22
  }
21
- @interval = options[:interval]
22
- @max_count = options[:count]
23
- @colors = options[:colors] || COLORS
24
- @csv = options[:csv]
25
- @auth = options[:auth]
26
- @measures = MEASURES[ options[:verbose] ? :verbose : :default ]
27
- @count = 0
23
+ @interval = options[:interval]
24
+ @max_count = options[:count]
25
+ @colors = options[:colors] || COLORS
26
+ @csv = options[:csv]
27
+ @auth = options[:auth]
28
+ @measures = MEASURES[ options[:verbose] ? :verbose : :default ]
29
+ @count = 0
30
+ @style = options[:style]
31
+ @first_batch = true
28
32
  end
29
33
 
30
34
  def start output_stream
@@ -126,7 +130,7 @@ private
126
130
  def output info, prev_info, file
127
131
  info_output = process info, prev_info
128
132
 
129
- init_table info_output unless @table
133
+ @table ||= init_table info_output
130
134
 
131
135
  movement = nil
132
136
  if @count == 0
@@ -139,9 +143,10 @@ private
139
143
  })
140
144
  end
141
145
  elsif @count % @term_height == 0
146
+ @first_batch = false
142
147
  movement = -1
143
148
  update_term_size!
144
- init_table info_output
149
+ @table = init_table info_output
145
150
  end
146
151
 
147
152
  # Build output table
@@ -149,6 +154,7 @@ private
149
154
  ansi(*@colors[pair.first]) { [*pair.last].first }
150
155
  }
151
156
  lines = @table.to_s.lines.map(&:chomp)
157
+ lines.delete_at @first_batch ? 1 : 0
152
158
  width = lines.first.length
153
159
  height = lines.length
154
160
 
@@ -181,9 +187,7 @@ private
181
187
  def output_static_info info
182
188
  tab = Tabularize.new(
183
189
  :unicode => false, :align => :right,
184
- :hborder => ansi(:black, :bold) { '-' },
185
- :vborder => ansi(:black, :bold) { '|' },
186
- :iborder => ansi(:black, :bold) { '+' }
190
+ :border_style => @style
187
191
  )
188
192
  tab << [nil] + @hosts.map { |h| ansi(:bold, :green) { h } }
189
193
  tab.separator!
@@ -204,21 +208,22 @@ private
204
208
  end
205
209
 
206
210
  def init_table info_output
207
- @table = Tabularize.new :unicode => false,
208
- :align => :right,
209
- :hborder => ansi(:black, :bold) { '-' },
210
- :iborder => ansi(:black, :bold) { '+' },
211
- :vborder => ' ',
212
- :ellipsis => ansi(:bold) { '>' },
213
- :pad_left => 0,
214
- :pad_right => 0,
211
+ table = Tabularize.new :unicode => false,
212
+ :align => :right,
213
+ :border_style => @style,
214
+ :border_color => ANSI::Code.red,
215
+ :vborder => ' ',
216
+ :pad_left => 0,
217
+ :pad_right => 0,
215
218
  :screen_width => @term_width
216
- @table << info_output.map { |pair|
219
+ table.separator!
220
+ table << info_output.map { |pair|
217
221
  ansi(*((@colors[pair.first] || []) + [:underline])) {
218
222
  LABELS[pair.first] || pair.first
219
223
  }
220
224
  }
221
- @table.separator!
225
+ table.separator!
226
+ table
222
227
  end
223
228
 
224
229
  def process info, prev_info
@@ -6,7 +6,8 @@ module Option
6
6
  :hosts => ['127.0.0.1:6379'],
7
7
  :interval => 2,
8
8
  :count => nil,
9
- :csv => nil
9
+ :csv => nil,
10
+ :style => :unicode
10
11
  }
11
12
 
12
13
  def self.parse argv
@@ -29,6 +30,10 @@ module Option
29
30
  options[:verbose] = v
30
31
  end
31
32
 
33
+ opts.on('--style=STYLE', 'Output style: unicode|ascii') do |v|
34
+ options[:style] = v.downcase.to_sym
35
+ end
36
+
32
37
  opts.on('--version', 'Show version') do
33
38
  puts RedisStat::VERSION
34
39
  exit 0
@@ -65,30 +70,40 @@ module Option
65
70
  end
66
71
 
67
72
  def self.validate options
68
- interval = options[:interval]
69
- unless interval.is_a?(Numeric) && interval > 0
70
- raise ArgumentError.new("Invalid interval: #{interval}")
73
+ options[:interval].tap do |interval|
74
+ unless interval.is_a?(Numeric) && interval > 0
75
+ raise ArgumentError.new("Invalid interval: #{interval}")
76
+ end
71
77
  end
72
78
 
73
- count = options[:count]
74
- unless count.nil? || (count.is_a?(Numeric) && count > 0)
75
- raise ArgumentError.new("Invalid count: #{count}")
79
+ options[:count].tap do |count|
80
+ unless count.nil? || (count.is_a?(Numeric) && count > 0)
81
+ raise ArgumentError.new("Invalid count: #{count}")
82
+ end
76
83
  end
77
84
 
78
- hosts = options[:hosts]
79
- if hosts.empty?
80
- raise ArgumentError.new("Redis host not given")
81
- end
85
+ options[:hosts].tap do |hosts|
86
+ if hosts.empty?
87
+ raise ArgumentError.new("Redis host not given")
88
+ end
82
89
 
83
- hosts.each do |host|
84
- host, port = host.split(':')
85
- if port
86
- port = port.to_i
87
- unless port > 0 && port < 65536
88
- raise ArgumentError.new("Invalid port: #{port}")
90
+ hosts.each do |host|
91
+ host, port = host.split(':')
92
+ if port
93
+ port = port.to_i
94
+ unless port > 0 && port < 65536
95
+ raise ArgumentError.new("Invalid port: #{port}")
96
+ end
89
97
  end
90
98
  end
91
99
  end
100
+
101
+ options[:style].tap do |style|
102
+ unless [:unicode, :ascii].include?(style)
103
+ raise ArgumentError.new("Invalid style")
104
+ end
105
+ end
106
+
92
107
  end
93
108
  end
94
109
  end
@@ -1,3 +1,3 @@
1
1
  class RedisStat
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.4"
3
3
  end
data/redis-stat.gemspec CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_runtime_dependency "ansi", '~> 1.4.3'
19
19
  gem.add_runtime_dependency "redis", '~> 3.0.1'
20
- gem.add_runtime_dependency "tabularize", '~> 0.2.4'
21
- gem.add_runtime_dependency "insensitive_hash", '~> 0.2.4'
20
+ gem.add_runtime_dependency "tabularize", '~> 0.2.8'
21
+ gem.add_runtime_dependency "insensitive_hash", '~> 0.3.0'
22
22
  gem.add_runtime_dependency "parallelize", '~> 0.4.0'
23
23
 
24
24
  gem.add_development_dependency 'test-unit'
@@ -1,3 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
1
3
  require 'rubygems'
2
4
  require 'test/unit'
3
5
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
@@ -46,7 +48,8 @@ class TestRedisStat < Test::Unit::TestCase
46
48
  :hosts => ['localhost:1000'],
47
49
  :interval => 20,
48
50
  :count => nil,
49
- :csv => nil
51
+ :csv => nil,
52
+ :style => :unicode
50
53
  }.sort, options.sort)
51
54
 
52
55
  options = RedisStat::Option.parse(%w[localhost:1000 20 30])
@@ -54,7 +57,8 @@ class TestRedisStat < Test::Unit::TestCase
54
57
  :hosts => ['localhost:1000'],
55
58
  :interval => 20,
56
59
  :count => 30,
57
- :csv => nil
60
+ :csv => nil,
61
+ :style => :unicode
58
62
  }.sort, options.sort)
59
63
 
60
64
  options = RedisStat::Option.parse(%w[20])
@@ -62,7 +66,8 @@ class TestRedisStat < Test::Unit::TestCase
62
66
  :hosts => ['127.0.0.1:6379'],
63
67
  :interval => 20,
64
68
  :count => nil,
65
- :csv => nil
69
+ :csv => nil,
70
+ :style => :unicode
66
71
  }.sort, options.sort)
67
72
 
68
73
  options = RedisStat::Option.parse(%w[20 30])
@@ -70,15 +75,17 @@ class TestRedisStat < Test::Unit::TestCase
70
75
  :hosts => ['127.0.0.1:6379'],
71
76
  :interval => 20,
72
77
  :count => 30,
73
- :csv => nil
78
+ :csv => nil,
79
+ :style => :unicode
74
80
  }.sort, options.sort)
75
81
 
76
- options = RedisStat::Option.parse(%w[localhost:8888 10 --csv=/tmp/a.csv])
82
+ options = RedisStat::Option.parse(%w[localhost:8888 10 --csv=/tmp/a.csv --style=ascii])
77
83
  assert_equal({
78
84
  :hosts => ['localhost:8888'],
79
85
  :interval => 10,
80
86
  :count => nil,
81
87
  :csv => '/tmp/a.csv',
88
+ :style => :ascii
82
89
  }.sort, options.sort)
83
90
  end
84
91
 
@@ -91,12 +98,16 @@ class TestRedisStat < Test::Unit::TestCase
91
98
  options = RedisStat::Option.parse(argv)
92
99
  }
93
100
  end
101
+
102
+ assert_raise(SystemExit) {
103
+ RedisStat::Option.parse(%w[--style=html])
104
+ }
94
105
  end
95
106
 
96
107
  def test_start
97
108
  csv = '/tmp/redis-stat.csv'
98
- cnt = 50
99
- rs = RedisStat.new :hosts => %w[localhost] * 5, :interval => 0.1, :count => cnt,
109
+ cnt = 100
110
+ rs = RedisStat.new :hosts => %w[localhost] * 5, :interval => 0.02, :count => cnt,
100
111
  :verbose => true, :csv => csv, :auth => 'pw'
101
112
  rs.start $stdout
102
113
 
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.1
4
+ version: 0.2.4
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-07-26 00:00:00.000000000 Z
12
+ date: 2012-08-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ansi
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 0.2.4
53
+ version: 0.2.8
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,7 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 0.2.4
61
+ version: 0.2.8
62
62
  - !ruby/object:Gem::Dependency
63
63
  name: insensitive_hash
64
64
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +66,7 @@ dependencies:
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 0.2.4
69
+ version: 0.3.0
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - ~>
76
76
  - !ruby/object:Gem::Version
77
- version: 0.2.4
77
+ version: 0.3.0
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: parallelize
80
80
  requirement: !ruby/object:Gem::Requirement