moro 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 27b543a627fe46b180156d8b9ab5fbcd7dc8b5d1
4
+ data.tar.gz: 30964a2fe875128004040983ce43f1fd4a15bf69
5
+ SHA512:
6
+ metadata.gz: 1643bf530de22a704ebbeb8cbe8312b4abb58bfe480cde00487570a04c41adc74e938308de1f239c082477a829d0b69fe2511227b7b5fc76463d54eea3bbd1c6
7
+ data.tar.gz: f5aa96f4f1db895053d33ffd655943fa57e89834a5e3c3f5ea0fae55c53bf9e2383491d79d641ad60ca73be751e21096bf23f66eec47b5f2edfba51ff20b2600
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ app.log
2
+ config.json
data/CHANGELOG.md ADDED
@@ -0,0 +1,2 @@
1
+ ##0.0.2
2
+ * complete basic cli
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,21 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ moro (0.0.2)
5
+ get_process_mem (~> 0.2.0)
6
+ thor (~> 0.18)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ get_process_mem (0.2.0)
12
+ thor (0.19.1)
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ moro!
19
+
20
+ BUNDLED WITH
21
+ 1.10.6
data/README.md ADDED
@@ -0,0 +1,15 @@
1
+ #moro
2
+ >monitor process memory usage
3
+
4
+ ##Add `config.json` to project directory
5
+ ###example
6
+ ```json
7
+ {
8
+ "processes": [{
9
+ "name": "my_awesome_server",
10
+ "pid": "/tmp/pids/server.pid"
11
+ }]
12
+ }
13
+ ```
14
+
15
+ MIT
data/app.rb ADDED
@@ -0,0 +1,58 @@
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
data/bin/moro ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+
4
+ lib_dir = File.expand_path(File.join(File.dirname(__FILE__),'..','lib'))
5
+ $LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
6
+
7
+ require 'moro/cli'
8
+
9
+ Moro::CLI.start(ARGV)
@@ -0,0 +1,6 @@
1
+ {
2
+ "processes": [{
3
+ "name": "unicorn",
4
+ "pid": "/Users/ocowchun/projects/github/jobboard/tmp/pids/server.pid"
5
+ }]
6
+ }
data/lib/moro/cli.rb ADDED
@@ -0,0 +1,31 @@
1
+ require 'thor'
2
+ require 'moro/version'
3
+ require 'moro/monitor'
4
+ require 'moro/daemon'
5
+
6
+ module Moro
7
+ # class << self
8
+ class CLI< Thor
9
+ map '--version' => :version
10
+
11
+ desc 'version', 'Prints the moro version'
12
+ def version
13
+ puts "#{File.basename($0)} #{VERSION}"
14
+ end
15
+
16
+ desc 'show', 'show process resource usage'
17
+ option :config,:required => true,:banner=>"config.json"
18
+ def show
19
+ monitor=Monitor.new(options)
20
+ monitor.show
21
+ end
22
+
23
+ desc 'start', 'start monitor process resource usage'
24
+ option :config,:required => true,:banner=>"config.json"
25
+ def start
26
+ daemon=Daemon.new(options)
27
+ daemon.start
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ require 'moro/monitor'
2
+
3
+ module Moro
4
+ class Daemon
5
+
6
+ def initialize(options)
7
+ @monitor=Monitor.new(options)
8
+ log_file="app.log"
9
+ @logger = Logger.new log_file
10
+ end
11
+
12
+ def start()
13
+ start_message="start moro daemon"
14
+ stop_message="stop moro daemon"
15
+ puts start_message
16
+ @logger.info(start_message)
17
+
18
+ at_exit do
19
+ puts stop_message
20
+ @logger.info(stop_message)
21
+ end
22
+
23
+ while true
24
+ @monitor.show
25
+ @logger.info "stats memory"
26
+
27
+ sleep(10)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,69 @@
1
+ require "logger"
2
+ require 'json'
3
+ require "get_process_mem"
4
+
5
+ module Moro
6
+ class Monitor
7
+
8
+ def initialize(options)
9
+ log_file="app.log"
10
+ @config=options[:config]
11
+ @logger = Logger.new log_file
12
+ @logger.info "momo show"
13
+ @processes=get_processes
14
+ end
15
+
16
+ def show
17
+ data=monit
18
+ data.each do|d|
19
+ puts "#{d[:name]}:#{d[:memory]}"
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def monit
26
+ data=[]
27
+ @processes.each do |p|
28
+ mem = GetProcessMem.new(p[:pid]).mb
29
+ data<<{name:p[:name],memory:mem}
30
+ end
31
+ data
32
+ end
33
+
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
+ def get_processes()
60
+ config=get_config()
61
+ processes=[]
62
+ config["processes"].each do|p|
63
+ pid=get_pid(p["pid"])
64
+ processes<<{name:p["name"],pid:pid} if pid!=nil
65
+ end
66
+ processes
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,3 @@
1
+ module Moro
2
+ VERSION = '0.0.1'
3
+ end
data/moro.gemspec ADDED
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'moro'
3
+ s.version = '0.0.2'
4
+ s.date = '2016-02-24'
5
+ s.summary = "moro is a simple daemon to monitor process memory usage"
6
+ s.description = "moro is a simple daemon to monitor process memory usage"
7
+ s.authors = ["ocowchun"]
8
+ s.email = 'ben.yeh@sudo.com.tw'
9
+ s.executables = ["moro"]
10
+ s.files = `git ls-files`.split($/)
11
+ s.homepage =
12
+ 'https://github.com/sudo-recruit/moro'
13
+ s.license = 'MIT'
14
+
15
+ s.add_dependency('get_process_mem',["~> 0.2.0"])
16
+ s.add_dependency('thor',["~> 0.18"])
17
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: moro
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - ocowchun
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: get_process_mem
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.18'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.18'
41
+ description: moro is a simple daemon to monitor process memory usage
42
+ email: ben.yeh@sudo.com.tw
43
+ executables:
44
+ - moro
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - CHANGELOG.md
50
+ - Gemfile
51
+ - Gemfile.lock
52
+ - README.md
53
+ - app.rb
54
+ - bin/moro
55
+ - config.example.json
56
+ - lib/moro/cli.rb
57
+ - lib/moro/daemon.rb
58
+ - lib/moro/monitor.rb
59
+ - lib/moro/version.rb
60
+ - moro.gemspec
61
+ homepage: https://github.com/sudo-recruit/moro
62
+ licenses:
63
+ - MIT
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project:
81
+ rubygems_version: 2.4.8
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: moro is a simple daemon to monitor process memory usage
85
+ test_files: []