stress_reporter 0.0.1 → 0.0.2

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/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ *~
data/bin/stress_reporter CHANGED
@@ -4,31 +4,35 @@ require 'stress_reporter'
4
4
  require 'stress_reporter/checker'
5
5
  require 'stress_reporter/actions/xmanager'
6
6
 
7
- logger = Logger.new("/tmp/check_senato_status_#{Time.now.strftime('%Y.%d.%m')}.log")
7
+ @_logger = Logger.new("/var/log/stress_report/monitor.log")
8
8
  puts "Going to trigger when load average exceeds #{StressReporter::Checker::LIMIT}"
9
9
 
10
10
  class MyTimeoutException < Exception ; end
11
11
 
12
+ # Initial delay between checks
12
13
  @delay = 10.0;
13
14
 
15
+ def log severity, msg
16
+ @_logger.send severity, msg
17
+ puts "#{ severity }: #{ msg }"
18
+ end
19
+
20
+
14
21
  while true do
15
22
  begin
23
+ # Use custom exception so that we can treat it differenty
16
24
  SystemTimer.timeout_after(StressReporter::TIMEOUT, MyTimeoutException) do
17
25
  if StressReporter::Checker.go?
18
- puts "Ecceduto!"
26
+ log(:warn, "Load average of #{ StressReporter::Checker::LIMIT } Exceeded: (#{ StressReporter::Checker.load_average }) - running checks")
19
27
  StressReporter::Actions::Xmanager.report.each {|l|
20
- line = "#{Time.now.strftime('%Y/%d/%m %H:%M:%S')}\t#{StressReporter::Checker.load_average}\t#{ line }"
21
- puts line
22
- logger.info line
28
+ log(:info, l)
23
29
  }
24
30
  end
25
31
  end
26
32
  @delay = @delay - 1.0
27
33
  rescue MyTimeoutException
28
34
  @delay = @delay * 2
29
- msg = "#{Time.now.strftime('%Y/%d/%m %H:%M:%S')} Timeout Error executing checks and reporting, doubling time between checks"
30
- logger.error msg
31
- puts msg
35
+ log(:error, "Timeout Error executing checks and reporting, machine is trashing, doubling time between checks to #{ @delay }")
32
36
  end
33
37
 
34
38
  if @delay > 60.0
@@ -36,6 +40,7 @@ while true do
36
40
  elsif @delay < 5.0
37
41
  @delay = 5.0
38
42
  end
39
- puts "Sleeping for #@delay"
43
+ log(:debug, "Sleeping for #@delay")
40
44
  sleep @delay
41
45
  end
46
+
@@ -1,14 +1,15 @@
1
1
  module StressReporter
2
2
  module Actions
3
- # Azioni da intraprendere per reportare sullo stato di xmanager.
4
- # Richieste correnti, loro url, pid etc.
5
- # TODO: Non assumere che i files xm_last_url_for_{pid} siano in /tmp
3
+ # Actions to report on passenger usage.
4
+ # Current requests, urls, pids
5
+ # TODO: We should not assume that xm_last_url_for_{pid} are in /tmp
6
+ # TODO: Spawning passenger-status is slow
6
7
  class Xmanager
7
8
 
8
9
  CMD = "passenger-status"
9
10
  PID_REGEX = /PID:\s*(\d+)/
10
11
 
11
- # Report torna un array di stringhe
12
+ # Report returns a string array
12
13
  def self.report
13
14
  out = []
14
15
  Xmanager.current_requests.each_pair do |pid, url|
@@ -19,6 +20,7 @@ module StressReporter
19
20
 
20
21
  private
21
22
 
23
+ # Returns array of pids of current passenger processes
22
24
  def self.pids
23
25
  pids = []
24
26
  p = IO.popen(CMD)
@@ -30,13 +32,14 @@ module StressReporter
30
32
  pids
31
33
  end
32
34
 
35
+ # Returns hash { pid => url }
33
36
  def self.current_requests
34
37
  requests = {}
35
38
  pids.each do |pid|
36
39
  if File.exist?("/tmp/xm_last_url_for_#{pid}")
37
40
  p = IO.popen("cat /tmp/xm_last_url_for_#{pid}")
38
41
  while !p.eof?
39
- requests[pid] = p.readpartial(1024)
42
+ requests[pid] = p.readpartial(1024).chomp
40
43
  end
41
44
  end
42
45
  end
@@ -13,7 +13,7 @@ class StressReporter::Checker
13
13
 
14
14
  # Returns true if limit exceeded. Sets @@load_average
15
15
  def self.go?
16
- @@load_average = Sys::CPU.load_avg[0]
16
+ @@load_average = Sys::CPU.load_avg[0].to_f
17
17
  @@load_average > LIMIT
18
18
  end
19
19
 
@@ -1,3 +1,3 @@
1
1
  module StressReporter
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -7,7 +7,7 @@ Gem::Specification.new do |gem|
7
7
  gem.name = "stress_reporter"
8
8
  gem.version = StressReporter::VERSION
9
9
  gem.authors = ["Marcello Colacino", "Luca S.G. de Marinis"]
10
- gem.email = ["loop23@gmail.com"]
10
+ gem.email = ["marcello.colacino@interact.it", "loop23@gmail.com"]
11
11
  gem.description = %q{Daemon that runs and reports on stressful stuff}
12
12
  gem.summary = %q{Was born with specific needs but may be extended to cover more scenarios}
13
13
  gem.homepage = "https://github.com/InteractSpa/stress_reporter"
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.require_paths = ["lib"]
19
19
 
20
20
  gem.add_runtime_dependency 'sys-cpu'
21
- gem.add_runtime_dependency 'passenger'
21
+ # gem.add_runtime_dependency 'passenger'
22
22
  gem.add_runtime_dependency 'SystemTimer'
23
23
 
24
24
  gem.add_development_dependency 'rake'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stress_reporter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Marcello Colacino
@@ -34,7 +34,7 @@ dependencies:
34
34
  type: :runtime
35
35
  - !ruby/object:Gem::Dependency
36
36
  prerelease: false
37
- name: passenger
37
+ name: SystemTimer
38
38
  version_requirements: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
@@ -48,7 +48,7 @@ dependencies:
48
48
  type: :runtime
49
49
  - !ruby/object:Gem::Dependency
50
50
  prerelease: false
51
- name: SystemTimer
51
+ name: rake
52
52
  version_requirements: &id003 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
@@ -59,23 +59,10 @@ dependencies:
59
59
  - 0
60
60
  version: "0"
61
61
  requirement: *id003
62
- type: :runtime
63
- - !ruby/object:Gem::Dependency
64
- prerelease: false
65
- name: rake
66
- version_requirements: &id004 !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
75
- requirement: *id004
76
62
  type: :development
77
63
  description: Daemon that runs and reports on stressful stuff
78
64
  email:
65
+ - marcello.colacino@interact.it
79
66
  - loop23@gmail.com
80
67
  executables:
81
68
  - stress_reporter