notifyme 1.1.4 → 1.1.5

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