gina-conveyor 0.2.4 → 1.0.0

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: b5e7532c41370b5895baf8dc2776eaef2531ce99
4
- data.tar.gz: a2c2b104cd9ebbc166bc5d397cc4b0a93d660c13
3
+ metadata.gz: 08fc3174aa43d6d5eb64bfec83f61eadf806f0b3
4
+ data.tar.gz: fb2d81a0e75ffc1a620630831f9f8f1e9b5d37af
5
5
  SHA512:
6
- metadata.gz: 3f310031700a8186a14dce0d7130898d3ada6bdaf0e27ea9db5d1223e654657ae7123d2d612bcf5961f7c8d48bd66ee9206042e0e1b1994a57d3517bc4bce22d
7
- data.tar.gz: baacd19e877b28d60c7672b9f08123cadbb48bae2d694ba4b035a775cfd2d300a4e52f1778fb1dce8de6d312d4933bfffc6ab33c04f11b72de35e8592fed6920
6
+ metadata.gz: 589d9f31d1621aea95ac881210703e72a56165c8d53c7c59e472e2e4fb9c1677b3109d32fae779dfe7abf52ef21ab478b7fc81549b5a59bf6091352f96acb81d
7
+ data.tar.gz: 718daf0c2872ed754c6dfd24207dfac7ef6981678aa718c639c5a93e06be39916e38aa3a40107d5f82738047565964085fb3344c561831893e388df60b0b83da
data/.gitignore CHANGED
@@ -6,4 +6,5 @@ log/*
6
6
  .DS_Store
7
7
  .workers
8
8
  pkg
9
- .conveyor
9
+ .conveyor
10
+ data_test
data/Gemfile.lock CHANGED
@@ -1,22 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gina-conveyor (0.2.3)
4
+ gina-conveyor (1.0.0)
5
5
  activemodel (~> 4.1.0)
6
6
  activesupport (~> 4.1.0)
7
7
  em-websocket (~> 0.5.1)
8
8
  eventmachine (~> 1.0.0)
9
9
  listen (~> 2.10)
10
+ mixlib-shellout (~> 2.2.1)
10
11
  rainbow (~> 2.0.0)
11
12
  rb-readline (~> 0.5.0)
12
13
 
13
14
  GEM
14
15
  remote: http://rubygems.org/
15
16
  specs:
16
- activemodel (4.1.12)
17
- activesupport (= 4.1.12)
17
+ activemodel (4.1.13)
18
+ activesupport (= 4.1.13)
18
19
  builder (~> 3.1)
19
- activesupport (4.1.12)
20
+ activesupport (4.1.13)
20
21
  i18n (~> 0.6, >= 0.6.9)
21
22
  json (~> 1.7, >= 1.7.7)
22
23
  minitest (~> 5.1)
@@ -28,9 +29,9 @@ GEM
28
29
  em-websocket (0.5.1)
29
30
  eventmachine (>= 0.12.9)
30
31
  http_parser.rb (~> 0.6.0)
31
- eventmachine (1.0.7)
32
+ eventmachine (1.0.8)
32
33
  ffi (1.9.10)
33
- hitimes (1.2.2)
34
+ hitimes (1.2.3)
34
35
  http_parser.rb (0.6.0)
35
36
  i18n (0.7.0)
36
37
  json (1.8.3)
@@ -38,15 +39,16 @@ GEM
38
39
  celluloid (~> 0.16.0)
39
40
  rb-fsevent (>= 0.9.3)
40
41
  rb-inotify (>= 0.9)
41
- minitest (5.7.0)
42
+ minitest (5.8.1)
43
+ mixlib-shellout (2.2.1)
42
44
  rainbow (2.0.0)
43
45
  rake (10.3.2)
44
- rb-fsevent (0.9.5)
46
+ rb-fsevent (0.9.6)
45
47
  rb-inotify (0.9.5)
46
48
  ffi (>= 0.5.0)
47
49
  rb-readline (0.5.3)
48
50
  thread_safe (0.3.5)
49
- timers (4.0.1)
51
+ timers (4.0.4)
50
52
  hitimes
51
53
  tzinfo (1.2.2)
52
54
  thread_safe (~> 0.1)
@@ -57,3 +59,6 @@ PLATFORMS
57
59
  DEPENDENCIES
58
60
  gina-conveyor!
59
61
  rake
62
+
63
+ BUNDLED WITH
64
+ 1.10.6
data/bin/conveyor CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ require 'rubygems'
2
3
  require 'conveyor'
3
4
 
4
5
  Conveyor.start
data/conveyor.gemspec CHANGED
@@ -27,4 +27,5 @@ Gem::Specification.new do |gem|
27
27
  gem.add_dependency('rb-readline', '~> 0.5.0')
28
28
  gem.add_dependency('eventmachine', '~> 1.0.0')
29
29
  gem.add_dependency('em-websocket', '~> 0.5.1')
30
+ gem.add_dependency('mixlib-shellout', '~> 2.2.1')
30
31
  end
data/lib/conveyor.rb CHANGED
@@ -16,6 +16,7 @@ require 'fileutils'
16
16
  require 'eventmachine'
17
17
  require 'em-websocket'
18
18
  require "conveyor/version"
19
+ require "mixlib/shellout"
19
20
 
20
21
  module Conveyor
21
22
  extend ActiveSupport::Autoload
@@ -31,8 +31,9 @@ module Conveyor
31
31
  "worker_defs" => File.expand_path('.workers', Dir.pwd),
32
32
  "logfile" => File.expand_path('log/conveyor.log', Dir.pwd),
33
33
  "threadpool" => 5,
34
+ "command_timeout" => 600,
34
35
  "websocket" => {
35
- "disabled" => false,
36
+ "disabled" => true,
36
37
  "host" => "0.0.0.0",
37
38
  "port" => 9876
38
39
  }
@@ -11,11 +11,11 @@ module Conveyor
11
11
  def reset!
12
12
  @msg_queue = []
13
13
  end
14
-
14
+
15
15
  def warning(*msg)
16
16
  # Do nothing
17
17
  end
18
-
18
+
19
19
  def error(*msg)
20
20
  @msg_queue ||= []
21
21
  options = msg.extract_options!
@@ -23,20 +23,20 @@ module Conveyor
23
23
  msg = msg.join("\n") if msg.class == Array
24
24
  @msg_queue << msg
25
25
  end
26
-
26
+
27
27
  def write(msgtype, *msg)
28
28
  if respond_to?(msgtype)
29
29
  self.send(msgtype, *msg)
30
30
  end
31
31
  end
32
-
32
+
33
33
  def mail
34
34
  return if @msg_queue.nil? || @msg_queue.empty?
35
- puts "Sending email to #{Conveyor::Foreman.instance.notify_list}"
36
- puts @msg_queue
35
+ # puts "Sending email to #{Conveyor::Foreman.instance.notify_list}"
36
+ # puts @msg_queue
37
37
  reset!
38
38
  end
39
39
  end
40
40
  end
41
41
  end
42
- end
42
+ end
@@ -1,3 +1,3 @@
1
1
  module Conveyor
2
- VERSION = "0.2.4"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -2,13 +2,10 @@ module Conveyor
2
2
  class Websocket
3
3
  class << self
4
4
  def start
5
- if config[:disable]
6
- fm.info "Websocket disabled"
7
- return
8
- end
5
+ return if config[:disabled]
9
6
 
10
7
  fm.info "Starting websocket on #{config[:host]}:#{config[:port]}", :color => :green
11
-
8
+
12
9
  EventMachine::start_server(config[:host], config[:port],
13
10
  EventMachine::WebSocket::Connection, config) do |ws|
14
11
  ws.onopen {
@@ -34,4 +31,4 @@ module Conveyor
34
31
  end
35
32
  end
36
33
  end
37
- end
34
+ end
@@ -7,7 +7,7 @@ module Conveyor
7
7
  class Worker
8
8
  include Conveyor::Output
9
9
  include Conveyor::Workers::Syntax
10
-
10
+
11
11
  attr_accessor :filename
12
12
  attr_reader :status
13
13
  attr_reader :worker_def
@@ -32,13 +32,13 @@ module Conveyor
32
32
  dir = File.dirname(worker_def)
33
33
  File.expand_path(File.basename(worker_def, '.worker') + '.log', dir)
34
34
  end
35
-
35
+
36
36
  # Catch any calls to error and set the status fail flags
37
37
  def error(*msg)
38
38
  opts = msg.extract_options!
39
39
  unless msg.flatten.empty?
40
40
  @status.fail!
41
- msg.unshift("Error encountered in #{worker_def}")
41
+ # msg.unshift("Error encountered in #{worker_def}")
42
42
  super(*msg, opts)
43
43
  end
44
44
  @status.success?
@@ -58,14 +58,14 @@ module Conveyor
58
58
  if @status.success?
59
59
  info "Completed #{@filename}, #{@elapsed}s elapsed", :color => :green
60
60
  else
61
- error "Error(s) encountered in #{@filename}", :color => :red
61
+ error "Error encountered in #{@worker_def} -> #{@filename}", :color => :red
62
62
  end
63
63
  send_notifications
64
64
  end
65
65
  end
66
-
66
+
67
67
  protected
68
-
68
+
69
69
  def create_dirs_for_cmd(src, dest)
70
70
  if src.is_a?(Array) || Array.wrap(src).count > 1 || dest.last == ?/
71
71
  mkdir(dest)
@@ -73,34 +73,34 @@ module Conveyor
73
73
  mkdir(File.dirname(dest))
74
74
  end
75
75
  end
76
-
76
+
77
77
  def verified_cmd(cmd, src, dest, &block)
78
78
  create_dirs_for_cmd(src, dest)
79
79
  dest = File.expand_path(dest)
80
-
80
+
81
81
  Array.wrap(src).each do |s|
82
82
  run "#{cmd} #{s} #{dest}"
83
83
  sync
84
-
84
+
85
85
  if block_given?
86
86
  result = yield(s, dest)
87
87
  @status.fail! unless result
88
88
  end
89
89
  end
90
90
  end
91
-
91
+
92
92
  def verified_move(src, dest)
93
93
  verified_cmd(:mv, src, dest) do |src,dest|
94
94
  verify_move(src,dest)
95
95
  end
96
96
  end
97
-
97
+
98
98
  def verified_copy(src, dest)
99
99
  verified_cmd(:cp, src, dest) do |src,dest|
100
100
  verify_copy(src,dest)
101
101
  end
102
102
  end
103
-
103
+
104
104
  def verify_copy(src, dest)
105
105
  if File.directory? dest
106
106
  File.exists?(File.join(dest, File.basename(src)))
@@ -108,7 +108,7 @@ module Conveyor
108
108
  File.exists?(dest)
109
109
  end
110
110
  end
111
-
111
+
112
112
  def verify_move(src, dest)
113
113
  if File.directory? dest
114
114
  File.exists?(File.join(dest, File.basename(src))) && !File.exists?(src)
@@ -1,18 +1,18 @@
1
1
  module Conveyor
2
2
  module Workers
3
3
  module Syntax
4
-
4
+
5
5
  # Will return a string of any method returned that isn't handled
6
6
  # ex: match extension txt => match(extension("foo"))
7
7
  def method_missing(method, value = nil)
8
8
  return method.to_s
9
- end
10
-
9
+ end
10
+
11
11
  # Returns a recursive file glob string for the passed in string
12
12
  def file(glob)
13
13
  "**/#{glob}"
14
14
  end
15
-
15
+
16
16
  # Returns an extension glob string for passed in string
17
17
  def extension(glob)
18
18
  "*.#{glob}"
@@ -22,7 +22,7 @@ module Conveyor
22
22
  def any
23
23
  '*'
24
24
  end
25
-
25
+
26
26
  # Returns a list of files that have the same basename but different extension
27
27
  # in the same directory
28
28
  def like(name)
@@ -34,7 +34,7 @@ module Conveyor
34
34
  def filename
35
35
  @filename
36
36
  end
37
-
37
+
38
38
  # Which directories to watch for file change events.
39
39
  def watch(*args, &block)
40
40
  yield
@@ -44,42 +44,49 @@ module Conveyor
44
44
  def match(glob, &block)
45
45
  yield @filename
46
46
  end
47
-
47
+
48
48
  # Run the system sync command
49
49
  def sync
50
50
  run 'sync', :quiet => true
51
51
  end
52
-
52
+
53
53
  # Change current working directory, optionally takes a block
54
54
  # NOTE: Consider removing this as it can cause problems with threaded workers
55
55
  def chdir(dir, &block)
56
56
  Dir.chdir(File.expand_path(dir), &block)
57
57
  end
58
-
59
- # Run the system command, and make sure that any errors are caught and returne
58
+
59
+ # Run the system command, and make sure that any errors are caught
60
60
  # up the status change
61
- def run(*cmd)
62
- opts = cmd.extract_options!
61
+ def run(*params)
62
+ opts = params.extract_options!
63
+ command = Array.wrap(params).join(' ')
64
+ info command unless opts[:quiet]
65
+
63
66
  begin
64
- info cmd.join(' ') unless opts[:quiet]
65
- output,err,thr = Open3.capture3(Array.wrap(cmd).join(' '))
66
- info output.chomp unless output.chomp.length == 0
67
- if thr.success?
68
- if err.chomp.length > 0
67
+ cmdrunner = Mixlib::ShellOut.new(command, timeout: Conveyor::Foreman.instance.config[:command_timeout] || 600)
68
+ cmdrunner.run_command()
69
+
70
+ info cmdrunner.stdout.chomp unless cmdrunner.stdout.chomp.length == 0
71
+
72
+ if cmdrunner.error!
73
+ error "Error running: `#{command}`", cmdrunner.stderr.chomp
74
+ @status.fail!
75
+ else
76
+ if cmdrunner.stderr.chomp.length > 0
69
77
  warning "Error output recieved, but no error code recieved"
70
- warning err.chomp
78
+ warning cmdrunner.stderr.chomp
71
79
  end
72
- else
73
- error "Error running: `#{cmd.join(' ')}`", err.chomp
74
- @status.fail!
75
80
  end
76
-
77
- return thr.success?
81
+
82
+ return !cmdrunner.error!
83
+ rescue Mixlib::ShellOut::CommandTimeout => e
84
+ error e.class, "Timeout running: #{command}"
78
85
  rescue => e
79
86
  error e.class, e.message, e.backtrace.join("\n")
80
87
  end
81
88
  end
82
-
89
+
83
90
  # Deletes passed in files
84
91
  def delete(files)
85
92
  # sync before we delete
@@ -90,10 +97,10 @@ module Conveyor
90
97
  error "#{f} wasn't removed" if File.exists?(f)
91
98
  end
92
99
  end
93
-
100
+
94
101
  # Create a new directory
95
102
  def mkdir(dir)
96
- FileUtils.mkdir_p(File.expand_path(dir))
103
+ FileUtils.mkdir_p(File.expand_path(dir))
97
104
  @status.fail! unless File.exists?(File.expand_path(dir))
98
105
  end
99
106
 
@@ -101,22 +108,22 @@ module Conveyor
101
108
  def copy(src = [], dest = nil)
102
109
  destination = dest unless dest.nil?
103
110
  source = src unless src.empty?
104
-
111
+
105
112
  if source && destination
106
113
  verified_copy(source, destination)
107
- end
114
+ end
108
115
  end
109
-
116
+
110
117
  # Move files to destination
111
118
  def move(src=[], dest = nil)
112
119
  destination = dest unless dest.nil?
113
120
  source = src unless src.empty?
114
-
121
+
115
122
  if source && destination
116
123
  verified_move(source, destination)
117
124
  end
118
125
  end
119
-
126
+
120
127
  # Scp files to destination
121
128
  # See: man scp
122
129
  def scp(src, dest)
@@ -124,4 +131,4 @@ module Conveyor
124
131
  end
125
132
  end
126
133
  end
127
- end
134
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gina-conveyor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Will Fisher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-24 00:00:00.000000000 Z
11
+ date: 2015-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 0.5.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: mixlib-shellout
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 2.2.1
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 2.2.1
125
139
  description: Conveyor is used for shuffling data around
126
140
  email:
127
141
  - will@gina.alaska.edu