sermont 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,6 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
6
+ nbproject
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Nugroho Herucahyono
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,79 @@
1
+ = sermont
2
+
3
+ * http://github.com/xinuc/sermont
4
+
5
+ == DESCRIPTION:
6
+
7
+ Sermont is a command line based script to monitor your servers.
8
+
9
+ == SYNOPSIS:
10
+
11
+ type the command in your terminal.
12
+
13
+ sermont [options]
14
+
15
+ === Options:
16
+
17
+ --setup : copy example config file to your home directory
18
+ -r, --raw : print the report without colors
19
+ -t TIME, --time TIME : checking every TIME seconds
20
+ -o FILE, --output FILE: write the report to the FILE
21
+ -l, --last : log only the last report
22
+ -d, --daemon : running as a daemon
23
+ -h, --help : print this help
24
+ -v, --version : print sermont version
25
+
26
+ === Example:
27
+
28
+ sermont -r -o /var/log/sermont.log -d -t 1800
29
+
30
+ == REQUIREMENTS:
31
+
32
+ * term-ansicolor
33
+ * daemons
34
+
35
+ == INSTALL:
36
+
37
+ install term-ansicolor & daemons gem if you haven't
38
+
39
+ sudo gem install term-ansicolor
40
+ sudo gem install daemons
41
+
42
+ install xinuc-sermont from github.com
43
+
44
+ sudo gem install xinuc-sermont --source=http://gems.github.com
45
+
46
+ Run
47
+
48
+ sermont --setup
49
+
50
+ it will copy .sermont.yml to your home directory. Edit this file according to
51
+ your servers.
52
+
53
+ ---
54
+ - servername: Your server name
55
+ ip: 127.0.0.1
56
+ services:
57
+ ftp: 21
58
+ http: 80
59
+
60
+ Now, you can run <code>sermont</code> to monitor your servers.
61
+
62
+ == Add Your Own Handler
63
+
64
+ If you have any services that can't be checked by simply open the port, you can
65
+ add you own service handler. As an example, if you want to check 'weird' service by
66
+ your own method, you can create a file name "weird.rb" under YOUR_HOME_DIR/.sermont/
67
+ Then, the file should be like :
68
+
69
+ # file: weird.rb
70
+
71
+ def weird(host, port)
72
+ # your own checking algorithm
73
+ # this method should return true if the service is running
74
+ # and false if the service is stopped.
75
+ end
76
+
77
+ == Copyright
78
+
79
+ Copyright (c) 2009 Nugroho Herucahyono. See LICENSE for details.
@@ -0,0 +1,61 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "sermont"
8
+ gem.summary = "Server Monitor"
9
+ gem.description = "Sermont is a command line based script to monitor your servers."
10
+ gem.email = "xinuc@xinuc.org"
11
+ gem.homepage = "http://github.com/xinuc/sermont"
12
+ gem.authors = ["Nugroho Herucahyono"]
13
+ gem.add_dependency("daemons", ">= 1.0.10")
14
+ gem.add_dependency("term-ansicolor", ">= 1.0.3")
15
+ gem.executables = ["sermont"]
16
+ gem.default_executable = "sermont"
17
+ gem.rubyforge_project = "indofaker"
18
+ end
19
+
20
+ rescue LoadError
21
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
22
+ end
23
+
24
+ require 'rake/testtask'
25
+ Rake::TestTask.new(:test) do |test|
26
+ test.libs << 'lib' << 'test'
27
+ test.pattern = 'test/**/*_test.rb'
28
+ test.verbose = true
29
+ end
30
+
31
+ begin
32
+ require 'rcov/rcovtask'
33
+ Rcov::RcovTask.new do |test|
34
+ test.libs << 'test'
35
+ test.pattern = 'test/**/*_test.rb'
36
+ test.verbose = true
37
+ end
38
+ rescue LoadError
39
+ task :rcov do
40
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
41
+ end
42
+ end
43
+
44
+
45
+ task :default => :test
46
+
47
+ require 'rake/rdoctask'
48
+ Rake::RDocTask.new do |rdoc|
49
+ if File.exist?('VERSION.yml')
50
+ config = YAML.load(File.read('VERSION.yml'))
51
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
52
+ else
53
+ version = ""
54
+ end
55
+
56
+ rdoc.rdoc_dir = 'rdoc'
57
+ rdoc.title = "sermont #{version}"
58
+ rdoc.rdoc_files.include('README*')
59
+ rdoc.rdoc_files.include('lib/**/*.rb')
60
+ end
61
+
@@ -0,0 +1,4 @@
1
+ ---
2
+ :minor: 3
3
+ :patch: 1
4
+ :major: 0
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'sermont'
5
+ require 'fileutils'
6
+ require 'yaml'
7
+
8
+ if ARGV.empty?
9
+ Sermont.new.run
10
+ elsif ARGV.include?("--help") || ARGV.include?("-h")
11
+ help = <<-HELP
12
+ Usage: sermont [options]
13
+ Options:
14
+
15
+ --setup : copy example config file to your home directory
16
+ -r, --raw : print the report without colors
17
+ -t TIME, --time TIME : checking every TIME seconds
18
+ -o FILE, --output FILE: write the report to the FILE
19
+ -l, --last : log only the last report
20
+ -d, --daemon : running as a daemon
21
+ -h, --help : print this help
22
+ -v, --version : print sermont version
23
+
24
+ Example:
25
+
26
+ sermont -r -o /var/log/sermont.log -d -t 1800
27
+
28
+ Sermont by xinuc, http://github.com/xinuc/sermont
29
+ HELP
30
+
31
+ puts(help)
32
+ elsif ARGV.include?("--version") || ARGV.include?("-v")
33
+ config = YAML.load(File.read(File.dirname(__FILE__) + '/../' + 'VERSION.yml'))
34
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
35
+ puts "Sermont : version #{version}"
36
+ puts "Sermont by xinuc, http://github.com/xinuc/sermont"
37
+ elsif ARGV.include?("--setup")
38
+ FileUtils.cp(File.expand_path(File.dirname(__FILE__) + "/../lib/config/sermont.yaml"), File.expand_path("~/.sermont.yml"))
39
+ FileUtils.mkdir(File.expand_path("~/.sermont")) unless File.exists?(File.expand_path("~/.sermont"))
40
+ puts "Creating #{File.expand_path("~/.sermont")} directory."
41
+ puts "Copying .sermont.yml to your home directory."
42
+ puts "Please edit this file according to your servers."
43
+ else
44
+ raw, time, out, daemon = nil
45
+ raw = ARGV.include?("--raw") || ARGV.include?("-r")
46
+ if ARGV.include?("-t") || ARGV.include?("--time")
47
+ t_index = ARGV.index("-t") || ARGV.index("--time")
48
+ time = ARGV[t_index + 1]
49
+ end
50
+ if ARGV.include?("-o") || ARGV.include?("--output")
51
+ o_index = ARGV.index("-o") || ARGV.index("--output")
52
+ out = ARGV[o_index + 1]
53
+ end
54
+ daemon = ARGV.include?("--daemon") || ARGV.include?("-d")
55
+ last = ARGV.include?("--last") || ARGV.include?("-l")
56
+ Sermont.new.run(raw, time, out, daemon, last)
57
+ end
@@ -0,0 +1,18 @@
1
+ # Add your servers informations here
2
+ # the informations consist of :
3
+ # - servername: the name of the server
4
+ # - ip: ip address of your server
5
+ # - services: all the services of your server, consists of the name and the port
6
+ # see the examples below.
7
+ ---
8
+ - servername: My Server
9
+ ip: 127.0.0.1
10
+ services:
11
+ ftp: 21
12
+ http: 80
13
+ - servername: Yet Another Server
14
+ ip: 127.0.0.2
15
+ services:
16
+ ftp: 21
17
+ http: 80
18
+ ssh: 22
@@ -0,0 +1,7 @@
1
+ module Handler
2
+
3
+ def ftp(host, port)
4
+ open_port(host, port)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ module Handler
2
+
3
+ def http(host, port)
4
+ open_port(host, port)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ module Handler
2
+
3
+ def mysql(host, port)
4
+ open_port(host, port)
5
+ end
6
+
7
+ end
@@ -0,0 +1,13 @@
1
+ require 'socket'
2
+
3
+ module Handler
4
+
5
+ def open_port(host, port)
6
+ s = TCPSocket.open(host, port)
7
+ s.close
8
+ true
9
+ rescue Exception
10
+ false
11
+ end
12
+
13
+ end
@@ -0,0 +1,9 @@
1
+ require 'ping'
2
+
3
+ module Handler
4
+
5
+ def ping(host)
6
+ Ping::pingecho(host, 5)
7
+ end
8
+
9
+ end
@@ -0,0 +1,156 @@
1
+ require "rubygems"
2
+ require "yaml"
3
+ require "fileutils"
4
+ begin
5
+ require "term/ansicolor"
6
+ rescue LoadError
7
+ end
8
+
9
+ begin
10
+ require "daemons"
11
+ rescue LoadError
12
+ end
13
+
14
+ Dir[File.dirname(__FILE__) + '/handler/*.rb'].each{|h| require h}
15
+
16
+ class Sermont
17
+
18
+ include Handler
19
+ begin
20
+ include Daemonize
21
+ rescue NameError
22
+ end
23
+ begin
24
+ include Term::ANSIColor
25
+ rescue NameError
26
+ end
27
+
28
+ W = 80
29
+
30
+ req_dir = File.expand_path("~/.sermont")
31
+ Dir[req_dir + '/*.rb'].each{|h| require h} if File.exists? req_dir
32
+
33
+ def initialize
34
+ @raw = !(defined?(Term::ANSIColor) && self.is_a?(Term::ANSIColor))
35
+ @can_daemon = defined?(Daemonize) && self.is_a?(Daemonize)
36
+ end
37
+
38
+ def load_setup
39
+ config_file = File.expand_path("~/.sermont.yml")
40
+ unless File.exists?(config_file) && @servers = YAML.load(IO.read(config_file))
41
+ puts "Config file .sermont.yml doesn't exists or invalid."
42
+ puts "Run 'sermont --setup' to create example config file in your home directory"
43
+ exit
44
+ end
45
+ end
46
+
47
+ def run(raw = nil, time = nil, output = nil, daemon = nil, last = nil)
48
+ load_setup
49
+ @raw = @raw || raw
50
+ unless time
51
+ output ? add_to_output(report, output, last) : print(report)
52
+ else
53
+ if daemon && @can_daemon && output
54
+ pwd = Dir.pwd
55
+ daemonize
56
+ Dir.chdir pwd
57
+ end
58
+ loop do
59
+ output ? add_to_output(report, output, last) : print(report)
60
+ begin
61
+ sleep time.to_i
62
+ rescue Exception
63
+ exit
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ def add_to_output(out, file, last)
70
+ File.open(file, last ? "wb" : "ab") do |f|
71
+ f << out
72
+ end
73
+ end
74
+
75
+ def report
76
+ report = notification(Time.now.to_s)
77
+ @servers.each do |server|
78
+ servername = server["servername"]
79
+ ip = server["ip"]
80
+ report << handle_host(servername, ip)
81
+ services = server["services"]
82
+ services.each do |k, v|
83
+ report << handle_service(k, ip, v)
84
+ end
85
+ end
86
+ report
87
+ end
88
+
89
+ def notification(notif)
90
+ if @raw
91
+ notif + whitespace(notif) + "\n"
92
+ else
93
+ on_black + dark + notif + whitespace(notif) + clear + "\n"
94
+ end
95
+ end
96
+
97
+ def whitespace(str)
98
+ spaces = W - str.size
99
+ w = ""
100
+ spaces.times {w << " "}
101
+ w
102
+ end
103
+
104
+ def dotspace(str, f_indent, b_indent)
105
+ spaces = W - 4 - str.size - f_indent - b_indent
106
+ w = ""
107
+ spaces.times {w << "."}
108
+ w
109
+ end
110
+
111
+ def host_str(hostname)
112
+ if @raw
113
+ "#{hostname} is " + dotspace(hostname, 0, 10)
114
+ else
115
+ on_yellow + black + bold + "#{hostname} is " + dotspace(hostname, 0, 10) + clear
116
+ end
117
+ end
118
+
119
+ def host_status(alive)
120
+ if alive
121
+ @raw ? "Alive \n" : bold + on_green + white + "Alive " + clear + "\n"
122
+ else
123
+ @raw ? "In Trouble\n" : bold + on_red + white + "In Trouble" + clear + "\n"
124
+ end
125
+ end
126
+
127
+ def handle_host(servername, ip)
128
+ host_str(servername) + host_status(self.ping(ip))
129
+ end
130
+
131
+ def service_str(service)
132
+ if @raw
133
+ " #{service} is " + dotspace(service, 5, 10)
134
+ else
135
+ on_blue + yellow + bold + " #{service} is " + dotspace(service, 5, 10) + clear
136
+ end
137
+ end
138
+
139
+ def service_status(running)
140
+ if running
141
+ @raw ? "Running \n" : bold + on_green + white + "Running " + clear + "\n"
142
+ else
143
+ @raw ? "Stopped \n" : bold + on_red + white + "Stopped " + clear + "\n"
144
+ end
145
+ end
146
+
147
+ def handle_service(handler, ip, port)
148
+ running = begin
149
+ self.send(handler, ip, port)
150
+ rescue NoMethodError
151
+ self.open_port(ip, port)
152
+ end
153
+ service_str(handler) + service_status(running)
154
+ end
155
+
156
+ end
@@ -0,0 +1,64 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{sermont}
5
+ s.version = "0.3.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Nugroho Herucahyono"]
9
+ s.date = %q{2009-06-10}
10
+ s.default_executable = %q{sermont}
11
+ s.description = %q{Sermont is a command line based script to monitor your servers.}
12
+ s.email = %q{xinuc@xinuc.org}
13
+ s.executables = ["sermont"]
14
+ s.extra_rdoc_files = [
15
+ "LICENSE",
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ ".document",
20
+ ".gitignore",
21
+ "LICENSE",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION.yml",
25
+ "bin/sermont",
26
+ "lib/config/sermont.yaml",
27
+ "lib/handler/ftp.rb",
28
+ "lib/handler/http.rb",
29
+ "lib/handler/mysql.rb",
30
+ "lib/handler/open_port.rb",
31
+ "lib/handler/ping.rb",
32
+ "lib/sermont.rb",
33
+ "sermont.gemspec",
34
+ "spec/sermont.yaml",
35
+ "spec/sermont_spec.rb",
36
+ "spec/spec_helper.rb"
37
+ ]
38
+ s.homepage = %q{http://github.com/xinuc/sermont}
39
+ s.rdoc_options = ["--charset=UTF-8"]
40
+ s.require_paths = ["lib"]
41
+ s.rubyforge_project = %q{indofaker}
42
+ s.rubygems_version = %q{1.3.4}
43
+ s.summary = %q{Server Monitor}
44
+ s.test_files = [
45
+ "spec/sermont_spec.rb",
46
+ "spec/spec_helper.rb"
47
+ ]
48
+
49
+ if s.respond_to? :specification_version then
50
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
51
+ s.specification_version = 3
52
+
53
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
54
+ s.add_runtime_dependency(%q<daemons>, [">= 1.0.10"])
55
+ s.add_runtime_dependency(%q<term-ansicolor>, [">= 1.0.3"])
56
+ else
57
+ s.add_dependency(%q<daemons>, [">= 1.0.10"])
58
+ s.add_dependency(%q<term-ansicolor>, [">= 1.0.3"])
59
+ end
60
+ else
61
+ s.add_dependency(%q<daemons>, [">= 1.0.10"])
62
+ s.add_dependency(%q<term-ansicolor>, [">= 1.0.3"])
63
+ end
64
+ end
@@ -0,0 +1,18 @@
1
+ # Add your servers informations here
2
+ # the informations consist of :
3
+ # - servername: the name of the server
4
+ # - ip: ip address of your server
5
+ # - services: all the services of your server, consists of the name and the port
6
+ # see the examples below.
7
+ ---
8
+ - servername: My Server
9
+ ip: 127.0.0.1
10
+ services:
11
+ ftp: 21
12
+ http: 80
13
+ - servername: Yet Another Server
14
+ ip: 127.0.0.2
15
+ services:
16
+ ftp: 21
17
+ http: 80
18
+ ssh: 22
@@ -0,0 +1,70 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe Sermont do
4
+ include Term::ANSIColor
5
+
6
+ before(:each) do
7
+ @sermont = Sermont.new
8
+ end
9
+
10
+ it "should include some modules" do
11
+ Sermont.should include(Handler)
12
+ Sermont.should include(Daemonize)
13
+ Sermont.should include(Term::ANSIColor)
14
+ end
15
+
16
+ it "should set raw to true if can include ansicolor" do
17
+ @sermont.instance_variable_get("@raw").should == false
18
+ @sermont.instance_variable_get("@can_daemon").should == true
19
+ end
20
+
21
+ it "should load servers correctly" do
22
+ File.stubs(:expand_path).with("~/.sermont.yml").returns(File.dirname(__FILE__) + "/sermont.yaml")
23
+ @sermont.load_setup
24
+ servers = @sermont.instance_variable_get("@servers")
25
+ servers.should_not be_nil
26
+ servers.should == [{"servername"=>"My Server", "ip"=>"127.0.0.1", "services"=>{"ftp"=>21, "http"=>80}}, {"servername"=>"Yet Another Server", "ip"=>"127.0.0.2", "services"=>{"ftp"=>21, "ssh"=>22, "http"=>80}}]
27
+ end
28
+
29
+ it "should exit if config not found" do
30
+ File.stubs(:exists?).with(File.expand_path("~/.sermont.yml")).returns false
31
+ @sermont.stubs(:exit).returns("EXIT")
32
+ @sermont.load_setup.should == "EXIT"
33
+ end
34
+
35
+ it "should has notification of 81 chars in raw" do
36
+ @sermont.instance_variable_set("@raw", true)
37
+ @sermont.notification("some notif").size.should == 81
38
+ end
39
+
40
+ it "should has host str of 70 chars in raw" do
41
+ @sermont.instance_variable_set("@raw", true)
42
+ @sermont.host_str("some host").size.should == 70
43
+ end
44
+
45
+ it "should has service str of 70 chars in raw" do
46
+ @sermont.instance_variable_set("@raw", true)
47
+ @sermont.service_str("some service").size.should == 70
48
+ end
49
+
50
+ it "should has status of 11 chars in raw" do
51
+ @sermont.instance_variable_set("@raw", true)
52
+ @sermont.service_status(true).size.should == 11
53
+ @sermont.service_status(false).size.should == 11
54
+ @sermont.host_status(true).size.should == 11
55
+ @sermont.host_status(false).size.should == 11
56
+ end
57
+
58
+ it "should has handle host of 81 chars in raw" do
59
+ @sermont.instance_variable_set("@raw", true)
60
+ @sermont.handle_host("this localhost", "127.0.0.1").size.should == 81
61
+ @sermont.handle_host("some weird host", "167.0.0.1").size.should == 81
62
+ end
63
+
64
+ it "should has handle service of 81 chars in raw" do
65
+ @sermont.instance_variable_set("@raw", true)
66
+ @sermont.handle_service("http", "127.0.0.1", 80).size.should == 81
67
+ @sermont.handle_service("ldap", "127.0.0.1", 2000).size.should == 81
68
+ end
69
+
70
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
2
+ require 'rubygems'
3
+ require 'spec'
4
+ require 'mocha'
5
+ require 'sermont'
6
+
7
+ Spec::Runner.configure do |config|
8
+ config.mock_with :mocha
9
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sermont
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.3
5
+ platform: ruby
6
+ authors:
7
+ - Nugroho Herucahyono
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-10 00:00:00 +07:00
13
+ default_executable: sermont
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: daemons
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.0.10
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: term-ansicolor
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.3
34
+ version:
35
+ description: Sermont is a command line based script to monitor your servers.
36
+ email: xinuc@xinuc.org
37
+ executables:
38
+ - sermont
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - LICENSE
43
+ - README.rdoc
44
+ files:
45
+ - .document
46
+ - .gitignore
47
+ - LICENSE
48
+ - README.rdoc
49
+ - Rakefile
50
+ - VERSION.yml
51
+ - bin/sermont
52
+ - lib/config/sermont.yaml
53
+ - lib/handler/ftp.rb
54
+ - lib/handler/http.rb
55
+ - lib/handler/mysql.rb
56
+ - lib/handler/open_port.rb
57
+ - lib/handler/ping.rb
58
+ - lib/sermont.rb
59
+ - sermont.gemspec
60
+ - spec/sermont.yaml
61
+ - spec/sermont_spec.rb
62
+ - spec/spec_helper.rb
63
+ has_rdoc: true
64
+ homepage: http://github.com/xinuc/sermont
65
+ licenses: []
66
+
67
+ post_install_message:
68
+ rdoc_options:
69
+ - --charset=UTF-8
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
77
+ version:
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ version:
84
+ requirements: []
85
+
86
+ rubyforge_project: indofaker
87
+ rubygems_version: 1.3.5
88
+ signing_key:
89
+ specification_version: 3
90
+ summary: Server Monitor
91
+ test_files:
92
+ - spec/sermont_spec.rb
93
+ - spec/spec_helper.rb