pimon 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,34 @@
1
+ # encoding: UTF-8
2
+ $: << File.expand_path('./lib')
3
+ require 'pimon/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "pimon"
7
+ s.version = Pimon::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = [ 'Pedro Carriço' ]
10
+ s.email = [ 'pedro.carrico@gmail.com' ]
11
+ s.homepage = 'https://github.com/pedrocarrico/pimon'
12
+ s.summary = 'Pimon - Raspberry Pi server monitor'
13
+ s.description = 'Pimon is a simple server monitor designed for the Raspberry Pi. It uses redis lists to keep the latest observed statistics and also uses highcharts to display some nice charts on your web browser.'
14
+
15
+ s.required_ruby_version = ">= 1.9"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/pimon`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_runtime_dependency "bundler"
23
+ s.add_runtime_dependency "haml", "= 3.1.7"
24
+ s.add_runtime_dependency "redis", "= 3.0.1"
25
+ s.add_runtime_dependency "sinatra", "= 1.3.2"
26
+ s.add_runtime_dependency "thin", "= 1.4.1"
27
+
28
+ s.add_development_dependency "rack-test", ">= 0"
29
+ s.add_development_dependency "mock_redis", ">= 0.5.0"
30
+ s.add_development_dependency "rspec", ">= 2.11.0"
31
+ s.add_development_dependency "simplecov"
32
+ s.add_development_dependency "simplecov-rcov"
33
+ s.add_development_dependency "timecop"
34
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'PimonConfig' do
4
+ context 'when created with no arguments' do
5
+ subject { PimonConfig.create_new }
6
+
7
+ its(:environment) { should == 'development' }
8
+ end
9
+
10
+ context 'when created for the test environment' do
11
+ subject { PimonConfig.create_new('test') }
12
+
13
+ its(:basic_auth) { should == ['pimon', 'pimon'] }
14
+ its(:chart) { should == { :cpu => { :color => '#D2691E' }, :disk => { :color => '#CDC673' }, :mem => { :color => '#87CEFA' }, :temp => {:color=>"#FF9B04"}, :swap => { :color => '#3CB371' } } }
15
+ its(:is_basic_auth_enabled?) { should be_true }
16
+ its(:environment) { should == 'test' }
17
+ its(:queues) { should == { :time => 'pimon_time', :cpu => 'pimon_cpu', :disk => 'pimon_disk', :mem => 'pimon_mem', :temp => 'pimon_temp', :swap => 'pimon_swap' } }
18
+ its(:redis) { should == { :socket => '/thou/shalt/not/use/redis/on/test/environment' } }
19
+ its(:stats) { should == { :number_of_stats => 6, :time_period_in_min => 10 } }
20
+ its(:valid?) { should be_true }
21
+ end
22
+
23
+ context 'when created with an invalid environment' do
24
+ it 'should raise an error' do
25
+ expect{ PimonConfig.create_new('invalid') }.to raise_error(Errno::ENOENT)
26
+ end
27
+ end
28
+
29
+ context 'when created with a broken environment configuration with basic_auth enabled but no username/password' do
30
+ it 'should raise an error' do
31
+ expect{ PimonConfig.create_new('test_broken') }.to raise_error(RuntimeError)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ # setup test environment
4
+ set :environment, :test
5
+ set :run, false
6
+ set :raise_errors, true
7
+ set :logging, false
8
+
9
+ def app
10
+ Pimon
11
+ end
12
+
13
+ RSpec.configure do |config|
14
+ config.include Rack::Test::Methods
15
+ end
16
+
17
+ describe "Pimon" do
18
+ context "when not authenticated" do
19
+
20
+ it "should be not authorized" do
21
+ get '/'
22
+ expect(last_response.status).to eq(401)
23
+ end
24
+ end
25
+
26
+ context "when authenticated" do
27
+ before { authorize 'pimon', 'pimon' }
28
+
29
+ it "should be success" do
30
+
31
+ get '/'
32
+ expect(last_response).to be_ok
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,32 @@
1
+ # Set environment does not set RACK_ENV if required before Sinatra
2
+ # Check http://richardconroy.blogspot.pt/2010/01/issues-testing-sinatra-datamapper-app.html
3
+ ENV['RACK_ENV'] = 'test'
4
+
5
+ if ENV['COVERAGE']
6
+ require 'simplecov'
7
+ require 'simplecov-rcov'
8
+ class SimpleCov::Formatter::MergedFormatter
9
+ def format(result)
10
+ SimpleCov::Formatter::HTMLFormatter.new.format(result)
11
+ SimpleCov::Formatter::RcovFormatter.new.format(result)
12
+ end
13
+ end
14
+ SimpleCov.formatter = SimpleCov::Formatter::MergedFormatter
15
+ SimpleCov.start do
16
+ add_filter 'spec'
17
+ end
18
+ end
19
+
20
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'pimon.rb')
21
+
22
+ require 'sinatra'
23
+ require 'rack/test'
24
+
25
+ # Disable the `should` syntax...as explained here:
26
+ # http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
27
+ RSpec.configure do |config|
28
+ config.order = :random
29
+ config.expect_with :rspec do |c|
30
+ c.syntax = :expect
31
+ end
32
+ end
@@ -0,0 +1,61 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'StatsCollector' do
6
+ context 'when new with a valid config and redis' do
7
+ before do
8
+ @stats_collector = StatsCollector.new(PimonConfig.create_new('test'), MockRedis.new)
9
+ end
10
+ subject { @stats_collector }
11
+
12
+ it 'should collect_stats' do
13
+ Probe::CpuUsage.should_receive(:check)
14
+ Probe::DiskUsage.should_receive(:check)
15
+ Probe::MemoryUsage.should_receive(:check)
16
+ Probe::SwapUsage.should_receive(:check)
17
+ Probe::Temperature.should_receive(:check)
18
+
19
+ @stats_collector.collect_stats
20
+ end
21
+
22
+ its(:show_stats) {
23
+ should == {
24
+ :time => { :stats => [] },
25
+ :refresh_interval_in_millis => 600000,
26
+ :cpu => { :stats => [], :color => '#D2691E', :unit => '%' },
27
+ :mem => { :stats => [], :color => '#87CEFA', :unit => '%' },
28
+ :swap => {:stats => [], :color => '#3CB371', :unit => '%' },
29
+ :disk => {:stats => [], :color => '#CDC673', :unit => '%' },
30
+ :temp => {:stats => [], :color => '#FF9B04', :unit => 'ºC' }
31
+ }
32
+ }
33
+
34
+ context 'when collected some stats' do
35
+ before do
36
+ Timecop.freeze(Time.local(2012, 9, 1, 12, 0, 0))
37
+
38
+ Probe::CpuUsage.should_receive(:check).any_number_of_times.and_return(50)
39
+ Probe::DiskUsage.should_receive(:check).any_number_of_times.and_return(25)
40
+ Probe::MemoryUsage.should_receive(:check).any_number_of_times.and_return(78)
41
+ Probe::SwapUsage.should_receive(:check).any_number_of_times.and_return(50)
42
+ Probe::Temperature.should_receive(:check).any_number_of_times.and_return(40)
43
+
44
+ 7.times do
45
+ @stats_collector.collect_stats
46
+ end
47
+ end
48
+
49
+ its(:show_stats) {
50
+ should == {
51
+ :time => { :stats => ['12:00:00', '12:00:00', '12:00:00', '12:00:00', '12:00:00', '12:00:00']},
52
+ :refresh_interval_in_millis => 600000, :cpu => {:stats => [50, 50, 50, 50, 50, 50], :color => '#D2691E', :unit => '%'},
53
+ :mem => { :stats => [78, 78, 78, 78, 78, 78], :color =>'#87CEFA', :unit => '%'},
54
+ :swap=>{ :stats => [50, 50, 50, 50, 50, 50], :color => '#3CB371', :unit => '%'},
55
+ :disk=>{ :stats => [25, 25, 25, 25, 25, 25], :color => '#CDC673', :unit => '%'},
56
+ :temp=>{ :stats => [40, 40, 40, 40, 40, 40], :color => '#FF9B04', :unit => 'ºC'}
57
+ }
58
+ }
59
+ end
60
+ end
61
+ end
metadata ADDED
@@ -0,0 +1,272 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pimon
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Pedro Carriço
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: haml
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - '='
36
+ - !ruby/object:Gem::Version
37
+ version: 3.1.7
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - '='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.1.7
46
+ - !ruby/object:Gem::Dependency
47
+ name: redis
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - '='
52
+ - !ruby/object:Gem::Version
53
+ version: 3.0.1
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 3.0.1
62
+ - !ruby/object:Gem::Dependency
63
+ name: sinatra
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - '='
68
+ - !ruby/object:Gem::Version
69
+ version: 1.3.2
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.3.2
78
+ - !ruby/object:Gem::Dependency
79
+ name: thin
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 1.4.1
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - '='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.4.1
94
+ - !ruby/object:Gem::Dependency
95
+ name: rack-test
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: mock_redis
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.5.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: 0.5.0
126
+ - !ruby/object:Gem::Dependency
127
+ name: rspec
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: 2.11.0
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: 2.11.0
142
+ - !ruby/object:Gem::Dependency
143
+ name: simplecov
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: simplecov-rcov
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: timecop
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - ! '>='
180
+ - !ruby/object:Gem::Version
181
+ version: '0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ description: Pimon is a simple server monitor designed for the Raspberry Pi. It uses
191
+ redis lists to keep the latest observed statistics and also uses highcharts to display
192
+ some nice charts on your web browser.
193
+ email:
194
+ - pedro.carrico@gmail.com
195
+ executables:
196
+ - pimon
197
+ extensions: []
198
+ extra_rdoc_files: []
199
+ files:
200
+ - .gitignore
201
+ - .travis.yml
202
+ - Capfile
203
+ - Gemfile
204
+ - Gemfile.lock
205
+ - README.md
206
+ - Rakefile
207
+ - WTFPL-LICENSE
208
+ - bin/clean_redis_stats
209
+ - bin/free.c
210
+ - bin/makefile
211
+ - bin/pimon
212
+ - bin/random.c
213
+ - bin/random.h
214
+ - bin/vmstat.c
215
+ - config/config.ru
216
+ - config/config_dev.ru
217
+ - config/deploy.rb
218
+ - config/development.yml
219
+ - config/production.yml
220
+ - config/test.yml
221
+ - config/test_broken.yml
222
+ - config/thin/config.yml
223
+ - lib/pimon.rb
224
+ - lib/pimon/hash_extensions.rb
225
+ - lib/pimon/pimon_config.rb
226
+ - lib/pimon/probe/cpu_usage.rb
227
+ - lib/pimon/probe/disk_usage.rb
228
+ - lib/pimon/probe/memory_usage.rb
229
+ - lib/pimon/probe/probe.rb
230
+ - lib/pimon/probe/swap_usage.rb
231
+ - lib/pimon/probe/system_memory.rb
232
+ - lib/pimon/probe/temperature.rb
233
+ - lib/pimon/public/favicon.ico
234
+ - lib/pimon/stats_collector.rb
235
+ - lib/pimon/version.rb
236
+ - lib/pimon/views/index.haml
237
+ - lib/pimon/views/index.js.haml
238
+ - pimon.gemspec
239
+ - spec/pimon_config_spec.rb
240
+ - spec/pimon_spec.rb
241
+ - spec/spec_helper.rb
242
+ - spec/stats_collector_spec.rb
243
+ homepage: https://github.com/pedrocarrico/pimon
244
+ licenses: []
245
+ post_install_message:
246
+ rdoc_options: []
247
+ require_paths:
248
+ - lib
249
+ required_ruby_version: !ruby/object:Gem::Requirement
250
+ none: false
251
+ requirements:
252
+ - - ! '>='
253
+ - !ruby/object:Gem::Version
254
+ version: '1.9'
255
+ required_rubygems_version: !ruby/object:Gem::Requirement
256
+ none: false
257
+ requirements:
258
+ - - ! '>='
259
+ - !ruby/object:Gem::Version
260
+ version: '0'
261
+ requirements: []
262
+ rubyforge_project:
263
+ rubygems_version: 1.8.23
264
+ signing_key:
265
+ specification_version: 3
266
+ summary: Pimon - Raspberry Pi server monitor
267
+ test_files:
268
+ - spec/pimon_config_spec.rb
269
+ - spec/pimon_spec.rb
270
+ - spec/spec_helper.rb
271
+ - spec/stats_collector_spec.rb
272
+ has_rdoc: