servermonitor 0.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 199ab4f2eae0790eb418305f3e91c055986d0713
4
+ data.tar.gz: a1a5c8c350a8d0276fb34e85568ba72207f39139
5
+ SHA512:
6
+ metadata.gz: 20d04be8475dddd86f429ba00e7f19ff904a292d976417b1760b612620c4a644326a41254af0eb26966211fbf02a1bc4f58c86b9a088384d2e69d01a11a187c2
7
+ data.tar.gz: 530490e2f810cf63a9df1db6e750a8dc5f92de8d386ff2bb55bae92ef3ba5b74bd8f5dbaa265f64a1a6dd31b92a6d9852a52c014f6cca3425bed4f23247eac68
data/bin/postmailq ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'servermonitor/mailq'
4
+
5
+ ServerMonitor::Mailq.run
data/bin/servermonitor ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'servermonitor'
4
+
5
+ ServerMonitor::welcome
@@ -0,0 +1,7 @@
1
+ require 'servermonitor/version'
2
+
3
+ module ServerMonitor
4
+ def self.welcome
5
+ p "Welcome, this is ServerMonitor!"
6
+ end
7
+ end
@@ -0,0 +1,45 @@
1
+ module ServerMonitor
2
+
3
+ class MailqConfiguration
4
+ attr_accessor :path, :grep, :critical, :warning, :exit_codes
5
+
6
+ def initialize
7
+ @path = "/opt/zimbra/common/sbin/postqueue -p"
8
+ @grep = "/bin/grep"
9
+ @critical = 50
10
+ @warning = 40
11
+ @exit_codes = true
12
+ end
13
+ end
14
+
15
+ class Mailq
16
+
17
+ def self.config
18
+ @config ||= MailqConfiguration.new
19
+ end
20
+
21
+ def self.configure
22
+ yield(config)
23
+ end
24
+
25
+ def self.run
26
+
27
+ queue = `#{self.config.path} | #{self.config.grep} -v 'Mail queue is empty' | #{self.config.grep} -c '^[A-Z0-9]'`
28
+
29
+ # Set the no_msg (number of messages) from queue variable if no_msg does not = 0
30
+ queue == 0 ? no_msg = 0 : no_msg = queue.to_i
31
+
32
+ # Compare and return 0 for success and 1 for error
33
+ if no_msg >= self.config.critical.to_i
34
+ puts "#{no_msg} messages in the postfix mail queue"
35
+ puts exit 1 unless self.config.exit_codes == false
36
+ elsif no_msg >= self.config.warning.to_i
37
+ puts "#{no_msg} messages in the postfix mail queue"
38
+ puts exit 1 unless self.config.exit_codes == false
39
+ else
40
+ puts "#{no_msg} messages in the postfix mail queue"
41
+ puts exit 0 unless self.config.exit_codes == false
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,69 @@
1
+ require 'servermonitor/mail'
2
+
3
+ module ServerMonitor
4
+
5
+ class DiskSMARTConfiguration
6
+ attr_accessor :megacli, :grep, :exit_codes, :email_from, :email_to, :smtp_address, :smtp_port, :smtp_username, :smtp_password
7
+
8
+ def initialize
9
+ @megacli = "/usr/sbin/megacli"
10
+ @grep = "/bin/grep"
11
+ @exit_codes = false
12
+ @email_from = nil
13
+ @email_to = nil
14
+ @smtp_address = nil
15
+ @smtp_port = nil
16
+ @smtp_username = nil
17
+ @smtp_password = nil
18
+ end
19
+ end
20
+
21
+ class MegaCliDiskSMARTStatus
22
+ def self.config
23
+ @config ||= DiskSMARTConfiguration.new
24
+ end
25
+
26
+ def self.configure
27
+ yield(config)
28
+ end
29
+
30
+ def self.run
31
+ # Get current hostname
32
+ fhostname = `hostname -f`
33
+
34
+ # Get the status for each disk from megacli binary and grep for "Drive has flagged a S.M.A.R.T alert" keyword
35
+ raid_status = `#{self.config.megacli} -LDInfo -Lall -aALL | #{self.config.grep} "Drive has flagged a S.M.A.R.T alert"`
36
+
37
+ # Define eympty array
38
+ in_in = []
39
+
40
+ # Define empty variable for raid state
41
+ smart_status = nil
42
+
43
+ #
44
+ raid_status.each_line { |l| in_in << l.chomp }
45
+
46
+ # Check S.M.A.R.T status
47
+ in_in.each do |i|
48
+ # Regex matching
49
+ Regexp.new('Drive\s*has\s*flagged\s*a\s*S\.M\.A\.R\.T\s*alert\s*:\s*Yes').match?(i) ? smart_status = "ALERT: YES".upcase : smart_status = "ALERT: NO".upcase
50
+ # Display S.M.A.R.T Status
51
+ if smart_status == "ALERT: NO"
52
+ puts "S.M.A.R.T drive status is " + smart_status.to_s + " on hostname " + fhostname
53
+ puts exit 0 unless self.config.exit_codes == false
54
+ else
55
+ puts "S.M.A.R.T drive status is " + smart_status.to_s + " on hostname " + fhostname
56
+ puts exit 1 unless self.config.exit_codes == false
57
+ end
58
+ # Send email if email_to address is not empty AND if a disk does not return an "Alert: NO"
59
+ if self.config.email_to != nil && smart_status != "ALERT: NO"
60
+ time = Time.now.strftime("%d.%m.%Y %H:%M")
61
+ subject = "Daily RAID check STARTED on #{fhostname} at #{time}. RAID STATE: #{smart_status}."
62
+ body = "Daily RAID check: #{smart_status}"
63
+ email = ServerMonitor::EMail.new(self.config.email_from, self.config.email_to, self.config.smtp_address, self.config.smtp_port, self.config.smtp_username, self.config.smtp_password, subject, body)
64
+ email.deliver
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,66 @@
1
+ require 'servermonitor/mail'
2
+
3
+ module ServerMonitor
4
+
5
+ class VDConfiguration
6
+ attr_accessor :megacli, :grep, :exit_codes, :email_from, :email_to, :smtp_address, :smtp_port, :smtp_username, :smtp_password
7
+
8
+ def initialize
9
+ @megacli = "/usr/sbin/megacli"
10
+ @grep = "/bin/grep"
11
+ @exit_codes = false
12
+ @email_from = nil
13
+ @email_to = nil
14
+ @smtp_address = nil
15
+ @smtp_port = nil
16
+ @smtp_username = nil
17
+ @smtp_password = nil
18
+ end
19
+ end
20
+
21
+ class MegaCliVDStatus
22
+ def self.config
23
+ @config ||= VDConfiguration.new
24
+ end
25
+
26
+ def self.configure
27
+ yield(config)
28
+ end
29
+
30
+ def self.run
31
+ # Get current hostname
32
+ fhostname = `hostname -f`
33
+
34
+ # Get the VD state from megacli binary and grep for "State" keyword
35
+ raid_status = `#{self.config.megacli} -LDInfo -Lall -aALL | #{self.config.grep} "State"`
36
+
37
+ # Define eympty array
38
+ in_in = []
39
+
40
+ # Define empty variable for raid state
41
+ vd_status = nil
42
+ #
43
+ raid_status.each_line { |l| in_in << l.chomp }
44
+
45
+ # Check virtual drive status
46
+ in_in.each { |i| Regexp.new('State\s*:\s*Optimal').match?(i) ? vd_status = "Optimal".upcase : vd_status = "NOT Optimal".upcase }
47
+
48
+ # Display VD Status
49
+ if vd_status == "Optimal"
50
+ puts "Virtual drive status is " + vd_status.to_s + " on hostname " + fhostname
51
+ puts exit 0 unless self.config.exit_codes == false
52
+ else
53
+ puts "Virtual drive status is " + vd_status.to_s + " on hostname " + fhostname
54
+ puts exit 1 unless self.config.exit_codes == false
55
+ end
56
+
57
+ if self.config.email_to != nil
58
+ time = Time.now.strftime("%d.%m.%Y %H:%M")
59
+ subject = "Daily RAID check STARTED on #{fhostname} at #{time}. RAID STATE: #{vd_status}."
60
+ body = "Daily RAID check: #{vd_status}"
61
+ email = ServerMonitor::EMail.new(self.config.email_from, self.config.email_to, self.config.smtp_address, self.config.smtp_port, self.config.smtp_username, self.config.smtp_password, subject, body)
62
+ email.deliver
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,3 @@
1
+ module ServerMonitor
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: servermonitor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Nedim Hadzimahmutovic
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-04-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mail
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.6'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.6'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.6'
41
+ description: A collection of server monitoring ruby scripts packaged in a gem
42
+ email: h.nedim@gmail.com
43
+ executables:
44
+ - servermonitor
45
+ - postmailq
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - bin/postmailq
50
+ - bin/servermonitor
51
+ - lib/servermonitor.rb
52
+ - lib/servermonitor/mailq.rb
53
+ - lib/servermonitor/megacli_disk_smart_status.rb
54
+ - lib/servermonitor/megacli_vd_status.rb
55
+ - lib/servermonitor/version.rb
56
+ homepage: https://github.com/neidiom/servermonitor
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.6.14
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: Server Monitor
80
+ test_files: []