grid_runner 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/Gemfile +4 -0
- data/Gemfile.lock +57 -0
- data/Procfile +9 -0
- data/README.md +32 -0
- data/Rakefile +44 -0
- data/bin/grid_runner +81 -0
- data/grid_runner-0.0.1.gem +0 -0
- data/grid_runner.gemspec +19 -0
- data/grid_runner.rdoc +5 -0
- data/lib/grid_runner.rb +3 -0
- data/lib/grid_runner/applications.rb +85 -0
- data/lib/grid_runner/colors.rb +9 -0
- data/lib/grid_runner/version.rb +3 -0
- data/test.rb +2 -0
- data/test/default_test.rb +14 -0
- data/test/test_helper.rb +9 -0
- metadata +116 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 65264a594e4b9b55c5d803407aa27f0de261eb39
|
4
|
+
data.tar.gz: dc9014e259f1f928367306505decdca62e2f2db6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bb2ebd711783abf55e3a15afb6c7c8a77b300787b828c9f13bd27955b25be49143753e0e4d8ab27e8a1e42e10efc749d4bf0f0a15c0d3e8dda2034d41ccfaab0
|
7
|
+
data.tar.gz: 43069cd586175de62d9d3ccc4bb157db399ade036bcfb3ba65eb358281800b2fd4ef1a27accfa0828a1efd43e95ff6f031501587385dfab840e9fca7df93e04a
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
grid_runner (0.0.1)
|
5
|
+
gli (= 2.13.4)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
aruba (0.11.2)
|
11
|
+
childprocess (~> 0.5.6)
|
12
|
+
contracts (~> 0.9)
|
13
|
+
cucumber (>= 1.3.19)
|
14
|
+
event-bus (~> 0.2)
|
15
|
+
ffi (~> 1.9.10)
|
16
|
+
rspec-expectations (>= 2.99)
|
17
|
+
thor (~> 0.19)
|
18
|
+
builder (3.2.2)
|
19
|
+
childprocess (0.5.8)
|
20
|
+
ffi (~> 1.0, >= 1.0.11)
|
21
|
+
contracts (0.12.0)
|
22
|
+
cucumber (2.1.0)
|
23
|
+
builder (>= 2.1.2)
|
24
|
+
cucumber-core (~> 1.3.0)
|
25
|
+
diff-lcs (>= 1.1.3)
|
26
|
+
gherkin3 (~> 3.1.0)
|
27
|
+
multi_json (>= 1.7.5, < 2.0)
|
28
|
+
multi_test (>= 0.1.2)
|
29
|
+
cucumber-core (1.3.0)
|
30
|
+
gherkin3 (~> 3.1.0)
|
31
|
+
diff-lcs (1.2.5)
|
32
|
+
event-bus (0.2.1)
|
33
|
+
ffi (1.9.10)
|
34
|
+
gherkin3 (3.1.2)
|
35
|
+
gli (2.13.4)
|
36
|
+
json (1.8.3)
|
37
|
+
multi_json (1.11.2)
|
38
|
+
multi_test (0.1.2)
|
39
|
+
rainbow (2.0.0)
|
40
|
+
rake (10.4.2)
|
41
|
+
rdoc (4.2.0)
|
42
|
+
json (~> 1.4)
|
43
|
+
rspec-expectations (3.4.0)
|
44
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
45
|
+
rspec-support (~> 3.4.0)
|
46
|
+
rspec-support (3.4.1)
|
47
|
+
thor (0.19.1)
|
48
|
+
|
49
|
+
PLATFORMS
|
50
|
+
ruby
|
51
|
+
|
52
|
+
DEPENDENCIES
|
53
|
+
aruba
|
54
|
+
grid_runner!
|
55
|
+
rainbow
|
56
|
+
rake
|
57
|
+
rdoc
|
data/Procfile
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
elasticsearch: cd elasticsearch; ./dev-start.sh
|
2
|
+
media-api: sbt "project media-api" "~ run 9001"
|
3
|
+
thrall: sbt "project thrall" "~ run 9002"
|
4
|
+
image-loader: sbt "project image-loader" "~ run 9003"
|
5
|
+
ftp-watcher: sbt -Dftp.active=true "project ftp-watcher" "~ run 9004"
|
6
|
+
kahuna: sbt "project kahuna" "~ run 9005"
|
7
|
+
cropper: sbt "project cropper" "~ run 9006"
|
8
|
+
metadata-editor: sbt "project metadata-editor" "~ run 9007"
|
9
|
+
collections: sbt "project collections" "~ run 9010"
|
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
Grid Runner
|
2
|
+
===========
|
3
|
+
|
4
|
+
A command line tool for running Grid microservices
|
5
|
+
|
6
|
+
Install
|
7
|
+
-------
|
8
|
+
|
9
|
+
``` gem install grid_runner ```
|
10
|
+
|
11
|
+
|
12
|
+
Requirements
|
13
|
+
------------
|
14
|
+
|
15
|
+
grid_runner uses a Procfile at the root of your project similar to [Foreman](https://github.com/ddollar/foreman)
|
16
|
+
|
17
|
+
|
18
|
+
Commands
|
19
|
+
--------
|
20
|
+
|
21
|
+
* ``` grid_runner list ```
|
22
|
+
* ``` grid_runner run <APP_NAME || 'all' > ```
|
23
|
+
* ``` grid_runner kill <APP_NAME || 'all' > ```
|
24
|
+
* ``` grid_runner restart <APP_NAME || 'all' > ```
|
25
|
+
|
26
|
+
|
27
|
+
Logs
|
28
|
+
----
|
29
|
+
|
30
|
+
Currently grid_runner will put all logs in ./logs/APPNAME.log
|
31
|
+
|
32
|
+
* To watch all logs I use ``` tail -f logs/* ```
|
data/Rakefile
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'rake/clean'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'rubygems/package_task'
|
4
|
+
require 'rdoc/task'
|
5
|
+
require 'cucumber'
|
6
|
+
require 'cucumber/rake/task'
|
7
|
+
Rake::RDocTask.new do |rd|
|
8
|
+
rd.main = "README.rdoc"
|
9
|
+
rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
|
10
|
+
rd.title = 'Your application title'
|
11
|
+
end
|
12
|
+
|
13
|
+
spec = eval(File.read('grid_runner.gemspec'))
|
14
|
+
|
15
|
+
Gem::PackageTask.new(spec) do |pkg|
|
16
|
+
end
|
17
|
+
CUKE_RESULTS = 'results.html'
|
18
|
+
CLEAN << CUKE_RESULTS
|
19
|
+
desc 'Run features'
|
20
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
21
|
+
opts = "features --format html -o #{CUKE_RESULTS} --format progress -x"
|
22
|
+
opts += " --tags #{ENV['TAGS']}" if ENV['TAGS']
|
23
|
+
t.cucumber_opts = opts
|
24
|
+
t.fork = false
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'Run features tagged as work-in-progress (@wip)'
|
28
|
+
Cucumber::Rake::Task.new('features:wip') do |t|
|
29
|
+
tag_opts = ' --tags ~@pending'
|
30
|
+
tag_opts = ' --tags @wip'
|
31
|
+
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty -x -s#{tag_opts}"
|
32
|
+
t.fork = false
|
33
|
+
end
|
34
|
+
|
35
|
+
task :cucumber => :features
|
36
|
+
task 'cucumber:wip' => 'features:wip'
|
37
|
+
task :wip => 'features:wip'
|
38
|
+
require 'rake/testtask'
|
39
|
+
Rake::TestTask.new do |t|
|
40
|
+
t.libs << "test"
|
41
|
+
t.test_files = FileList['test/*_test.rb']
|
42
|
+
end
|
43
|
+
|
44
|
+
task :default => [:test,:features]
|
data/bin/grid_runner
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'gli'
|
3
|
+
require 'rainbow'
|
4
|
+
require 'grid_runner'
|
5
|
+
|
6
|
+
include GLI::App
|
7
|
+
|
8
|
+
program_desc 'A simple CLI to manage The Grid sub processes'
|
9
|
+
|
10
|
+
subcommand_option_handling :normal
|
11
|
+
arguments :strict
|
12
|
+
|
13
|
+
|
14
|
+
def apps_from_args(args)
|
15
|
+
return App.all if args.first == "all"
|
16
|
+
return App.find(args) if args.first
|
17
|
+
end
|
18
|
+
|
19
|
+
desc 'Describe run'
|
20
|
+
arg_name 'Describe arguments to run here'
|
21
|
+
command :run do |c|
|
22
|
+
c.desc 'Describe a flag to run'
|
23
|
+
c.default_value 'default'
|
24
|
+
c.flag :f
|
25
|
+
c.action do |global_options,options,args|
|
26
|
+
apps_from_args(args).each do |app|
|
27
|
+
if app.status == :running
|
28
|
+
puts Rainbow("#{app.name} already running!").red
|
29
|
+
puts
|
30
|
+
else
|
31
|
+
app.run
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
desc 'Describe restart'
|
38
|
+
arg_name "app names separated by a SPACE or 'all'"
|
39
|
+
command :restart do |c|
|
40
|
+
c.action do |global_options,options,args|
|
41
|
+
colors = COLORS.shuffle
|
42
|
+
apps_from_args(args).each do |app|
|
43
|
+
begin
|
44
|
+
if app.status == :running
|
45
|
+
Process.kill("HUP", app.pid.to_i)
|
46
|
+
puts "kilt #{app.name}"
|
47
|
+
end
|
48
|
+
app.display
|
49
|
+
ensure
|
50
|
+
app.run
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
puts "restart command ran"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
desc 'Describe list here'
|
59
|
+
arg_name 'Describe arguments to list here'
|
60
|
+
command :list do |c|
|
61
|
+
c.action do |global_options,options,args|
|
62
|
+
App.all.each_with_index do |app, ix|
|
63
|
+
app.display(ix)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
desc 'kills selected app'
|
69
|
+
arg_name 'provide an app name'
|
70
|
+
command :kill do |c|
|
71
|
+
c.action do |global_options,options,args|
|
72
|
+
apps_from_args(args).each do |app|
|
73
|
+
puts "No app with that name found" and return unless app
|
74
|
+
app.display
|
75
|
+
app.kill!
|
76
|
+
end
|
77
|
+
puts
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
exit run(ARGV)
|
Binary file
|
data/grid_runner.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Ensure we require the local version and not one we might have installed already
|
2
|
+
require File.join([File.dirname(__FILE__),'lib','grid_runner','version.rb'])
|
3
|
+
spec = Gem::Specification.new do |s|
|
4
|
+
s.name = 'grid_runner'
|
5
|
+
s.version = GridRunner::VERSION
|
6
|
+
s.author = 'NickyPStraightStylinOnEm'
|
7
|
+
s.email = 'np1249a@gmail.com'
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.summary = 'A lil appy to run them small apz'
|
10
|
+
s.files = `git ls-files`.split("
|
11
|
+
")
|
12
|
+
s.require_paths << 'lib'
|
13
|
+
s.bindir = 'bin'
|
14
|
+
s.executables << 'grid_runner'
|
15
|
+
s.add_development_dependency('rake')
|
16
|
+
s.add_development_dependency('rdoc')
|
17
|
+
s.add_development_dependency('aruba')
|
18
|
+
s.add_runtime_dependency('gli','2.13.4')
|
19
|
+
end
|
data/grid_runner.rdoc
ADDED
data/lib/grid_runner.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
3
|
+
class App
|
4
|
+
PROCFILE = File.open(Dir.pwd + "/Procfile")
|
5
|
+
|
6
|
+
attr_reader :name, :command, :status, :pid
|
7
|
+
|
8
|
+
def initialize(name, command, status, pid)
|
9
|
+
@name = name
|
10
|
+
@command = command
|
11
|
+
@status = status
|
12
|
+
@pid = pid
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.all
|
16
|
+
PROCFILE.map do |line|
|
17
|
+
App.from_procfile(line)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.find(args)
|
22
|
+
App.all.select { |app| args.include?( app.name ) }
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.from_procfile(line)
|
26
|
+
name = line.split(":")[0]
|
27
|
+
cmd = line.split(":")[1]
|
28
|
+
ps_out = ps_out(name)
|
29
|
+
status = ps_out[:status]
|
30
|
+
pid = ps_out[:pid]
|
31
|
+
|
32
|
+
App.new(name, cmd, status, pid)
|
33
|
+
end
|
34
|
+
|
35
|
+
def display(color_index = rand(0..COLORS.length))
|
36
|
+
puts Rainbow("#{name} ").send(COLORS[color_index % COLORS.length]).underline
|
37
|
+
puts "status: #{status}"
|
38
|
+
puts "pid: #{pid}" if status == :running
|
39
|
+
puts "log: #{log.path}"
|
40
|
+
puts
|
41
|
+
end
|
42
|
+
|
43
|
+
def kill!
|
44
|
+
if status == :running
|
45
|
+
Process.kill("HUP", pid.to_i)
|
46
|
+
puts Rainbow("killing #{name}").red
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def log
|
51
|
+
File.open((Dir.pwd + "/logs/" + "#{name}.log"), "w+")
|
52
|
+
end
|
53
|
+
|
54
|
+
def run
|
55
|
+
puts Rainbow("running #{app.name}").green
|
56
|
+
|
57
|
+
Process.spawn(
|
58
|
+
ENV,
|
59
|
+
command,
|
60
|
+
out: [log.path, "w"],
|
61
|
+
err: [log.path, "w"],
|
62
|
+
:in => "/dev/null"
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
def status
|
67
|
+
@status ||= App.ps_out(name)[:status]
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def self.ps_out(name)
|
73
|
+
stdout, stderr, cmd_status = Open3.capture3("ps aux | grep #{name}")
|
74
|
+
if cmd_status.success?
|
75
|
+
# find processes that are either sbt or ES, and filter out the grep command itself
|
76
|
+
if p = stdout.split(/\n/).find {|l| (l.match("sbt") || l.match("elasticsearch")) && !l.match("grep") }
|
77
|
+
proc_status = :running
|
78
|
+
pid = p.match(/\d{1,8}\s/)[0]
|
79
|
+
else
|
80
|
+
proc_status = :not_running
|
81
|
+
end
|
82
|
+
end
|
83
|
+
{status: proc_status, pid: pid}
|
84
|
+
end
|
85
|
+
end
|
data/test.rb
ADDED
data/test/test_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: grid_runner
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- NickyPStraightStylinOnEm
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rdoc
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aruba
|
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: gli
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.13.4
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.13.4
|
69
|
+
description:
|
70
|
+
email: np1249a@gmail.com
|
71
|
+
executables:
|
72
|
+
- grid_runner
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- Gemfile
|
77
|
+
- Gemfile.lock
|
78
|
+
- Procfile
|
79
|
+
- README.md
|
80
|
+
- Rakefile
|
81
|
+
- bin/grid_runner
|
82
|
+
- grid_runner-0.0.1.gem
|
83
|
+
- grid_runner.gemspec
|
84
|
+
- grid_runner.rdoc
|
85
|
+
- lib/grid_runner.rb
|
86
|
+
- lib/grid_runner/applications.rb
|
87
|
+
- lib/grid_runner/colors.rb
|
88
|
+
- lib/grid_runner/version.rb
|
89
|
+
- test.rb
|
90
|
+
- test/default_test.rb
|
91
|
+
- test/test_helper.rb
|
92
|
+
homepage:
|
93
|
+
licenses: []
|
94
|
+
metadata: {}
|
95
|
+
post_install_message:
|
96
|
+
rdoc_options: []
|
97
|
+
require_paths:
|
98
|
+
- lib
|
99
|
+
- lib
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
requirements: []
|
111
|
+
rubyforge_project:
|
112
|
+
rubygems_version: 2.0.14
|
113
|
+
signing_key:
|
114
|
+
specification_version: 4
|
115
|
+
summary: A lil appy to run them small apz
|
116
|
+
test_files: []
|