notifyme 1.1.4 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/notifyme.rb +1 -0
- data/lib/notifyme/log/mail.rb +35 -43
- data/lib/notifyme/start.rb +1 -1
- data/notifyme_config.rb +8 -7
- metadata +68 -72
- data/lib/vendor/smtp_add_tls_support.rb +0 -113
data/lib/notifyme.rb
CHANGED
data/lib/notifyme/log/mail.rb
CHANGED
@@ -2,74 +2,66 @@ module NotifyMe
|
|
2
2
|
module Log
|
3
3
|
class Mail < Logger
|
4
4
|
def <<(task)
|
5
|
-
require 'vendor/smtp_add_tls_support.rb'
|
6
|
-
|
7
5
|
param = @parameters
|
8
6
|
param = {} unless param.is_a?(Hash)
|
9
7
|
|
10
8
|
# some default settings
|
11
|
-
|
12
9
|
default_host = 'localhost'
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
else
|
17
|
-
default_port = 25
|
18
|
-
Net::SMTP.disable_tls
|
10
|
+
smtp_port = param[:port]
|
11
|
+
unless smtp_port
|
12
|
+
smtp_port = param[:tls] ? 587 : 25
|
19
13
|
end
|
14
|
+
smtp_host = (param[:address] || param[:host]) || default_host
|
20
15
|
|
21
|
-
default_from_email = 'notifyme@' +
|
16
|
+
default_from_email = 'notifyme@' + smtp_host
|
22
17
|
|
23
18
|
param[:subject] = "NotifyMe report (#{fact(:hostname)} # #{fact(:ipaddress)}): #{task.name}"
|
24
19
|
param[:subject] = param[:subject] %
|
25
20
|
|
26
21
|
param[:from_email] ||= param[:account]
|
27
22
|
param[:from_email] ||= default_from_email
|
23
|
+
from = if param[:from_name]
|
24
|
+
"#{param[:from_name]} <#{param[:from_email]}>"
|
25
|
+
else
|
26
|
+
param[:from_email]
|
27
|
+
end
|
28
28
|
|
29
29
|
param[:body] = param[:body_header].to_s +
|
30
30
|
generate(task) +
|
31
31
|
param[:body_footer].to_s
|
32
32
|
|
33
|
-
smtp = Net::SMTP.new(
|
34
|
-
(param[:address] || param[:host]) || default_host,
|
35
|
-
param[:port] || default_port
|
36
|
-
)
|
37
|
-
|
38
33
|
# go go go!
|
39
34
|
recipients = if param[:to_email].is_a? Hash
|
40
|
-
param[:to_email].
|
35
|
+
param[:to_email].collect{|name, email| "#{name} <#{email}>"}
|
41
36
|
else
|
42
37
|
param[:to_email]
|
43
38
|
end
|
44
|
-
smtp.start(param[:helo_domain] || default_host,
|
45
|
-
param[:account],
|
46
|
-
param[:password],
|
47
|
-
param[:authtype] || :plain
|
48
|
-
) do |mail|
|
49
|
-
mail.send_message message(param, task), param[:from_email], recipients
|
50
|
-
end
|
51
|
-
end
|
52
39
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
param[:to_email].collect{|v| "#{v.split('@').first} <#{v}>"}.join(", ")
|
60
|
-
else
|
61
|
-
"#{param[:to_name] || param[:to_email].split('@').first} <#{param[:to_email]}>"
|
62
|
-
end
|
40
|
+
mail = ::Mail.new do
|
41
|
+
from from
|
42
|
+
to recipients
|
43
|
+
subject param[:subject]
|
44
|
+
body param[:body]
|
45
|
+
end
|
63
46
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
47
|
+
if param[:host]
|
48
|
+
smtp_settings = {
|
49
|
+
:address => smtp_host,
|
50
|
+
:port => param[:port] || smtp_port,
|
51
|
+
:domain => param[:helo_domain] || default_host,
|
52
|
+
:user_name => param[:account] || param[:user_name],
|
53
|
+
:password => param[:password],
|
54
|
+
:authentication => param[:authentication] || :plain,
|
55
|
+
:openssl_verify_mode => param[:openssl_verify_mode],
|
56
|
+
:enable_starttls_auto => param[:enable_starttls_auto] || true,
|
57
|
+
:tls => param[:tls],
|
58
|
+
:ssl => param[:ssl]
|
59
|
+
}
|
60
|
+
mail.delivery_method :smtp, smtp_settings
|
61
|
+
else
|
62
|
+
mail.delivery_method :sendmail
|
63
|
+
end
|
64
|
+
mail.deliver
|
73
65
|
end
|
74
66
|
end
|
75
67
|
end
|
data/lib/notifyme/start.rb
CHANGED
data/notifyme_config.rb
CHANGED
@@ -5,20 +5,19 @@ NotifyMe::Start.config do
|
|
5
5
|
log :mail,
|
6
6
|
:host => 'smtp.gmail.com',
|
7
7
|
:helo_domain => 'gmail.com',
|
8
|
-
:tls => true,
|
9
8
|
|
10
9
|
:account => 'xxx@gmail.com',
|
11
10
|
:password => '***',
|
12
11
|
|
13
12
|
:from_email => 'from@gmail.com',
|
14
|
-
:from_name => '
|
13
|
+
:from_name => 'From Name',
|
15
14
|
|
16
15
|
:to_email => 'to@gmail.com',
|
17
|
-
:to_name => '
|
16
|
+
:to_name => 'To Name'
|
18
17
|
|
19
18
|
# or
|
20
|
-
:to_email => {'User
|
21
|
-
:to_email => ['User
|
19
|
+
:to_email => {'User A' => 'a@gmail.com', 'User B' => 'b@gmail.com'}
|
20
|
+
:to_email => ['User A <a@gmail.com>', 'User B<b@gmail.com']
|
22
21
|
=end
|
23
22
|
|
24
23
|
# log :file, '/tmp/test.txt'
|
@@ -30,8 +29,10 @@ NotifyMe::Start.config do
|
|
30
29
|
|
31
30
|
# set nagios directory
|
32
31
|
# nagios_directory "/usr/lib/nagios/plugins"
|
32
|
+
#
|
33
33
|
|
34
|
-
|
34
|
+
## !! NOTICE: for new installation,
|
35
|
+
## !! It's not recommended that to put "check tasks" in the notifyme_config.rb file.
|
35
36
|
|
36
37
|
#
|
37
38
|
# check disk space usage every 60 seconds,
|
@@ -41,7 +42,7 @@ NotifyMe::Start.config do
|
|
41
42
|
t.sleep_time = 60
|
42
43
|
t.command = lambda {
|
43
44
|
if %x{df -h}.scan(/\s+(\d+)%\s+/).find {|pcent| pcent.first.to_i > 95}
|
44
|
-
"Warning: at least 1 disk space usage > 95%"
|
45
|
+
raise "Warning: at least 1 disk space usage > 95%"
|
45
46
|
else
|
46
47
|
nil
|
47
48
|
end
|
metadata
CHANGED
@@ -1,124 +1,120 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: notifyme
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.4
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 1.1.5
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- xianhua.zhou
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
date: 2013-03-03 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
15
16
|
name: daemons
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 1.1.0
|
22
|
-
type: :runtime
|
23
17
|
prerelease: false
|
24
|
-
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
19
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
29
23
|
version: 1.1.0
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: json_pure
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 1.4.2
|
38
24
|
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: json_pure
|
39
28
|
prerelease: false
|
40
|
-
|
29
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
30
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
45
34
|
version: 1.4.2
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: http_request.rb
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 1.1.13
|
54
35
|
type: :runtime
|
36
|
+
version_requirements: *id002
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: http_request.rb
|
55
39
|
prerelease: false
|
56
|
-
|
40
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
41
|
none: false
|
58
|
-
requirements:
|
59
|
-
- -
|
60
|
-
- !ruby/object:Gem::Version
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
61
45
|
version: 1.1.13
|
62
|
-
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id003
|
48
|
+
- !ruby/object:Gem::Dependency
|
63
49
|
name: facter
|
64
|
-
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
65
52
|
none: false
|
66
|
-
requirements:
|
67
|
-
- -
|
68
|
-
- !ruby/object:Gem::Version
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
69
56
|
version: 1.6.17
|
70
57
|
type: :runtime
|
58
|
+
version_requirements: *id004
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: mail
|
71
61
|
prerelease: false
|
72
|
-
|
62
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
73
63
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version:
|
78
|
-
|
79
|
-
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 2.5.3
|
68
|
+
type: :runtime
|
69
|
+
version_requirements: *id005
|
70
|
+
description: NotifyMe is a monitoring script, it can monitor processes, services etc. with ruby scripts.
|
80
71
|
email: xianhua.zhou@gmail.com
|
81
|
-
executables:
|
72
|
+
executables:
|
82
73
|
- notifyme_daemon
|
83
74
|
- notifyme
|
84
75
|
extensions: []
|
76
|
+
|
85
77
|
extra_rdoc_files: []
|
86
|
-
|
87
|
-
|
88
|
-
- lib/notifyme
|
89
|
-
- lib/notifyme/log
|
78
|
+
|
79
|
+
files:
|
80
|
+
- lib/notifyme.rb
|
81
|
+
- lib/notifyme/log.rb
|
90
82
|
- lib/notifyme/log/mail.rb
|
91
83
|
- lib/notifyme/log/stdout.rb
|
92
|
-
- lib/notifyme/log.rb
|
84
|
+
- lib/notifyme/log/file.rb
|
93
85
|
- lib/notifyme/start.rb
|
86
|
+
- lib/notifyme/check.rb
|
94
87
|
- lib/notifyme/task.rb
|
95
|
-
- lib/notifyme.rb
|
96
88
|
- INSTALL
|
97
89
|
- notifyme_config.rb
|
98
90
|
- bin/notifyme_daemon
|
99
91
|
- bin/notifyme
|
100
92
|
homepage: http://github.com/xianhuazhou/NotifyMe
|
101
93
|
licenses: []
|
94
|
+
|
102
95
|
post_install_message:
|
103
96
|
rdoc_options: []
|
104
|
-
|
97
|
+
|
98
|
+
require_paths:
|
105
99
|
- lib
|
106
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
101
|
none: false
|
108
|
-
requirements:
|
109
|
-
- -
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version:
|
112
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: "0"
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
107
|
none: false
|
114
|
-
requirements:
|
115
|
-
- -
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version:
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: "0"
|
118
112
|
requirements: []
|
113
|
+
|
119
114
|
rubyforge_project: notifyme
|
120
115
|
rubygems_version: 1.8.24
|
121
116
|
signing_key:
|
122
117
|
specification_version: 3
|
123
118
|
summary: It's a kind of cronjob.
|
124
119
|
test_files: []
|
120
|
+
|
@@ -1,113 +0,0 @@
|
|
1
|
-
# http://happiness-is-slavery.net/wp-content/rails-plugins/smtp_add_tls_support/lib/smtp_add_tls_support.rb
|
2
|
-
|
3
|
-
require 'net/smtp'
|
4
|
-
require 'timeout'
|
5
|
-
|
6
|
-
begin
|
7
|
-
require 'openssl'
|
8
|
-
rescue LoadError
|
9
|
-
end
|
10
|
-
|
11
|
-
Net::SMTP.class_eval do
|
12
|
-
|
13
|
-
alias_method :old_initialize, :initialize
|
14
|
-
def initialize(hostname, port)
|
15
|
-
@usetls = @@usetls
|
16
|
-
old_initialize hostname, port
|
17
|
-
end
|
18
|
-
|
19
|
-
@@usetls = false
|
20
|
-
|
21
|
-
def self.enable_tls()
|
22
|
-
@@usetls = true
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.disable_tls()
|
26
|
-
@@usetls = false
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.use_tls?()
|
30
|
-
@@usetls
|
31
|
-
end
|
32
|
-
|
33
|
-
def use_tls?()
|
34
|
-
@usetls
|
35
|
-
end
|
36
|
-
|
37
|
-
def enable_tls()
|
38
|
-
@usetls = true
|
39
|
-
end
|
40
|
-
|
41
|
-
def disable_tls()
|
42
|
-
@usetls = false
|
43
|
-
end
|
44
|
-
|
45
|
-
def use_tls?()
|
46
|
-
@usetls
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
def do_start(helodomain, user, secret, authtype)
|
51
|
-
raise IOError 'SMTP session already started' if @started
|
52
|
-
check_auth_args user, secret if user or secret
|
53
|
-
|
54
|
-
sock = timeout(@open_timeout) {
|
55
|
-
TCPSocket.open(@address, @port)
|
56
|
-
}
|
57
|
-
@socket = Net::InternetMessageIO.new(sock)
|
58
|
-
@socket.read_timeout = @read_timeout
|
59
|
-
@socket.debug_output = nil
|
60
|
-
|
61
|
-
check_response(critical{
|
62
|
-
recv_response()
|
63
|
-
})
|
64
|
-
do_helo(helodomain)
|
65
|
-
|
66
|
-
if @usetls
|
67
|
-
raise 'openssl is not installed' unless defined?(OpenSSL)
|
68
|
-
ssl = OpenSSL::SSL::SSLSocket.new(sock)
|
69
|
-
starttls
|
70
|
-
ssl.sync_close = true
|
71
|
-
ssl.connect
|
72
|
-
|
73
|
-
@socket = Net::InternetMessageIO.new(ssl)
|
74
|
-
@socket.read_timeout = @read_timeout
|
75
|
-
@socket.debug_output = nil
|
76
|
-
do_helo(helodomain)
|
77
|
-
end
|
78
|
-
|
79
|
-
authenticate user, secret, authtype if user
|
80
|
-
@started = true
|
81
|
-
ensure
|
82
|
-
@socket.close if not @started and @socket and not @socket.closed?
|
83
|
-
end
|
84
|
-
|
85
|
-
def do_helo(helodomain)
|
86
|
-
begin
|
87
|
-
if @esmtp
|
88
|
-
ehlo helodomain
|
89
|
-
else
|
90
|
-
helo helodomain
|
91
|
-
end
|
92
|
-
rescue Net::ProtocolError
|
93
|
-
if @esmtp
|
94
|
-
@esmtp = false
|
95
|
-
@error_occured = false
|
96
|
-
retry
|
97
|
-
end
|
98
|
-
raise
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def starttls
|
103
|
-
getok('STARTTLS')
|
104
|
-
end
|
105
|
-
|
106
|
-
def quit
|
107
|
-
begin
|
108
|
-
getok('QUIT')
|
109
|
-
rescue EOFError
|
110
|
-
# gmail sucks
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|