moro 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: []