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 +7 -0
- data/.gitignore +2 -0
- data/CHANGELOG.md +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +21 -0
- data/README.md +15 -0
- data/app.rb +58 -0
- data/bin/moro +9 -0
- data/config.example.json +6 -0
- data/lib/moro/cli.rb +31 -0
- data/lib/moro/daemon.rb +31 -0
- data/lib/moro/monitor.rb +69 -0
- data/lib/moro/version.rb +3 -0
- data/moro.gemspec +17 -0
- metadata +85 -0
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
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
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
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
data/config.example.json
ADDED
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
|
data/lib/moro/daemon.rb
ADDED
@@ -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
|
data/lib/moro/monitor.rb
ADDED
@@ -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
|
data/lib/moro/version.rb
ADDED
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: []
|