monitaur 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ **.swo
6
+ **.swp
7
+ **.DS_Store
data/README ADDED
@@ -0,0 +1,45 @@
1
+ Monitaur
2
+ =====
3
+
4
+ Rails 3 Web App Monitoring. Monitor your apps directly from your desktop. Lightweight. Built using Rails Engines.
5
+
6
+ Instructions
7
+ =====
8
+
9
+ gem install monitaur
10
+
11
+ on your routes.rb file add "monitaur", for example
12
+
13
+ YourApplication::Application.routes.draw do
14
+ monitaur
15
+ end
16
+
17
+ then download the desktop client and add your site. Start *monitauring* your Rails 3 apps now!
18
+
19
+ Customization
20
+ =====
21
+
22
+ You can freely add custom data via adding Proc, method or Hash objects on the config. Just add this on your initializer (config/initializers/monitaur.rb)
23
+
24
+ Monitaur::Monitor.config do |config|
25
+
26
+ user_count = Proc.new do
27
+ { 'users_count' => User.count }
28
+ end
29
+
30
+ config.hooks << user_count
31
+
32
+ purchases = Proc.new do
33
+ { 'purchases' = yourpurchasecode }
34
+ end
35
+
36
+ config.hooks << purchases
37
+
38
+ end
39
+
40
+ License
41
+ =====
42
+
43
+ Copyright 2011 - Jason Torres (ProudCloud.net)
44
+
45
+ MIT License
@@ -0,0 +1,15 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.libs << 'test'
12
+ t.pattern = 'test/**/*_test.rb'
13
+ t.verbose = true
14
+ end
15
+
@@ -0,0 +1,17 @@
1
+ module Monitaur
2
+
3
+ class MonitaurController < ApplicationController
4
+
5
+ unloadable
6
+
7
+ def index
8
+ @monitaur = Monitaur::Monitor.new
9
+
10
+ @output = @monitaur.render
11
+
12
+ render :json => @output.to_hash, :layout => false
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,21 @@
1
+ require 'rails'
2
+ require 'action_controller'
3
+ require 'active_support'
4
+ require 'active_support/dependencies'
5
+
6
+ require 'monitaur/monitor'
7
+ require 'monitaur/routes'
8
+
9
+ require 'sysinfo'
10
+
11
+ module Monitaur
12
+
13
+ %w{ controllers }.each do |dir|
14
+ path = File.join(File.dirname(__FILE__), 'app', dir)
15
+ $LOAD_PATH << path
16
+ ActiveSupport::Dependencies.autoload_paths << path
17
+ ActiveSupport::Dependencies.autoload_once_paths.delete(path)
18
+ end
19
+
20
+ end
21
+
@@ -0,0 +1,100 @@
1
+ module Monitaur
2
+
3
+ class Configuration
4
+ cattr_accessor :hooks
5
+
6
+ @@hooks = [] # initialize an empty array
7
+ end
8
+
9
+ class Monitor
10
+
11
+ @@config = Monitaur::Configuration
12
+
13
+ attr_accessor :output
14
+ attr_accessor :hooks
15
+
16
+ def initialize
17
+ @hooks ||= @@config.hooks
18
+ end
19
+
20
+ ##
21
+ # Returns a hash of the sysinfo values including values from hooks
22
+ def render
23
+ @output ||= {}
24
+
25
+ @output.merge!(system_info)
26
+ @output.merge!(active_record_connection)
27
+
28
+ apply_hooks
29
+
30
+ @output
31
+ end
32
+
33
+ ##
34
+ # Apply hooks. Hooks are methods that gets executed after all the other info has been collected.
35
+ # The hooks collection accepts a Proc, a method name (Symbol) or a Hash. Symbols has to be a special case
36
+ # because the method has to be visible on the Monitaur::Monitor class. Methods should return a Hash object
37
+ # that gets merged in the global output hash
38
+ #
39
+ def apply_hooks
40
+
41
+ @hooks.each do |hook|
42
+
43
+ hook_output = nil
44
+
45
+ if hook.is_a?(Proc)
46
+ hook_output = hook.call
47
+ elsif hook.is_a?(Symbol)
48
+ hook_output = eval(hook.to_s) # run the symbol
49
+ elsif hook.is_a?(Hash)
50
+ hook_output = hook # hash already? assign to output
51
+ end
52
+
53
+ @output.merge!(hook_output) if hook_output && hook_output.is_a?(Hash)
54
+
55
+
56
+ end unless @hooks.empty?
57
+
58
+ end
59
+
60
+ def self.config
61
+
62
+ if block_given?
63
+ yield(@@config)
64
+ end
65
+
66
+ end
67
+
68
+
69
+
70
+ protected
71
+
72
+ # TODO: Refactor this and move this to another module
73
+ def system_info
74
+ si = SysInfo.new
75
+ si.to_hash
76
+ rescue
77
+ {}
78
+ end
79
+
80
+ def active_record_connection
81
+ running = false
82
+
83
+ if defined?(ActiveRecord)
84
+ begin
85
+ if ActiveRecord::Base.connection.execute("select 1")
86
+ running = true
87
+ end
88
+ end
89
+
90
+
91
+ end
92
+
93
+ {:database => running}
94
+ end
95
+
96
+ end
97
+
98
+
99
+
100
+ end
@@ -0,0 +1,9 @@
1
+ require 'action_dispatch'
2
+
3
+ module ActionDispatch::Routing
4
+ class Mapper
5
+ def monitaur
6
+ match "/monitaur" => "monitaur/monitaur#index", :as => :monitaur
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module Monitaur
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "monitaur/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "monitaur"
7
+ s.version = Monitaur::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jason Torres"]
10
+ s.email = ["jason@proudcloud.net"]
11
+ s.homepage = "http://github.com/jasontorres/monitaur"
12
+ s.summary = %q{Rails 3 Website Monitoring Tool}
13
+ s.description = %q{Monitaur monitors your website from your desktop.}
14
+
15
+ s.rubyforge_project = "monitaur"
16
+
17
+ s.add_dependency('sysinfo', '>= 0.7.3')
18
+
19
+ s.files = `git ls-files`.split("\n")
20
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
22
+ s.require_paths = ["lib"]
23
+ end
@@ -0,0 +1,7 @@
1
+ require 'monitaur'
2
+
3
+ module Monitaur
4
+ class Engine < ::Rails::Engine
5
+
6
+ end
7
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ require 'monitaur/routes'
4
+ require 'monitaur/monitaur_controller'
5
+
6
+ unless defined?(ApplicationController)
7
+ class ApplicationController; end;
8
+ end
9
+
10
+ class Monitaur::MonitaurController; def rescue_action(e) raise e end; end
11
+
12
+ class Monitaur::MonitaurControllerTest < ActionController::TestCase
13
+
14
+ def setup
15
+ Rails.application.routes.draw do
16
+ monitaur
17
+ end
18
+ end
19
+
20
+ def test_index
21
+ get :index
22
+ assert_response :success
23
+ end
24
+
25
+ end
26
+
@@ -0,0 +1,50 @@
1
+ require 'test_helper'
2
+
3
+ require 'monitaur/monitor'
4
+
5
+ class Monitaur::MonitorTest < ActiveSupport::TestCase
6
+
7
+ def test_monitor_render
8
+ monitor = Monitaur::Monitor.new
9
+
10
+ output = monitor.render
11
+
12
+ assert_equal output.class, Hash
13
+ end
14
+
15
+ def test_monitor_hooks
16
+ monitor = Monitaur::Monitor.new
17
+
18
+ test_hook = Proc.new do
19
+ {'test'=> 'hook'}
20
+ end
21
+
22
+ monitor.hooks.push test_hook
23
+
24
+ output = monitor.render
25
+
26
+ assert output['test'], 'hook'
27
+ end
28
+
29
+ def test_global_monitor_hooks
30
+
31
+ test_hook = Proc.new do
32
+ {'test'=> 'hook'}
33
+ end
34
+
35
+ another_hook = Proc.new do
36
+ {'disk' => `df`}
37
+ end
38
+
39
+ Monitaur::Monitor.config do |config|
40
+ config.hooks << test_hook
41
+ end
42
+
43
+ monitor = Monitaur::Monitor.new
44
+ assert_equal monitor.hooks, [test_hook]
45
+
46
+ end
47
+
48
+ end
49
+
50
+
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class MinotaurTest < ActiveSupport::TestCase
4
+
5
+
6
+ end
7
+
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'active_support'
4
+
5
+ require 'monitaur'
6
+
7
+ ENV['RAILS_ENV'] = 'test'
8
+
9
+ ENV['RAILS_ROOT'] ||= "/Users/Jason/Sites/rubyrumble/monitaur_sample" #File.dirname(__FILE__) + '/../../..'
10
+
11
+ require File.expand_path(File.join(ENV['RAILS_ROOT'], 'config/environment.rb'))
12
+ require 'rails/test_help'
13
+
14
+
15
+
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: monitaur
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Jason Torres
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-28 00:00:00 +08:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: sysinfo
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.7.3
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ description: Monitaur monitors your website from your desktop.
28
+ email:
29
+ - jason@proudcloud.net
30
+ executables: []
31
+
32
+ extensions: []
33
+
34
+ extra_rdoc_files: []
35
+
36
+ files:
37
+ - .gitignore
38
+ - README
39
+ - Rakefile
40
+ - lib/app/controllers/monitaur/monitaur_controller.rb
41
+ - lib/monitaur.rb
42
+ - lib/monitaur/monitor.rb
43
+ - lib/monitaur/routes.rb
44
+ - lib/monitaur/version.rb
45
+ - monitaur.gemspec
46
+ - rails.rb
47
+ - test/monitaur_controller_test.rb
48
+ - test/monitaur_inspector_test.rb
49
+ - test/monitaur_test.rb
50
+ - test/test_helper.rb
51
+ has_rdoc: true
52
+ homepage: http://github.com/jasontorres/monitaur
53
+ licenses: []
54
+
55
+ post_install_message:
56
+ rdoc_options: []
57
+
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ requirements: []
73
+
74
+ rubyforge_project: monitaur
75
+ rubygems_version: 1.6.2
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: Rails 3 Website Monitoring Tool
79
+ test_files:
80
+ - test/monitaur_controller_test.rb
81
+ - test/monitaur_inspector_test.rb
82
+ - test/monitaur_test.rb
83
+ - test/test_helper.rb