redis-stat 0.3.8 → 0.3.9

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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ M2RkODI2MDg1MDYyYTNlN2Y2NTY4N2FiZGQyMWNmODM0NTE2ZTBhYw==
5
+ data.tar.gz: !binary |-
6
+ NDVmNmQ1MjRiY2FiNTg0YjIxNjRiZjA5NTU5MDRjNTI5NDRhMjY0Mg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NDE5OWVhMDQ2NWNlODUxNGUwZGYwNGY0M2EzMTU3ZDQyYWRmMmRlNzNiNzkz
10
+ ZDhlMTIwYWY0YTljMTgzYzcyM2JhMWVkOTljY2M4MTg2OTIwODdmYTMyNDky
11
+ YWEyZmM3YWZmZjJhZTgwM2EwYmE1ZTRhZmMyZmU3MmY0MmI1MWM=
12
+ data.tar.gz: !binary |-
13
+ NmQ0YzBkOTcwMGE4NTU5YTNmNDE3MTczNTI2NzFlNDMyNWJkYzcxNWRhZWM5
14
+ NzUyMTAxODA3NTg3M2I0NGY3NTMzOThhNjEyM2E1Yjc0MmMzZmFkYzdkYTU2
15
+ OGM0YzBmYjYzZDQ0NmUwNmEwMDc0ODlhNWZhMmMyZjAwZjI1MDM=
data/lib/redis-stat.rb CHANGED
@@ -81,6 +81,7 @@ class RedisStat
81
81
  if server || errs < NUM_RETRIES
82
82
  @os.puts if errs == 1
83
83
  @os.puts "#{e} (#{ server ? "#{errs}" : [errs, NUM_RETRIES].join('/') })".red.bold
84
+ server.alert "#{e} (#{errs})" if server
84
85
  sleep @interval
85
86
  retry
86
87
  else
@@ -116,6 +117,7 @@ private
116
117
  def start_server
117
118
  RedisStat::Server.set :port, @server_port
118
119
  RedisStat::Server.set :redis_stat, self
120
+ RedisStat::Server.set :last_info, info
119
121
  @server_thr = Thread.new { RedisStat::Server.run! }
120
122
  RedisStat::Server.wait_until_running
121
123
  trap('INT') { Thread.main.raise Interrupt }
@@ -1,6 +1,7 @@
1
1
  require 'sinatra/base'
2
2
  require 'json'
3
3
  require 'thread'
4
+ require 'set'
4
5
 
5
6
  class RedisStat
6
7
  class Server < Sinatra::Base
@@ -17,19 +18,36 @@ class Server < Sinatra::Base
17
18
  end
18
19
  set :environment, :production
19
20
  set :root, File.join( File.dirname(__FILE__), 'server' )
20
- set :clients, []
21
- set :history, []
22
21
  set :mutex, Mutex.new
22
+
23
+ set :clients, Set.new
24
+ set :history, []
25
+ set :last_error, nil
26
+ end
27
+
28
+ helpers do
29
+ def sync
30
+ settings.mutex.synchronize { yield }
31
+ end
32
+ end
33
+
34
+ not_found do
35
+ redirect '/'
23
36
  end
24
37
 
25
38
  get '/' do
26
- @hosts = settings.redis_stat.hosts
27
- @info = settings.redis_stat.info
28
- @measures = settings.redis_stat.measures
29
- @tab_measures = settings.redis_stat.tab_measures
30
- @interval = settings.redis_stat.interval
31
- @verbose = settings.redis_stat.verbose ? 'verbose' : ''
32
- @history = settings.history
39
+ redis_stat = settings.redis_stat
40
+ @hosts = redis_stat.hosts
41
+ @measures = redis_stat.measures
42
+ @tab_measures = redis_stat.tab_measures
43
+ @interval = redis_stat.interval
44
+ @verbose = redis_stat.verbose ? 'verbose' : ''
45
+ @history = sync { settings.history.dup }
46
+
47
+ info = redis_stat.info rescue nil
48
+ sync do
49
+ @info = info ? (settings.last_info = info) : settings.last_info
50
+ end
33
51
  erb :index
34
52
  end
35
53
 
@@ -37,13 +55,23 @@ class Server < Sinatra::Base
37
55
  content_type 'text/event-stream'
38
56
 
39
57
  if RUBY_PLATFORM == 'java'
40
- if last = settings.mutex.synchronize { settings.history.last }
41
- body "retry: #{settings.redis_stat.interval * 900}\ndata: #{last.to_json}\n\n"
42
- end
58
+ data =
59
+ sync {
60
+ if settings.last_error
61
+ { :error => settings.last_error }
62
+ elsif last = settings.history.last
63
+ last
64
+ else
65
+ {}
66
+ end
67
+ }.to_json
68
+ body "retry: #{settings.redis_stat.interval * 900}\ndata: #{data}\n\n"
43
69
  else
44
70
  stream(:keep_open) do |out|
45
- settings.clients << out
46
- out.callback { settings.clients.delete out }
71
+ sync do
72
+ settings.clients << out
73
+ out.callback { settings.clients.delete out }
74
+ end
47
75
  end
48
76
  end
49
77
  end
@@ -61,16 +89,29 @@ class Server < Sinatra::Base
61
89
  }]
62
90
  data = {:at => (Time.now.to_f * 1000).to_i, :static => static, :dynamic => data}
63
91
 
64
- hist = settings.history
65
92
  settings.mutex.synchronize do
93
+ settings.last_error = nil
94
+ hist = settings.history
66
95
  hist << data
67
96
  hist.shift if hist.length > HISTORY_LENGTH
68
97
  end
98
+ publish data
99
+ end
100
+
101
+ def alert error
102
+ settings.mutex.synchronize do
103
+ settings.last_error = error
104
+ end
105
+ publish({ :error => error })
106
+ end
69
107
 
70
- return if settings.clients.empty?
108
+ private
109
+ def publish data
110
+ clients = settings.mutex.synchronize { settings.clients.dup }
111
+ return if clients.empty?
71
112
 
72
113
  resp = "data: #{data.to_json}\n\n"
73
- settings.clients.each do |cl|
114
+ clients.each do |cl|
74
115
  cl << resp
75
116
  end
76
117
  end
@@ -26,11 +26,9 @@
26
26
  <div class="row">
27
27
  <div class="span12">
28
28
  <h3>Dashboard</h3>
29
- <% unless RUBY_PLATFORM == 'java' %>
30
29
  <div class="alert alert-error hide">
31
- <h4>Lost connection to redis-stat</h4>
30
+ <h4></h4>
32
31
  </div>
33
- <% end %>
34
32
  </div>
35
33
  </div>
36
34
 
@@ -144,16 +142,23 @@
144
142
 
145
143
  var source = new EventSource("/pull")
146
144
  source.onmessage = function(e) {
147
- if (appendToHistory(JSON.parse(e.data))) {
145
+ var json = JSON.parse(e.data);
146
+ if (json.error) {
147
+ $(".alert h4").text(json.error);
148
+ $(".alert").fadeIn();
149
+ } else if (appendToHistory(json)) {
148
150
  $(".alert").fadeOut()
149
151
  updateTable()
150
152
  updatePlot()
151
153
  }
152
154
  }
155
+ <% unless RUBY_PLATFORM == 'java' %>
153
156
  source.onerror = function(e) {
154
- $(".alert").fadeIn()
157
+ $(".alert h4").text("Lost connection to redis-stat");
158
+ $(".alert").fadeIn();
155
159
  // source.close()
156
160
  }
161
+ <% end %>
157
162
  })
158
163
  </script>
159
164
  </body>
@@ -1,3 +1,3 @@
1
1
  class RedisStat
2
- VERSION = "0.3.8"
2
+ VERSION = "0.3.9"
3
3
  end
@@ -104,9 +104,6 @@ class TestRedisStat < Test::Unit::TestCase
104
104
 
105
105
  # Server
106
106
  if RUBY_PLATFORM == 'java'
107
- assert_raise(SystemExit) {
108
- RedisStat::Option.parse(%w[-h localhost:8888 10 -a password --csv=/tmp/a.csv --style=ascii --server=5555])
109
- }
110
107
  assert_raise(SystemExit) {
111
108
  RedisStat::Option.parse(%w[-h localhost:8888 10 -a password --csv=/tmp/a.csv --style=ascii --server=5555 --daemon])
112
109
  }
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis-stat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
5
- prerelease:
4
+ version: 0.3.9
6
5
  platform: ruby
7
6
  authors:
8
7
  - Junegunn Choi
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-08-27 00:00:00.000000000 Z
11
+ date: 2013-08-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: ansi256
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: redis
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: tabularize
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: insensitive_hash
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: parallelize
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :runtime
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: si
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :runtime
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -110,7 +97,6 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: sinatra
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
101
  - - ~>
116
102
  - !ruby/object:Gem::Version
@@ -118,7 +104,6 @@ dependencies:
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
108
  - - ~>
124
109
  - !ruby/object:Gem::Version
@@ -126,7 +111,6 @@ dependencies:
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: json
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - ~>
132
116
  - !ruby/object:Gem::Version
@@ -134,7 +118,6 @@ dependencies:
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - ~>
140
123
  - !ruby/object:Gem::Version
@@ -142,7 +125,6 @@ dependencies:
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: lps
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
129
  - - ~>
148
130
  - !ruby/object:Gem::Version
@@ -150,7 +132,6 @@ dependencies:
150
132
  type: :runtime
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
136
  - - ~>
156
137
  - !ruby/object:Gem::Version
@@ -158,7 +139,6 @@ dependencies:
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: thin
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
143
  - - ~>
164
144
  - !ruby/object:Gem::Version
@@ -166,7 +146,6 @@ dependencies:
166
146
  type: :runtime
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
150
  - - ~>
172
151
  - !ruby/object:Gem::Version
@@ -174,7 +153,6 @@ dependencies:
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: daemons
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
157
  - - ~>
180
158
  - !ruby/object:Gem::Version
@@ -182,7 +160,6 @@ dependencies:
182
160
  type: :runtime
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
164
  - - ~>
188
165
  - !ruby/object:Gem::Version
@@ -190,7 +167,6 @@ dependencies:
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: test-unit
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
171
  - - ! '>='
196
172
  - !ruby/object:Gem::Version
@@ -198,7 +174,6 @@ dependencies:
198
174
  type: :development
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
178
  - - ! '>='
204
179
  - !ruby/object:Gem::Version
@@ -245,27 +220,26 @@ files:
245
220
  homepage: https://github.com/junegunn/redis-stat
246
221
  licenses:
247
222
  - MIT
223
+ metadata: {}
248
224
  post_install_message:
249
225
  rdoc_options: []
250
226
  require_paths:
251
227
  - lib
252
228
  required_ruby_version: !ruby/object:Gem::Requirement
253
- none: false
254
229
  requirements:
255
230
  - - ! '>='
256
231
  - !ruby/object:Gem::Version
257
232
  version: '0'
258
233
  required_rubygems_version: !ruby/object:Gem::Requirement
259
- none: false
260
234
  requirements:
261
235
  - - ! '>='
262
236
  - !ruby/object:Gem::Version
263
237
  version: '0'
264
238
  requirements: []
265
239
  rubyforge_project:
266
- rubygems_version: 1.8.25
240
+ rubygems_version: 2.0.7
267
241
  signing_key:
268
- specification_version: 3
242
+ specification_version: 4
269
243
  summary: A real-time Redis monitoring tool written in Ruby
270
244
  test_files:
271
245
  - test/bin_helper.rb