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 CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'rubygems'
2
+ require 'mail'
2
3
  require 'thread'
3
4
  require 'fileutils'
4
5
  require 'syslog'
@@ -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
- if param[:tls]
14
- default_port = 587
15
- Net::SMTP.enable_tls
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@' + default_host
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].values
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
- private
54
- def message(param, task)
55
- to = case param[:to_email]
56
- when Hash
57
- param[:to_email].collect{|k, v| "#{k} <#{v}>" }.join(', ')
58
- when Array
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
- time = Time.now
65
- "From: #{param[:from_name] || param[:from_email]} <#{param[:from_email]}>\r\n" \
66
- << "To: #{to}\r\n" \
67
- << "Subject: #{param[:subject]}\r\n" \
68
- << "Date: #{time.to_s}\r\n" \
69
- << "Content-type: text/plain; charset=UTF-8\r\n" \
70
- << "Message-Id: <notifyme.#{task.name}.#{time.to_i}@example.com>\r\n" \
71
- << "\r\n" \
72
- << param[:body]
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
@@ -1,6 +1,6 @@
1
1
  module NotifyMe
2
2
 
3
- VERSION = '1.1.4'
3
+ VERSION = '1.1.5'
4
4
  DEFAULT_CONFIG_FILE = "/root/.notifyme/notifyme_config.rb"
5
5
 
6
6
  autoload :Task, 'notifyme/task'
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 => 'from name',
13
+ :from_name => 'From Name',
15
14
 
16
15
  :to_email => 'to@gmail.com',
17
- :to_name => 'to name'
16
+ :to_name => 'To Name'
18
17
 
19
18
  # or
20
- :to_email => {'User a' => 'a@gmail.com', 'User b' => 'b@gmail.com'}
21
- :to_email => ['User a <a@gmail.com>', 'User b<b@gmail.com']
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
- # add some tasks
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
- date: 2013-01-17 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
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
- version_requirements: !ruby/object:Gem::Requirement
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
- version_requirements: !ruby/object:Gem::Requirement
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
- version_requirements: !ruby/object:Gem::Requirement
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
- - !ruby/object:Gem::Dependency
46
+ type: :runtime
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
63
49
  name: facter
64
- requirement: !ruby/object:Gem::Requirement
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
- version_requirements: !ruby/object:Gem::Requirement
62
+ requirement: &id005 !ruby/object:Gem::Requirement
73
63
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: 1.6.17
78
- description: NotifyMe takes care more than one tasks and process their results for
79
- you, it's similar to *NIX's cronjob but can do more.
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
- files:
87
- - lib/vendor/smtp_add_tls_support.rb
88
- - lib/notifyme/check.rb
89
- - lib/notifyme/log/file.rb
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
- require_paths:
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: '0'
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: '0'
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