moro 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 27b543a627fe46b180156d8b9ab5fbcd7dc8b5d1
4
- data.tar.gz: 30964a2fe875128004040983ce43f1fd4a15bf69
3
+ metadata.gz: 2974d4de962f4ea5717ce2d63b1bdb5fafac8edf
4
+ data.tar.gz: 49ca4d68746d851f02653c2fcf0b809857f565e4
5
5
  SHA512:
6
- metadata.gz: 1643bf530de22a704ebbeb8cbe8312b4abb58bfe480cde00487570a04c41adc74e938308de1f239c082477a829d0b69fe2511227b7b5fc76463d54eea3bbd1c6
7
- data.tar.gz: f5aa96f4f1db895053d33ffd655943fa57e89834a5e3c3f5ea0fae55c53bf9e2383491d79d641ad60ca73be751e21096bf23f66eec47b5f2edfba51ff20b2600
6
+ metadata.gz: 04173525eb6b45a3f9dfdca18087f3f058dc267a8940009714721c3271fe5a55ef13b7436ec9231bb509694e54a1946cb82cf876390b5b358d71aee5f97a2361
7
+ data.tar.gz: cfb94d1b29dd50f66f80abd72e2bef76ef65b5777a318f647be94d8214b60f0a9ac9711fa5f3c64f248abe8da2e5b56ba6dad2e84b7b70ef960c404514a3674c
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  app.log
2
- config.json
2
+ config.json
3
+ *.gem
data/CHANGELOG.md CHANGED
@@ -1,2 +1,5 @@
1
+ ##0.0.3
2
+ * [pr2 handle pid change](https://github.com/sudo-recruit/moro/pull/2)
3
+
1
4
  ##0.0.2
2
5
  * complete basic cli
data/config.example.json CHANGED
@@ -2,5 +2,6 @@
2
2
  "processes": [{
3
3
  "name": "unicorn",
4
4
  "pid": "/Users/ocowchun/projects/github/jobboard/tmp/pids/server.pid"
5
- }]
5
+ }],
6
+ "interval": 30
6
7
  }
data/lib/moro/cli.rb CHANGED
@@ -2,9 +2,10 @@ require 'thor'
2
2
  require 'moro/version'
3
3
  require 'moro/monitor'
4
4
  require 'moro/daemon'
5
+ require 'json'
6
+
5
7
 
6
8
  module Moro
7
- # class << self
8
9
  class CLI< Thor
9
10
  map '--version' => :version
10
11
 
@@ -16,16 +17,34 @@ module Moro
16
17
  desc 'show', 'show process resource usage'
17
18
  option :config,:required => true,:banner=>"config.json"
18
19
  def show
19
- monitor=Monitor.new(options)
20
+ config=get_config(options[:config])
21
+ monitor=Monitor.new(config)
20
22
  monitor.show
21
23
  end
22
24
 
23
25
  desc 'start', 'start monitor process resource usage'
24
26
  option :config,:required => true,:banner=>"config.json"
25
27
  def start
26
- daemon=Daemon.new(options)
28
+ config=get_config(options[:config])
29
+ daemon=Daemon.new(config)
27
30
  daemon.start
28
31
  end
29
32
 
33
+ private
34
+
35
+ def get_config(file)
36
+ begin
37
+ data = ''
38
+ f = File.open(file, "r")
39
+ f.each_line do |line|
40
+ data += line
41
+ end
42
+ JSON.parse(data)
43
+ rescue => err
44
+ puts "#{err}"
45
+ nil
46
+ end
47
+ end
48
+
30
49
  end
31
50
  end
data/lib/moro/daemon.rb CHANGED
@@ -3,10 +3,17 @@ require 'moro/monitor'
3
3
  module Moro
4
4
  class Daemon
5
5
 
6
- def initialize(options)
7
- @monitor=Monitor.new(options)
6
+ def initialize(config)
7
+ @monitor=Monitor.new(config)
8
8
  log_file="app.log"
9
9
  @logger = Logger.new log_file
10
+ puts config
11
+
12
+ if config["interval"]!=nil
13
+ @interval=config["interval"]
14
+ else
15
+ @interval=30
16
+ end
10
17
  end
11
18
 
12
19
  def start()
@@ -24,7 +31,7 @@ module Moro
24
31
  @monitor.show
25
32
  @logger.info "stats memory"
26
33
 
27
- sleep(10)
34
+ sleep(@interval)
28
35
  end
29
36
  end
30
37
  end
data/lib/moro/monitor.rb CHANGED
@@ -1,15 +1,15 @@
1
1
  require "logger"
2
- require 'json'
3
2
  require "get_process_mem"
3
+ require "moro/process"
4
4
 
5
5
  module Moro
6
6
  class Monitor
7
7
 
8
- def initialize(options)
8
+ def initialize(config)
9
9
  log_file="app.log"
10
- @config=options[:config]
10
+ @config=config
11
11
  @logger = Logger.new log_file
12
- @logger.info "momo show"
12
+ @logger.info "moro show"
13
13
  @processes=get_processes
14
14
  end
15
15
 
@@ -25,43 +25,15 @@ module Moro
25
25
  def monit
26
26
  data=[]
27
27
  @processes.each do |p|
28
- mem = GetProcessMem.new(p[:pid]).mb
29
- data<<{name:p[:name],memory:mem}
28
+ data << p.usage
30
29
  end
31
30
  data
32
31
  end
33
32
 
34
- def get_config
35
- begin
36
- data = ''
37
- f = File.open(@config, "r")
38
- f.each_line do |line|
39
- data += line
40
- end
41
- JSON.parse(data)
42
- rescue => err
43
- @logger.error "Exception: #{err}"
44
- puts "#{err}"
45
- nil
46
- end
47
- end
48
-
49
- def get_pid(filename)
50
- begin
51
- f = File.open(filename, "r")
52
- line = f.gets
53
- rescue => err
54
- @logger.error "Exception: #{err}"
55
- nil
56
- end
57
- end
58
-
59
33
  def get_processes()
60
- config=get_config()
61
34
  processes=[]
62
- config["processes"].each do|p|
63
- pid=get_pid(p["pid"])
64
- processes<<{name:p["name"],pid:pid} if pid!=nil
35
+ @config["processes"].each do|p|
36
+ processes<<Process.new({name:p["name"],file:p["pid"]})
65
37
  end
66
38
  processes
67
39
  end
@@ -0,0 +1,49 @@
1
+ require "get_process_mem"
2
+
3
+ module Moro
4
+ class Process
5
+ attr_reader :name,:pid,:file
6
+
7
+ def initialize(options)
8
+ log_file="app.log"
9
+ @logger = Logger.new log_file
10
+ @name=options[:name]
11
+ @file=options[:file]
12
+ update_pid
13
+ end
14
+
15
+ def usage
16
+ if pid!=nil
17
+ pm=GetProcessMem.new(pid)
18
+ #pid need to change
19
+ if pm.bytes==0
20
+ update_pid
21
+ end
22
+ pm=GetProcessMem.new(pid)
23
+ mem = pm.mb
24
+ {name:name,memory:mem}
25
+ else
26
+ update_pid
27
+ {name:name,memory:0.0}
28
+ end
29
+ end
30
+
31
+
32
+ private
33
+
34
+ def get_pid(filename)
35
+ begin
36
+ f = File.open(filename, "r")
37
+ line = f.gets
38
+ rescue => err
39
+ @logger.error "Exception: #{err}"
40
+ nil
41
+ end
42
+ end
43
+
44
+ def update_pid
45
+ @pid=get_pid(@file)
46
+ end
47
+
48
+ end
49
+ end
data/moro.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'moro'
3
- s.version = '0.0.2'
3
+ s.version = '0.0.3'
4
4
  s.date = '2016-02-24'
5
5
  s.summary = "moro is a simple daemon to monitor process memory usage"
6
6
  s.description = "moro is a simple daemon to monitor process memory usage"
data/script/build ADDED
@@ -0,0 +1,3 @@
1
+ #!/bin/sh
2
+
3
+ gem build moro.gemspec
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ocowchun
@@ -50,14 +50,15 @@ files:
50
50
  - Gemfile
51
51
  - Gemfile.lock
52
52
  - README.md
53
- - app.rb
54
53
  - bin/moro
55
54
  - config.example.json
56
55
  - lib/moro/cli.rb
57
56
  - lib/moro/daemon.rb
58
57
  - lib/moro/monitor.rb
58
+ - lib/moro/process.rb
59
59
  - lib/moro/version.rb
60
60
  - moro.gemspec
61
+ - script/build
61
62
  homepage: https://github.com/sudo-recruit/moro
62
63
  licenses:
63
64
  - MIT
data/app.rb DELETED
@@ -1,58 +0,0 @@
1
- require "logger"
2
- require "get_process_mem"
3
- require 'json'
4
-
5
- @log_file="app.log"
6
- @logger = Logger.new @log_file
7
-
8
- def get_pid(filename)
9
- begin
10
- f = File.open(filename, "r")
11
- line = f.gets
12
- rescue => err
13
- @logger.error "Exception: #{err}"
14
- nil
15
- end
16
- end
17
-
18
- def get_config()
19
- begin
20
- data = ''
21
- f = File.open("config.json", "r")
22
- f.each_line do |line|
23
- data += line
24
- end
25
- JSON.parse(data)
26
- rescue => err
27
- @logger.error "Exception: #{err}"
28
- nil
29
- end
30
- end
31
-
32
- def get_processes()
33
- config=get_config()
34
- processes=[]
35
- config["processes"].each do|p|
36
- pid=get_pid(p["pid"])
37
- processes<<{name:p["name"],pid:pid} if pid!=nil
38
- end
39
- processes
40
- end
41
-
42
- def monit_all()
43
- processes=get_processes()
44
- while true
45
- processes.each do |p|
46
- puts mem = GetProcessMem.new(p[:pid]).inspect
47
- end
48
- @logger.info "stats memory"
49
-
50
- sleep(10)
51
- end
52
- end
53
-
54
- monit_all()
55
-
56
- at_exit do
57
- @logger.info "momo stop"
58
- end