qnotifier 0.7.3 → 0.7.4

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/bin/qnotifier CHANGED
@@ -40,6 +40,11 @@ module Qnotifier
40
40
  setup_registration
41
41
 
42
42
  elsif argv.first == 'debug'
43
+ runlock_file = "/var/lib/qnotifier/.runlock"
44
+ if File.exists?(runlock_file)
45
+ `rm #{runlock_file}`
46
+ end
47
+
43
48
  puts "Running once in debug mode (use this mode to debug your plugins)\n\n"
44
49
  require "qnotifier"
45
50
  qnotifier = Qnotifier::MainProcess.new
@@ -117,7 +122,8 @@ module Qnotifier
117
122
  copy_init
118
123
  puts "Doing initial update..."
119
124
  qnotifier.run
120
- puts "\nPlease start the qnotifier daemon now ('sudo qnotifier start')"
125
+ puts "\nStarting Qnotifier daemon (qnotifier start)"
126
+ `qnotifier start`
121
127
  else
122
128
  puts "Exiting."
123
129
  end
@@ -128,11 +134,15 @@ module Qnotifier
128
134
  end
129
135
 
130
136
  def self.copy_init
131
- print "\nWould you like to install the qnotifier init script in /etc/init.d? (y/n):"
137
+ print "\nWould you like to install a qnotifier init script in /etc/init.d? (y/n):"
132
138
  response = STDIN.gets.chomp.downcase!
133
139
  if response == "y" || response == "yes"
134
140
  init_file = File.dirname(__FILE__) + "/../init/qnotifier"
135
- `cp #{init_file} /etc/init.d/`
141
+ qnotifier_location = `which qnotifier`
142
+ if qnotifier_location
143
+ `cat #{init_file} | sed 's/QNOTIFIER_DAEMON_LOCATION/#{qnotifier_location}/' > /etc/init.d/qnotifier;chmod a+x /etc/init.d/qnotifier`
144
+ puts "Qnotifier init.d installed at /etc/init.d/qnotifier - you'll need to set it to start at various run levels"
145
+ end
136
146
  end
137
147
  end
138
148
 
@@ -178,16 +188,16 @@ module Qnotifier
178
188
  end
179
189
 
180
190
  pid = fork do
181
- `echo #{Process.pid} > /var/lib/qnotifier/qnotifer.pid`
182
191
  $0 = 'qnotifierd'
183
192
  Process.setsid
184
- #Process.euid = 65534
185
193
  exit if fork
186
194
  File.umask 0000
187
195
  STDIN.reopen "/dev/null"
188
196
  STDOUT.reopen "/dev/null", "a"
189
197
  STDERR.reopen STDOUT
190
198
  trap("TERM") {daemon.stop; exit}
199
+ `echo #{Process.pid} > /var/lib/qnotifier/qnotifer.pid`
200
+ #Process.euid = 65534
191
201
  loop do
192
202
  cpid = fork do
193
203
  require "qnotifier"
@@ -43,6 +43,7 @@ System:
43
43
  - "/"
44
44
 
45
45
  # The Apache built-in plugin
46
+ # Not currently supported
46
47
  Apache:
47
48
  # Enabled, set to either true or false
48
49
  enabled: false
@@ -51,6 +52,7 @@ Apache:
51
52
  password: "password"
52
53
 
53
54
  # The IOStat built-in plugin
55
+ # Not currently supported
54
56
  Iostat:
55
57
  # Enabled, set to either true or false
56
58
  enabled: false
@@ -67,10 +69,14 @@ Mysql:
67
69
  #hostname: "hostname"
68
70
  # MySQL Port if not localhost, must be used with hostname above
69
71
  #port: 3306
70
- # Queries per second over which to generate an alert
71
- #alert_qps_threshold: 100
72
+
73
+ # The URL Monitor built-in plugin, will watch a URL for non-200 HTTP responses
74
+ Url:
75
+ enabled: false
76
+ url: "http://localhost"
72
77
 
73
78
  # The Network Interface built-in plugin
79
+ # Not currently supported
74
80
  Network:
75
81
  # Enabled, set to either true or false
76
82
  enabled: false
@@ -81,20 +87,15 @@ Network:
81
87
  Nginx:
82
88
  # Enabled, set to either true or false
83
89
  enabled: false
84
- username: "username"
85
- password: "password"
90
+ url: "http://username:password@127.0.0.1/nginx_status"
86
91
 
87
92
  # The Passenger Phusion built-in plugin
88
93
  Passenger:
89
94
  # Enabled, set to either true or false
90
95
  enabled: false
91
-
92
- # The Process List built-in plugin
93
- Processes:
94
- # Enabled, set to either true or false
95
- enabled: false
96
-
96
+
97
97
  # The Rails built-in plugin
98
+ # Not currently supported
98
99
  Rails:
99
100
  # Enabled, set to either true or false
100
101
  enabled: false
data/init.d/qnotifier CHANGED
@@ -0,0 +1,38 @@
1
+ #! /bin/sh
2
+ ### BEGIN INIT INFO
3
+ # Provides: qnotifier
4
+ # Required-Start: $remote_fs $syslog
5
+ # Required-Stop: $remote_fs $syslog
6
+ # Default-Start: 2 3 4 5
7
+ # Default-Stop: 0 1 6
8
+ # Short-Description: Qnotifier initscript
9
+ # Description: Qnotifier server monitoring daemon, see http://qnotifier.com
10
+ ### END INIT INFO
11
+
12
+ # Author: Gersham Meharg <gersham@qnotifier.com>
13
+
14
+ PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:/opt/local/bin
15
+ DESC="Qnotifier Monitoring Daemon"
16
+ NAME=qnotifier
17
+ DAEMON=QNOTIFIER_DAEMON_LOCATION
18
+
19
+ # Exit if the package is not installed
20
+ [ -x "$DAEMON" ] || exit 0
21
+
22
+ case "$1" in
23
+ start)
24
+ $DAEMON start
25
+ ;;
26
+ stop)
27
+ $DAEMON stop
28
+ ;;
29
+ restart)
30
+ $DAEMON restart
31
+ ;;
32
+ *)
33
+ echo "Usage: $SCRIPTNAME {start|stop|status}" >&2
34
+ exit 3
35
+ ;;
36
+ esac
37
+
38
+ :
data/lib/web_service.rb CHANGED
@@ -79,7 +79,7 @@ module Qnotifier
79
79
  return
80
80
  end
81
81
  if last_run and (Time.now - last_run) <= @@poll_interval
82
- Qnotifier.log.info "Not running yet, waiting until #{last_run + @@poll_interval}"
82
+ Qnotifier.log.info "Not reporting to the service yet, waiting until #{last_run + @@poll_interval}"
83
83
  return
84
84
  end
85
85
  Qnotifier::Storage.put("last_run", Time.now)
data/plugins/apache.rb CHANGED
@@ -8,34 +8,7 @@ module Qnotifier
8
8
  end
9
9
 
10
10
  def main
11
-
12
- # require "net/http", "uri"
13
- #
14
- # url = URI.parse(option("server_url"))
15
- # req = Net::HTTP::Get.new(url.path + "?" + url.query.to_s)
16
- # res = Net::HTTP.start(url.host, url.port) {|http|
17
- # http.request(req)
18
- # }
19
- # values = {}
20
- # res.body.split("\n").each do |item|
21
- # k, v = item.split(": ")
22
- # values[k] = v
23
- # end
24
- # total_accesses = values['Total Accesses'].to_i
25
- # if (memory(:last_run_total_accesses) && memory(:last_run_time))
26
- # accesses_since_last_run = total_accesses - memory(:last_run_total_accesses)
27
- # seconds_since_last_run = Time.now - memory(:last_run_time)
28
- # else
29
- # accesses_since_last_run = total_accesses
30
- # seconds_since_last_run = values['Uptime'].to_i
31
- # end
32
- #
33
- # current_accesses_per_second = accesses_since_last_run / seconds_since_last_run
34
- #
35
- # report(:current_load => current_accesses_per_second)
36
- # remember(:last_run_time => Time.now)
37
- # remember(:last_run_total_accesses => total_accesses)
38
- #
11
+ Qnotifier.log.error "Apache stats plugin not yet supported in this beta version"
39
12
  end
40
13
  end
41
14
  end
data/plugins/iostat.rb CHANGED
@@ -8,6 +8,7 @@ module Qnotifier
8
8
  end
9
9
 
10
10
  def main
11
+ Qnotifier.log.error "IOStats plugin not yet supported in this beta version"
11
12
  end
12
13
  end
13
14
  end
data/plugins/network.rb CHANGED
@@ -8,6 +8,7 @@ module Qnotifier
8
8
  end
9
9
 
10
10
  def main
11
+ Qnotifier.log.error "Network plugin not yet supported in this beta version"
11
12
  end
12
13
  end
13
14
  end
data/plugins/nginx.rb CHANGED
@@ -1,14 +1,39 @@
1
1
  #!/usr/bin/env ruby
2
+ require 'open-uri'
3
+
2
4
  module Qnotifier
3
5
  class Nginx < Qnotifier::Plugin
4
6
 
5
7
  def initialize
6
8
  @defaults = {
7
- "status_url" => "http://127.0.0.1/nginx_status"
8
9
  }
9
10
  end
10
11
 
11
12
  def main
13
+
14
+ return if @options["url"].empty?
15
+
16
+ total, requests, reading, writing, waiting = nil
17
+
18
+ begin
19
+ open( @options["url"]) {|f|
20
+ f.each_line do |line|
21
+ total = $1 if line =~ /^Active connections:\s+(\d+)/
22
+ if line =~ /^Reading:\s+(\d+).*Writing:\s+(\d+).*Waiting:\s+(\d+)/
23
+ reading = $1
24
+ writing = $2
25
+ waiting = $3
26
+ end
27
+ requests = $3 if line =~ /^\s+(\d+)\s+(\d+)\s+(\d+)/
28
+ end
29
+ }
30
+
31
+ report("Connections", total)
32
+ stat("Activity", "total: #{total} reading: #{reading} writing: #{writing} waiting: #{waiting}")
33
+
34
+ rescue Exception => e
35
+ Qnotifier.log.error "Can not check Nginx Status #{e}"
36
+ end
12
37
  end
13
38
  end
14
39
  end
data/plugins/passenger.rb CHANGED
@@ -8,6 +8,34 @@ module Qnotifier
8
8
  end
9
9
 
10
10
  def main
11
+
12
+ status = `passenger-status`
13
+ if status
14
+ max, count, active, inactive = 0
15
+
16
+ for line in status.split("\n")
17
+
18
+ s = line.split('=')
19
+ if s.length == 2
20
+ c = s[1].strip
21
+
22
+ if line =~ /max/
23
+ max = c
24
+ elsif line =~ /count/
25
+ count = c
26
+ elsif line =~ /active/
27
+ active = c
28
+ elsif line =~ /inactive/
29
+ inactive = c
30
+ end
31
+ end
32
+ end
33
+ report("Active", active)
34
+ stat("Handlers", "max: #{max} count: #{count} active: #{active} inactive: #{inactive}")
35
+
36
+ else
37
+ Qnotifier.log.error "Can't read passenger-status"
38
+ end
11
39
  end
12
40
  end
13
41
  end
data/plugins/rails.rb CHANGED
@@ -12,8 +12,7 @@ module Qnotifier
12
12
  end
13
13
 
14
14
  def main
15
- puts "here"
16
- #log_file = read_backwards_to_timestamp(@options[:rails_log_file], last_summary)
15
+ Qnotifier.log.error "Rails plugin not yet supported in this beta version"
17
16
  end
18
17
 
19
18
  def patch_elif
data/plugins/system.rb CHANGED
@@ -84,7 +84,9 @@ module Qnotifier
84
84
 
85
85
  # CPU
86
86
  if RUBY_PLATFORM =~ /linux/
87
- vmstat = `vmstat | tail -1`
87
+
88
+ # Need to rewrite this, vmstat is only giving stats since system boot, not instant stats
89
+ vmstat = nil #`vmstat | tail -1`
88
90
  if vmstat
89
91
  vmstat = vmstat.split
90
92
  if vmstat.size >= 16
@@ -150,10 +152,12 @@ module Qnotifier
150
152
  unless meminfo.empty?
151
153
  memory["Free"] = meminfo['MemFree'] / 1024
152
154
  memory["Total"] = meminfo['MemTotal'] / 1024
153
- memory_percent = ((memory["Total"] - memory["Free"]) / memory["Total"] * 100).to_i
154
- memory["Percent"] = memory_percent
155
+ memory["Buffers"] = meminfo['Buffers'] / 1024
156
+ memory["Cached"] = meminfo['Cached'] / 1024
157
+ memory_usable = memory["Free"] + memory["Buffers"] + memory["Cached"]
158
+ memory_percent = 100 - (memory_usable * 100 / memory["Total"])
155
159
 
156
- stat("Memory", "Free: #{memory["Free"]}M, Total: #{memory["Total"]}M")
160
+ stat("Memory", "Total: #{memory["Total"]}M, Free: #{memory["Free"]}M, Buffers: #{memory["Buffers"]}M, Cached: #{memory["Cached"]}M,")
157
161
  report("Memory %", memory_percent)
158
162
 
159
163
  if @options["alert_memory_threshold"] != 0 and memory_percent >= @options["alert_memory_threshold"]
data/plugins/urls.rb CHANGED
@@ -1,4 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ require 'net/http'
3
+ require 'net/https'
4
+ require 'uri'
5
+
2
6
  module Qnotifier
3
7
  class Urls < Qnotifier::Plugin
4
8
 
@@ -8,6 +12,50 @@ module Qnotifier
8
12
  end
9
13
 
10
14
  def main
15
+
16
+ url = @options["url"].strip
17
+ if url.empty?
18
+ Qnotifier.log.error "No URL specified for URL Monitor"
19
+ end
20
+
21
+ unless url =~ %r{\Ahttps?://}
22
+ url = "http://#{url}"
23
+ end
24
+
25
+ uri = URI.parse(url)
26
+ response = nil
27
+ stat("URL", url)
28
+
29
+ start_time = Time.now.usec
30
+
31
+ begin
32
+ http = Net::HTTP.new(uri.host,uri.port)
33
+ http.use_ssl = url =~ %r{\Ahttps://}
34
+ http.start(){|http|
35
+ http.open_timeout = 10
36
+ req = Net::HTTP::Get.new((uri.path != '' ? uri.path : '/' ) + (uri.query ? ('?' + uri.query) : ''))
37
+ if uri.user && uri.password
38
+ req.basic_auth uri.user, uri.password
39
+ end
40
+ response = http.request(req)
41
+ }
42
+ rescue Exception => e
43
+ puts "Exception #{e}"
44
+ stat("Code", 0)
45
+ alert("response", "HTTP connection error: #{e.message} #{url}")
46
+ return
47
+ end
48
+
49
+ response_time = (Time.now.usec - start_time) / 1000
50
+ report("Latency msec", response_time)
51
+
52
+ if response.code == 200
53
+ stat("Code", 200)
54
+ reset_alert("response", "HTTP OK #{url}")
55
+ else
56
+ stat("Code", response.code)
57
+ alert("response", "HTTP #{response.code} #{url}")
58
+ end
11
59
  end
12
60
  end
13
61
  end
data/qnotifier.gemspec CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{qnotifier}
5
- s.version = "0.7.3"
5
+ s.version = "0.7.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Gersham Meharg"]
9
- s.date = %q{2010-06-13}
9
+ s.date = %q{2010-06-28}
10
10
  s.default_executable = %q{qnotifier}
11
11
  s.description = %q{The server side agent for the QNotifier monitoring system. This software will monitor local Linux system parameters and upload them to the QNotifier servers where users can use iPhone/iPad applications to view those stats and recieve alerts.}
12
12
  s.email = %q{gersham@qnotifier.com}
13
13
  s.executables = ["qnotifier"]
14
14
  s.extra_rdoc_files = ["bin/qnotifier", "lib/plugin.rb", "lib/qnotifier.rb", "lib/storage.rb", "lib/web_service.rb"]
15
- s.files = ["Manifest", "Rakefile", "bin/qnotifier", "config/README", "config/qnotifier_config.yml", "gem-public_cert.pem", "lib/plugin.rb", "lib/qnotifier.rb", "lib/storage.rb", "lib/web_service.rb", "plugins/apache.rb", "plugins/iostat.rb", "plugins/mysql.rb", "plugins/network.rb", "plugins/nginx.rb", "plugins/passenger.rb", "plugins/processes.rb", "plugins/rails.rb", "plugins/ruby.rb", "plugins/system.rb", "plugins/urls.rb", "init.d/qnotifier", "qnotifier.gemspec"]
15
+ s.files = ["Manifest", "Rakefile", "bin/qnotifier", "config/README", "config/qnotifier_config.yml", "gem-public_cert.pem", "lib/plugin.rb", "lib/qnotifier.rb", "lib/storage.rb", "lib/web_service.rb", "plugins/apache.rb", "plugins/iostat.rb", "plugins/mysql.rb", "plugins/network.rb", "plugins/nginx.rb", "plugins/passenger.rb", "plugins/rails.rb", "plugins/ruby.rb", "plugins/system.rb", "plugins/urls.rb", "init.d/qnotifier", "qnotifier.gemspec"]
16
16
  s.homepage = %q{http://qnotifier.com/qnotifier_gem}
17
17
  s.post_install_message = %q{Qnotifier installed, please register by running 'qnotifier' in order to register this server.}
18
18
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Qnotifier"]
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 7
8
- - 3
9
- version: 0.7.3
8
+ - 4
9
+ version: 0.7.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Gersham Meharg
@@ -35,7 +35,7 @@ cert_chain:
35
35
  wu7A8rLN6CU0SfWf
36
36
  -----END CERTIFICATE-----
37
37
 
38
- date: 2010-06-13 00:00:00 -07:00
38
+ date: 2010-06-28 00:00:00 -07:00
39
39
  default_executable: qnotifier
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
@@ -187,7 +187,6 @@ files:
187
187
  - plugins/network.rb
188
188
  - plugins/nginx.rb
189
189
  - plugins/passenger.rb
190
- - plugins/processes.rb
191
190
  - plugins/rails.rb
192
191
  - plugins/ruby.rb
193
192
  - plugins/system.rb
metadata.gz.sig CHANGED
Binary file
data/plugins/processes.rb DELETED
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env ruby
2
- module Qnotifier
3
- class Processes < Qnotifier::Plugin
4
-
5
- def initialize
6
- @defaults = {
7
- }
8
- end
9
-
10
- def main
11
- end
12
- end
13
- end