monitaur 0.0.1

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.
@@ -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