memosig 0.0.0 → 0.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 438983e4163005bbfee58c6053e31878a1954f5a
4
- data.tar.gz: 6d878445a38f1b9e92e5af79da64f54082007ff6
3
+ metadata.gz: 4bc87039a61f8c2c0bb212eaf57f1b5a5927f1ea
4
+ data.tar.gz: 5fd57c20fcd76c16dcfbc8802cd5fcd4885996b9
5
5
  SHA512:
6
- metadata.gz: 77efd84b4e23339f986a3068307136595014ebc9a9910689573c4c775df9a26aa1f5428cfe2e79dbdb5574613cbd84589c98042542accd6c438da7fd0c46f165
7
- data.tar.gz: c360f93029092470d2cb5e63e179b17b54b17cfde8c4546636c3b16ca7f4745619fb74b47ea04ed9354524b839302ca7e4e3f647f4626880012e281f810e5a40
6
+ metadata.gz: ae5dca2ffff020a990897f50950caee7fb004bc38e8a3610704232c4f2890206b5193c918b662413421ad26e6db459b2b6bcda6d41dacdc6bfb880309310d8cb
7
+ data.tar.gz: 37929e6cc0778ee32d0dc2d82f3ee4acea5d67c93f72357127fbdbbbb277ef2ed7c3153e286701af2431469ff342bdb0df559ed46c8070d8b3104d16ebf9ea38
data/Rakefile CHANGED
@@ -11,13 +11,20 @@ GemHadar do
11
11
  description 'This excecutable supervises the memory usage of processes, '\
12
12
  'and sends a configurable signal to them if a configured limit '\
13
13
  'is exceeded.'
14
- test_dir 'tests'
14
+ test_dir 'spec'
15
15
  ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', 'coverage', '.rvmrc',
16
16
  '.AppleDouble'
17
17
  readme 'README.md'
18
18
  title "#{name.camelize}"
19
+ licenses << 'Apache-2.0'
20
+
21
+ executables << 'memosig'
19
22
 
20
23
  dependency 'tins', '~>1.0'
21
24
  dependency 'complex_config'
22
25
  development_dependency 'rake'
26
+ development_dependency 'rspec'
27
+ development_dependency 'simplecov'
23
28
  end
29
+
30
+ task :default => :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.0.1
data/lib/memosig/app.rb CHANGED
@@ -1,11 +1,17 @@
1
1
  require 'complex_config'
2
2
  require 'memosig/proc_stat'
3
+ require 'memosig/output'
4
+ require 'memosig/matcher'
3
5
 
4
6
  class Memosig::App
7
+ include Memosig::Output
8
+
5
9
  def initialize(config: nil)
6
10
  @config = ComplexConfig::Provider.config(config)
7
11
  end
8
12
 
13
+ attr_reader :config
14
+
9
15
  def run
10
16
  check_memory
11
17
  sleep (@config.wait_period || 300)
@@ -13,41 +19,11 @@ class Memosig::App
13
19
 
14
20
  private
15
21
 
16
- def process_prefix
17
- "#{File.basename($0)} pid=#$$"
18
- end
19
-
20
- def output(message)
21
- STDOUT.puts "#{process_prefix} #{message}"
22
- STDOUT.flush
23
- end
24
-
25
- def error(message)
26
- STDERR.puts "#{process_prefix} #{message}"
27
- STDERR.flush
28
- end
29
-
30
22
  def check_memory_for(pattern, config, processes)
31
- matched = false
32
- for process in processes
33
- if process.command =~ pattern
34
- if process.rss > config['rss_max']
35
- output "restarting process pid=#{process.pid} "\
36
- "pattern=#{pattern.source.inspect} "\
37
- "rss #{process.rss}>#{config['rss_max']}"
38
- Process.kill config['signal'], process.pid
39
- else
40
- output "no action on process pid=#{process.pid} "\
41
- "pattern=#{pattern.source.inspect} "\
42
- "rss #{process.rss}<=#{config['rss_max']}"
43
- end
44
- matched = true
45
- end
46
- end
47
-
48
- unless matched
49
- error "pattern #{pattern.source.inspect} didn't match any processes"
50
- end
23
+ processes.any? do |process|
24
+ Memosig::Matcher.new(pattern, config).match? process
25
+ end and return
26
+ error "pattern #{pattern.source.inspect} didn't match any processes"
51
27
  end
52
28
 
53
29
  def check_memory
@@ -0,0 +1,25 @@
1
+ require 'memosig/output'
2
+
3
+ class ::Memosig::Matcher
4
+ include Memosig::Output
5
+
6
+ def initialize(pattern, config)
7
+ @pattern, @config = pattern, config
8
+ end
9
+
10
+ def match?(process)
11
+ if process.command =~ @pattern
12
+ if process.rss > @config.rss_max
13
+ output "restarting process pid=#{process.pid} "\
14
+ "pattern=#{@pattern.source.inspect} "\
15
+ "rss #{process.rss}>#{@config.rss_max}"
16
+ Process.kill @config.signal, process.pid
17
+ else
18
+ output "no action on process pid=#{process.pid} "\
19
+ "pattern=#{@pattern.source.inspect} "\
20
+ "rss #{process.rss}<=#{@config.rss_max}"
21
+ end
22
+ matched = true
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ module Memosig::Output
2
+ def process_prefix
3
+ "#{File.basename($0)} pid=#$$"
4
+ end
5
+
6
+ def output(message)
7
+ STDOUT.puts "#{process_prefix} #{message}"
8
+ STDOUT.flush
9
+ end
10
+
11
+ def error(message)
12
+ STDERR.puts "#{process_prefix} #{message}"
13
+ STDERR.flush
14
+ end
15
+ end
@@ -1,6 +1,6 @@
1
1
  module Memosig
2
2
  # Memosig version
3
- VERSION = '0.0.0'
3
+ VERSION = '0.0.1'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
data/memosig.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: memosig 0.0.0 ruby lib
2
+ # stub: memosig 0.0.1 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "memosig"
6
- s.version = "0.0.0"
6
+ s.version = "0.0.1"
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib"]
@@ -11,12 +11,15 @@ Gem::Specification.new do |s|
11
11
  s.date = "2015-03-13"
12
12
  s.description = "This excecutable supervises the memory usage of processes, and sends a configurable signal to them if a configured limit is exceeded."
13
13
  s.email = "flori@ping.de"
14
- s.extra_rdoc_files = ["README.md", "lib/memosig.rb", "lib/memosig/app.rb", "lib/memosig/proc_stat.rb", "lib/memosig/version.rb"]
15
- s.files = [".gitignore", "COPYING", "Gemfile", "README.md", "Rakefile", "VERSION", "bin/memosig", "lib/memosig.rb", "lib/memosig/app.rb", "lib/memosig/proc_stat.rb", "lib/memosig/version.rb", "memosig.gemspec", "spec/assets/memosig.yml", "spec/spec_helper.rb"]
14
+ s.executables = ["memosig"]
15
+ s.extra_rdoc_files = ["README.md", "lib/memosig.rb", "lib/memosig/app.rb", "lib/memosig/matcher.rb", "lib/memosig/output.rb", "lib/memosig/proc_stat.rb", "lib/memosig/version.rb"]
16
+ s.files = [".gitignore", "COPYING", "Gemfile", "README.md", "Rakefile", "VERSION", "bin/memosig", "lib/memosig.rb", "lib/memosig/app.rb", "lib/memosig/matcher.rb", "lib/memosig/output.rb", "lib/memosig/proc_stat.rb", "lib/memosig/version.rb", "memosig.gemspec", "spec/assets/memosig.yml", "spec/memosig/app_spec.rb", "spec/memosig/proc_stat_spec.rb", "spec/spec_helper.rb"]
16
17
  s.homepage = "http://flori.github.com/memosig"
18
+ s.licenses = ["Apache-2.0"]
17
19
  s.rdoc_options = ["--title", "Memosig", "--main", "README.md"]
18
20
  s.rubygems_version = "2.4.5"
19
21
  s.summary = "Executable that supervises memory use of processes and signals them"
22
+ s.test_files = ["spec/memosig/app_spec.rb", "spec/memosig/proc_stat_spec.rb", "spec/spec_helper.rb"]
20
23
 
21
24
  if s.respond_to? :specification_version then
22
25
  s.specification_version = 4
@@ -24,17 +27,23 @@ Gem::Specification.new do |s|
24
27
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
25
28
  s.add_development_dependency(%q<gem_hadar>, ["~> 1.0.0"])
26
29
  s.add_development_dependency(%q<rake>, [">= 0"])
30
+ s.add_development_dependency(%q<rspec>, [">= 0"])
31
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
27
32
  s.add_runtime_dependency(%q<tins>, ["~> 1.0"])
28
33
  s.add_runtime_dependency(%q<complex_config>, [">= 0"])
29
34
  else
30
35
  s.add_dependency(%q<gem_hadar>, ["~> 1.0.0"])
31
36
  s.add_dependency(%q<rake>, [">= 0"])
37
+ s.add_dependency(%q<rspec>, [">= 0"])
38
+ s.add_dependency(%q<simplecov>, [">= 0"])
32
39
  s.add_dependency(%q<tins>, ["~> 1.0"])
33
40
  s.add_dependency(%q<complex_config>, [">= 0"])
34
41
  end
35
42
  else
36
43
  s.add_dependency(%q<gem_hadar>, ["~> 1.0.0"])
37
44
  s.add_dependency(%q<rake>, [">= 0"])
45
+ s.add_dependency(%q<rspec>, [">= 0"])
46
+ s.add_dependency(%q<simplecov>, [">= 0"])
38
47
  s.add_dependency(%q<tins>, ["~> 1.0"])
39
48
  s.add_dependency(%q<complex_config>, [">= 0"])
40
49
  end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Memosig::App do
4
+ let :config do
5
+ 'spec/assets/memosig.yml'
6
+ end
7
+
8
+ let :app do
9
+ Memosig::App.new(config: config)
10
+ end
11
+
12
+ it 'loads config' do
13
+ expect(app.config).to be_a ComplexConfig::Settings
14
+ end
15
+
16
+ it 'checks the memory and sleeps if run' do
17
+ expect(app).to receive(:check_memory)
18
+ expect(app).to receive(:sleep)
19
+ app.run
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Memosig::ProcStat do
4
+ let :processes do
5
+ Memosig::ProcStat.all
6
+ end
7
+
8
+ it 'gathers all process statistics' do
9
+ expect(processes.size).to be > 0
10
+ end
11
+
12
+ it 'has a PID per line' do
13
+ expect(processes.first.pid).to be_a Integer
14
+ expect(processes.first.pid).to be > 0
15
+ end
16
+
17
+ it 'has a RSS per line' do
18
+ expect(processes.first.rss).to be_a Integer
19
+ expect(processes.first.rss).to be > 0
20
+ end
21
+
22
+ it 'has a command per line' do
23
+ expect(processes.first.command).to be_a String
24
+ expect(processes.first.command.size).to be > 0
25
+ end
26
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,12 @@
1
+ if ENV['START_SIMPLECOV'].to_i == 1
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter "#{File.basename(File.dirname(__FILE__))}/"
5
+ end
6
+ end
7
+
1
8
  require 'rspec'
9
+ require 'memosig'
2
10
 
3
11
  def config_dir
4
12
  Pathname.new(__FILE__).dirname + "config"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memosig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: tins
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -69,12 +97,15 @@ dependencies:
69
97
  description: This excecutable supervises the memory usage of processes, and sends
70
98
  a configurable signal to them if a configured limit is exceeded.
71
99
  email: flori@ping.de
72
- executables: []
100
+ executables:
101
+ - memosig
73
102
  extensions: []
74
103
  extra_rdoc_files:
75
104
  - README.md
76
105
  - lib/memosig.rb
77
106
  - lib/memosig/app.rb
107
+ - lib/memosig/matcher.rb
108
+ - lib/memosig/output.rb
78
109
  - lib/memosig/proc_stat.rb
79
110
  - lib/memosig/version.rb
80
111
  files:
@@ -87,13 +118,18 @@ files:
87
118
  - bin/memosig
88
119
  - lib/memosig.rb
89
120
  - lib/memosig/app.rb
121
+ - lib/memosig/matcher.rb
122
+ - lib/memosig/output.rb
90
123
  - lib/memosig/proc_stat.rb
91
124
  - lib/memosig/version.rb
92
125
  - memosig.gemspec
93
126
  - spec/assets/memosig.yml
127
+ - spec/memosig/app_spec.rb
128
+ - spec/memosig/proc_stat_spec.rb
94
129
  - spec/spec_helper.rb
95
130
  homepage: http://flori.github.com/memosig
96
- licenses: []
131
+ licenses:
132
+ - Apache-2.0
97
133
  metadata: {}
98
134
  post_install_message:
99
135
  rdoc_options:
@@ -119,4 +155,7 @@ rubygems_version: 2.4.5
119
155
  signing_key:
120
156
  specification_version: 4
121
157
  summary: Executable that supervises memory use of processes and signals them
122
- test_files: []
158
+ test_files:
159
+ - spec/memosig/app_spec.rb
160
+ - spec/memosig/proc_stat_spec.rb
161
+ - spec/spec_helper.rb