redis_monitor 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -2
  4. data/Gemfile +2 -1
  5. data/README.md +1 -1
  6. data/Rakefile +5 -0
  7. data/bin/redis_monitor +2 -2
  8. data/lib/{server/command_line_parser.rb → command_line_parser.rb} +0 -3
  9. data/lib/engine/.gitignore +16 -0
  10. data/lib/engine/.rspec +2 -0
  11. data/lib/engine/Gemfile +5 -0
  12. data/lib/engine/Rakefile +6 -0
  13. data/lib/engine/app/assets/images/.keep +0 -0
  14. data/lib/engine/app/controllers/application_controller.rb +10 -0
  15. data/lib/engine/app/controllers/concerns/.keep +0 -0
  16. data/lib/engine/app/controllers/content_controller.rb +34 -0
  17. data/lib/engine/app/controllers/info_controller.rb +6 -0
  18. data/lib/engine/app/controllers/performance_controller.rb +8 -0
  19. data/lib/engine/app/helpers/application_helper.rb +21 -0
  20. data/lib/engine/app/helpers/database_helper.rb +36 -0
  21. data/lib/engine/app/helpers/pagination_helper.rb +8 -0
  22. data/lib/engine/app/lib/backend.rb +45 -0
  23. data/lib/{modules → engine/app/lib}/performance_stats.rb +0 -0
  24. data/lib/engine/app/lib/security/authentication.rb +14 -0
  25. data/lib/engine/app/lib/security/authorization.rb +16 -0
  26. data/lib/engine/app/mailers/.keep +0 -0
  27. data/lib/engine/app/models/.keep +0 -0
  28. data/lib/engine/app/models/concerns/.keep +0 -0
  29. data/lib/{views → engine/app/views}/content/_search_form.haml +0 -0
  30. data/lib/engine/app/views/content/index.haml +1 -0
  31. data/lib/{views → engine/app/views}/content/search.haml +5 -5
  32. data/lib/{views/info/info.haml → engine/app/views/info/index.haml} +1 -1
  33. data/lib/engine/app/views/layouts/application.haml +23 -0
  34. data/lib/{views → engine/app/views}/performance/check.haml +1 -1
  35. data/lib/{views/performance/warning.haml → engine/app/views/performance/index.haml} +0 -0
  36. data/lib/engine/bin/bundle +3 -0
  37. data/lib/engine/bin/rails +4 -0
  38. data/lib/engine/bin/rake +4 -0
  39. data/lib/engine/config/application.rb +34 -0
  40. data/lib/engine/config/boot.rb +4 -0
  41. data/lib/engine/config/database.yml +25 -0
  42. data/lib/engine/config/environment.rb +5 -0
  43. data/lib/engine/config/environments/development.rb +25 -0
  44. data/lib/engine/config/environments/production.rb +65 -0
  45. data/lib/engine/config/environments/test.rb +36 -0
  46. data/lib/engine/config/initializers/backtrace_silencers.rb +7 -0
  47. data/lib/engine/config/initializers/configuration.rb +5 -0
  48. data/lib/engine/config/initializers/filter_parameter_logging.rb +4 -0
  49. data/lib/engine/config/initializers/haml.rb +1 -0
  50. data/lib/engine/config/initializers/inflections.rb +16 -0
  51. data/lib/engine/config/initializers/mime_types.rb +5 -0
  52. data/lib/engine/config/initializers/secret_token.rb +12 -0
  53. data/lib/engine/config/initializers/session_store.rb +3 -0
  54. data/lib/engine/config/initializers/will_paginate.rb +1 -0
  55. data/lib/engine/config/initializers/wrap_parameters.rb +14 -0
  56. data/lib/engine/config/locales/en.bootstrap.yml +18 -0
  57. data/lib/engine/config/locales/en.yml +23 -0
  58. data/lib/engine/config/routes.rb +73 -0
  59. data/lib/engine/config.ru +4 -0
  60. data/lib/engine/db/seeds.rb +7 -0
  61. data/lib/engine/lib/assets/.keep +0 -0
  62. data/lib/engine/lib/tasks/.keep +0 -0
  63. data/lib/engine/log/.keep +0 -0
  64. data/lib/engine/public/404.html +58 -0
  65. data/lib/engine/public/422.html +58 -0
  66. data/lib/engine/public/500.html +57 -0
  67. data/lib/engine/public/favicon.ico +0 -0
  68. data/lib/{static/scripts → engine/public/javascripts}/app.js +0 -0
  69. data/lib/{static/scripts → engine/public/javascripts}/bootstrap-select.min.js +0 -0
  70. data/lib/{static/scripts → engine/public/javascripts}/bootstrap.min.js +0 -0
  71. data/lib/{static/scripts → engine/public/javascripts}/jquery-2.0.3.min.js +0 -0
  72. data/lib/engine/public/robots.txt +5 -0
  73. data/lib/{static/styles → engine/public/stylesheets}/bootstrap-select.min.css +0 -0
  74. data/lib/{static/styles → engine/public/stylesheets}/bootstrap.min.css +0 -0
  75. data/lib/{static/styles → engine/public/stylesheets}/custom.css +0 -0
  76. data/lib/engine/spec/controllers/content_controller_spec.rb +28 -0
  77. data/lib/engine/spec/controllers/info_controller_spec.rb +10 -0
  78. data/lib/engine/spec/controllers/performance_controller_spec.rb +10 -0
  79. data/{spec/modules → lib/engine/spec/lib}/backend_spec.rb +3 -3
  80. data/{spec/modules → lib/engine/spec/lib}/performance_stats_spec.rb +1 -1
  81. data/lib/engine/spec/lib/security/authentication_spec.rb +23 -0
  82. data/{spec/modules → lib/engine/spec/lib}/security/authorization_spec.rb +1 -1
  83. data/lib/engine/spec/spec_helper.rb +47 -0
  84. data/lib/engine/test/controllers/.keep +0 -0
  85. data/lib/engine/test/fixtures/.keep +0 -0
  86. data/lib/engine/test/helpers/.keep +0 -0
  87. data/lib/engine/test/integration/.keep +0 -0
  88. data/lib/engine/test/mailers/.keep +0 -0
  89. data/lib/engine/test/models/.keep +0 -0
  90. data/lib/engine/test/test_helper.rb +15 -0
  91. data/lib/engine/vendor/assets/javascripts/.keep +0 -0
  92. data/lib/engine/vendor/assets/stylesheets/.keep +0 -0
  93. data/lib/redis_monitor.rb +14 -10
  94. data/lib/{modules/version.rb → version.rb} +1 -1
  95. data/redis_monitor.gemspec +14 -4
  96. metadata +153 -100
  97. data/lib/controllers/base_controller.rb +0 -53
  98. data/lib/controllers/content_controller.rb +0 -37
  99. data/lib/controllers/info_controller.rb +0 -14
  100. data/lib/controllers/performance_controller.rb +0 -19
  101. data/lib/errors/errors.rb +0 -1
  102. data/lib/errors/redis_not_available.rb +0 -7
  103. data/lib/helpers/base_helper.rb +0 -13
  104. data/lib/helpers/database_helper.rb +0 -40
  105. data/lib/helpers/layouts_helper.rb +0 -29
  106. data/lib/helpers/pagination_helper.rb +0 -10
  107. data/lib/modules/backend.rb +0 -49
  108. data/lib/modules/controllers.rb +0 -5
  109. data/lib/modules/helpers.rb +0 -15
  110. data/lib/modules/router.rb +0 -26
  111. data/lib/modules/security/authentication.rb +0 -29
  112. data/lib/modules/security/authorization.rb +0 -18
  113. data/lib/server/server.rb +0 -27
  114. data/lib/views/content/index.haml +0 -1
  115. data/lib/views/errors/redis_not_available.haml +0 -2
  116. data/lib/views/layouts/main.haml +0 -21
  117. data/spec/controllers/base_controller_spec.rb +0 -34
  118. data/spec/controllers/content_controller_spec.rb +0 -41
  119. data/spec/controllers/info_controller_spec.rb +0 -22
  120. data/spec/controllers/performance_controller_spec.rb +0 -21
  121. data/spec/modules/security/authentication_spec.rb +0 -48
  122. data/spec/server/command_line_parser_spec.rb +0 -42
  123. data/spec/spec_helper.rb +0 -23
@@ -1,49 +0,0 @@
1
- require 'redis'
2
- require 'errors/errors'
3
- require 'modules/performance_stats'
4
- require 'forwardable'
5
-
6
- module RedisMonitor
7
- class Backend
8
- extend SingleForwardable
9
-
10
- def_delegators :redis, :get, :set, :info, :keys, :dbsize, :select
11
-
12
- def self.config(arguments)
13
- @@host = arguments[:redis_host]
14
- @@port = arguments[:redis_port]
15
- end
16
-
17
- def self.host
18
- @@host
19
- end
20
-
21
- def self.port
22
- @@port
23
- end
24
-
25
- def self.redis
26
- @@redis ||= Redis.new(:host => host, :port => port)
27
- end
28
-
29
- def self.performance_stats
30
- PerformanceStats.new(self).results
31
- end
32
-
33
- def self.search(key)
34
- keys(key).map{|found| {key: found, value: get(found)} }
35
- end
36
-
37
- def self.change_database(*args)
38
- select(*args)
39
- end
40
-
41
- def self.del(key)
42
- redis.del(key) if Authorization.authorized_for?(:remove_content)
43
- end
44
-
45
- def self.databases
46
- info.keys.map{|d| d.match(/db(\d+)/);$1}.compact
47
- end
48
- end
49
- end
@@ -1,5 +0,0 @@
1
- require 'controllers/base_controller'
2
- require 'controllers/info_controller'
3
- require 'controllers/content_controller'
4
- require 'controllers/performance_controller'
5
- require 'will_paginate/array'
@@ -1,15 +0,0 @@
1
- require 'helpers/base_helper'
2
- require 'helpers/layouts_helper'
3
- require 'helpers/pagination_helper'
4
- require 'helpers/database_helper'
5
-
6
- module RedisMonitor
7
- module Helpers
8
- module AllHelpers
9
- include BaseHelper
10
- include LayoutsHelper
11
- include PaginationHelper
12
- include DatabaseHelper
13
- end
14
- end
15
- end
@@ -1,26 +0,0 @@
1
- require 'modules/helpers'
2
- require 'modules/controllers'
3
-
4
- module RedisMonitor
5
- module Router
6
- include RedisMonitor::Controllers
7
-
8
- def dependencies
9
- {context: self, session: session, params: params}
10
- end
11
-
12
- def self.included(server)
13
- server.get('/'){ redirect '/info' }
14
- server.get('/info'){ InfoController.new(dependencies).execute(:index) }
15
-
16
- server.get('/content'){ ContentController.new(dependencies).execute(:index) }
17
- server.get('/content/search'){ ContentController.new(dependencies).execute(:search) }
18
- server.post('/content/delete'){ ContentController.new(dependencies).execute(:delete) }
19
- server.post('/content/change_database'){ ContentController.new(dependencies).execute(:change_database) }
20
-
21
- server.get('/performance'){ redirect '/performance/warning' }
22
- server.get('/performance/warning'){ PerformanceController.new(dependencies).execute(:warning) }
23
- server.get('/performance/check'){ PerformanceController.new(dependencies).execute(:check) }
24
- end
25
- end
26
- end
@@ -1,29 +0,0 @@
1
- module RedisMonitor
2
- module Authentication
3
-
4
- def self.config(server, credentials)
5
- @@credentials = credentials
6
- @@server = server
7
- inject_authentication
8
- end
9
-
10
- def self.inject_authentication
11
- if authentication_required?
12
- @@server.class_eval do
13
- use Rack::Auth::Basic, 'Restricted Area' do |username, password|
14
- username == Authentication.credentials[:user] and password == Authentication.credentials[:password]
15
- end
16
- end
17
- end
18
- end
19
-
20
-
21
- def self.authentication_required?
22
- !!credentials
23
- end
24
-
25
- def self.credentials
26
- @@credentials
27
- end
28
- end
29
- end
@@ -1,18 +0,0 @@
1
- module RedisMonitor
2
- class Authorization
3
- DEFAULTS = {remove_content: true}
4
-
5
- def self.config(opts = {})
6
- opts = {} unless opts
7
- @@permissions = DEFAULTS.merge(opts)
8
- end
9
-
10
- def self.permissions
11
- @@permissions
12
- end
13
-
14
- def self.authorized_for?(action)
15
- !!permissions[action]
16
- end
17
- end
18
- end
data/lib/server/server.rb DELETED
@@ -1,27 +0,0 @@
1
- require 'sinatra'
2
- require 'haml'
3
- require 'modules/router'
4
- require 'modules/security/authorization'
5
- require 'will_paginate/view_helpers/sinatra'
6
- require 'will_paginate-bootstrap'
7
-
8
- module RedisMonitor
9
- class Server < Sinatra::Base
10
- include RedisMonitor::Router
11
- include RedisMonitor::Helpers::LayoutsHelper
12
- include WillPaginate::Sinatra::Helpers
13
- include RedisMonitor::Helpers::PaginationHelper
14
- include RedisMonitor::Helpers::DatabaseHelper
15
-
16
- set :public_folder, File.dirname(__FILE__) + '/../static'
17
- set :views, File.dirname(__FILE__) + '/../views'
18
- enable :sessions
19
-
20
- def self.config(arguments)
21
- set :server, arguments[:http_server]
22
- set :port, arguments[:http_port]
23
- end
24
-
25
- end
26
- end
27
-
@@ -1 +0,0 @@
1
- = haml 'content/_search_form'.to_sym
@@ -1,2 +0,0 @@
1
- .message_centered
2
- Can't connect to a redis instance in host: #{host} and port: #{port}
@@ -1,21 +0,0 @@
1
- %html
2
- %head
3
- %meta{name: 'viewport', content: 'width=device-width, initial-scale=1.0'}
4
- %link{rel: 'stylesheet', media: 'screen, projection', type: 'text/css', href: '/styles/bootstrap.min.css'}
5
- %link{rel: 'stylesheet', media: 'screen, projection', type: 'text/css', href: '/styles/bootstrap-select.min.css'}
6
- %link{rel: 'stylesheet', media: 'screen, projection', type: 'text/css', href: '/styles/custom.css'}
7
- %script{src: '/scripts/jquery-2.0.3.min.js'}
8
- %script{src: '/scripts/bootstrap.min.js'}
9
- %script{src: '/scripts/bootstrap-select.min.js'}
10
- %script{src: '/scripts/app.js'}
11
- %body
12
- .navbar.navbar-inverse.navbar-fixed-top
13
- .container
14
- .navbar-header
15
- %a.navbar-brand{href: '/'}
16
- Redis Monitor
17
- .collapse.navbar-collapse
18
- = content_menu(section)
19
-
20
- .container
21
- = yield
@@ -1,34 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe BaseController do
4
- let(:context){ double() }
5
- let(:controller){ BaseController.new(context: context) }
6
-
7
- before :each do
8
- Backend.stub(:host)
9
- Backend.stub(:port)
10
- end
11
-
12
- describe 'execute method' do
13
- it 'should not raise error if the action executed raised RedisNotAvailable' do
14
- controller.stub(:action) { raise RedisNotAvailable }
15
- controller.should_receive(:redis_not_available)
16
- expect{ controller.execute(:action) }.not_to raise_error
17
- end
18
- end
19
-
20
- describe 'redis_not_available method' do
21
- it 'should render redis not available error page' do
22
- context.should_receive(:haml).with('errors/redis_not_available'.to_sym, anything)
23
- controller.redis_not_available
24
- end
25
- end
26
-
27
- describe 'set_database' do
28
- it 'should change the actual database' do
29
- controller.stub(:session){ {} }
30
- Backend.should_receive(:change_database)
31
- controller.set_database(2)
32
- end
33
- end
34
- end
@@ -1,41 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe ContentController do
4
- let(:context){ double() }
5
- let(:params){ {key: ''} }
6
- let(:controller){ ContentController.new(context: context, params: params) }
7
- let(:search_results){ double(paginate: []) }
8
-
9
- before :each do
10
- controller.stub(:redirect_back)
11
- end
12
-
13
- describe 'index action' do
14
- it 'should render index template' do
15
- context.should_receive(:haml).with('content/index'.to_sym, anything)
16
- controller.index
17
- end
18
- end
19
-
20
- describe 'search action' do
21
- it 'should render search template' do
22
- Backend.stub(:search){ search_results }
23
- context.should_receive(:haml).with('content/search'.to_sym, anything)
24
- controller.search
25
- end
26
- end
27
-
28
- describe 'delete action' do
29
- it 'should call del on Backend' do
30
- Backend.should_receive(:del)
31
- controller.delete
32
- end
33
- end
34
-
35
- describe 'change_database' do
36
- it 'should call set_database' do
37
- controller.should_receive(:set_database)
38
- controller.change_database
39
- end
40
- end
41
- end
@@ -1,22 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe InfoController do
4
- let(:context){ double() }
5
- let(:controller){ InfoController.new(context: context) }
6
-
7
- describe 'index action' do
8
- before :each do
9
- Backend.stub(:info){ {} }
10
- end
11
-
12
- it 'should not fail' do
13
- context.stub(:haml)
14
- expect{ controller.index }.not_to raise_error
15
- end
16
-
17
- it 'should render info template' do
18
- context.should_receive(:haml).with('info/info'.to_sym, anything)
19
- controller.index
20
- end
21
- end
22
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PerformanceController do
4
- let(:context){ double() }
5
- let(:controller){ PerformanceController.new(context: context) }
6
-
7
- describe 'warning action' do
8
- it 'should render warning template' do
9
- context.should_receive(:haml).with('performance/warning'.to_sym, anything)
10
- controller.warning
11
- end
12
- end
13
-
14
- describe 'check action' do
15
- it 'should render check template' do
16
- Backend.stub(:performance_stats){ {} }
17
- context.should_receive(:haml).with('performance/check'.to_sym, anything)
18
- controller.check
19
- end
20
- end
21
- end
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Authentication do
4
- let(:server){ double(class_eval: nil, use: nil) }
5
- let(:credentials){ {user: 'user', password: 'password'} }
6
-
7
- describe 'config' do
8
- it 'should inject authentication in server class' do
9
- Authentication.should_receive(:inject_authentication)
10
- Authentication.config(server, credentials)
11
- end
12
- end
13
-
14
- describe 'inject_authentication' do
15
- before :each do
16
- Authentication.config(server, credentials)
17
- server.stub(:class_eval){|&block| block.call }
18
- end
19
-
20
- it 'should include authentication if required' do
21
- Authentication.stub(:authentication_required?){ true }
22
- Authentication.should_receive(:use).with(Rack::Auth::Basic, anything)
23
- Authentication.inject_authentication
24
- end
25
-
26
- it 'should not include authentication if not required' do
27
- Authentication.stub(:authentication_required?){ false }
28
- Authentication.should_not_receive(:use)
29
- Authentication.inject_authentication
30
- end
31
- end
32
-
33
- describe 'authentication_required??' do
34
- before :each do
35
- Authentication.stub(:inject_authentication)
36
- end
37
-
38
- it 'should return true if it has some credentials' do
39
- Authentication.config(server, credentials)
40
- Authentication.authentication_required?.should eq(true)
41
- end
42
-
43
- it 'should return false if no credentials were provided' do
44
- Authentication.config(server, nil)
45
- Authentication.authentication_required?.should eq(false)
46
- end
47
- end
48
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe CommandLineParser do
4
- describe 'parse' do
5
- it 'should read http-server option' do
6
- args = ['--http-server', 'server']
7
- CommandLineParser.parse(args)[:http_server].should eq('server')
8
- end
9
-
10
- it 'should read http-port option' do
11
- args = ['--http-port', '2222']
12
- CommandLineParser.parse(args)[:http_port].should eq(2222)
13
- end
14
-
15
- it 'should read host option' do
16
- args = ['--host', 'redisdb']
17
- CommandLineParser.parse(args)[:redis_host].should eq('redisdb')
18
- end
19
-
20
- it 'should read port option' do
21
- args = ['--port', '4444']
22
- CommandLineParser.parse(args)[:redis_port].should eq(4444)
23
- end
24
-
25
- it 'should read editable option' do
26
- args = ['--editable']
27
- CommandLineParser.parse(args)[:permissions][:remove_content].should eq(true)
28
- end
29
-
30
- it 'should read not-editable option' do
31
- args = ['--not-editable']
32
- CommandLineParser.parse(args)[:permissions][:remove_content].should eq(false)
33
- end
34
-
35
- it 'should read credentials options' do
36
- args = ['--credentials', 'user:password']
37
- credentials = CommandLineParser.parse(args)[:credentials]
38
- credentials[:user].should eq('user')
39
- credentials[:password].should eq('password')
40
- end
41
- end
42
- end
data/spec/spec_helper.rb DELETED
@@ -1,23 +0,0 @@
1
- # This file was generated by the `rspec --init` command. Conventionally, all
2
- # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
- # Require this file using `require "spec_helper"` to ensure that it is only
4
- # loaded once.
5
- #
6
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
- RSpec.configure do |config|
8
- config.treat_symbols_as_metadata_keys_with_true_values = true
9
- config.run_all_when_everything_filtered = true
10
- config.order = 'random'
11
- end
12
-
13
- require 'sinatra'
14
- require 'modules/helpers'
15
- require 'modules/controllers'
16
- require 'modules/backend'
17
- require 'server/command_line_parser'
18
- require 'modules/security/authorization'
19
- require 'modules/security/authentication'
20
-
21
- include RedisMonitor
22
- include RedisMonitor::Controllers
23
- include RedisMonitor::Errors