dronejob 1.6.0 → 2.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: 5d5e8318926dc2e1172dd75fde843e138c07d957
4
- data.tar.gz: 84d2f9eff533a50c1bbe198edf695d8f526a6216
3
+ metadata.gz: a310b9d28ba8888a684e9f92c46131ee23085858
4
+ data.tar.gz: 28b7ffcc75f4011b8355cd44c0a9672420f5e8d5
5
5
  SHA512:
6
- metadata.gz: 727c3da9be4f677294e675ebcbc4c7f41ad513e861c20d86497a94af31db90e70ba324c61b2df5f4527cd744f144f6fa549a6b998cb576e76dd2f85d80a8d94c
7
- data.tar.gz: d6f86e969fbb77d7324acd26436dcef4e1b9d1557f49de0a05d953b28e59ebc6a985e8f4193db64f15e20cecd5d38b9b00c88ce7e7feccb6310765f003d9ec54
6
+ metadata.gz: 9d3b332ca2191fbdec6fc587461aa156ad57ac01bee4bde8281e225aa03715e7a4a968fd78381b612f25b7a8bfcef92114a92c205704bbd9f0359a766f371541
7
+ data.tar.gz: f9b6f3f71e441f7d29f8ac3d8277be31f0d1e36661dcafafbdb930b18f6c3226137fe12035c8b966456b76ebcca4dfe469f52502f34352497f5c5312356aebfb
data/Gemfile.lock CHANGED
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dronejob (1.6.0)
4
+ dronejob (2.0.0)
5
5
  actionpack (>= 4.0.2)
6
6
  activejob (>= 4.0.2)
7
+ activejob-google_cloud_pubsub (>= 0.7)
7
8
  bundler (>= 1.12.0, < 3.0.0)
8
9
  git (>= 1.3)
9
10
  google-cloud-logging (>= 1.2)
10
11
  pusher (>= 1.3)
11
- sidekiq (>= 5.0)
12
12
  thor (>= 0.19)
13
13
  workspace (>= 1.0)
14
14
  workspace-archive (>= 1.0)
@@ -35,6 +35,11 @@ GEM
35
35
  activejob (5.2.3)
36
36
  activesupport (= 5.2.3)
37
37
  globalid (>= 0.3.6)
38
+ activejob-google_cloud_pubsub (0.7.1)
39
+ activejob
40
+ activesupport
41
+ concurrent-ruby
42
+ google-cloud-pubsub (>= 0.27.0)
38
43
  activesupport (5.2.3)
39
44
  concurrent-ruby (~> 1.0, >= 1.0.2)
40
45
  i18n (>= 0.7, < 2)
@@ -46,7 +51,6 @@ GEM
46
51
  builder (3.2.3)
47
52
  coderay (1.1.2)
48
53
  concurrent-ruby (1.1.5)
49
- connection_pool (2.2.2)
50
54
  crass (1.0.4)
51
55
  diff-lcs (1.3)
52
56
  erubi (1.8.0)
@@ -68,13 +72,18 @@ GEM
68
72
  google-gax (~> 1.3)
69
73
  googleapis-common-protos-types (>= 1.0.2)
70
74
  stackdriver-core (~> 1.3)
75
+ google-cloud-pubsub (0.30.2)
76
+ concurrent-ruby (~> 1.0)
77
+ google-cloud-core (~> 1.2)
78
+ google-gax (~> 1.0)
79
+ grpc-google-iam-v1 (~> 0.6.9)
71
80
  google-gax (1.5.0)
72
81
  google-protobuf (~> 3.2)
73
82
  googleapis-common-protos (>= 1.3.5, < 2.0)
74
83
  googleauth (>= 0.6.2, < 0.10.0)
75
84
  grpc (>= 1.7.2, < 2.0)
76
85
  rly (~> 0.2.3)
77
- google-protobuf (3.7.1)
86
+ google-protobuf (3.7.1-universal-darwin)
78
87
  googleapis-common-protos (1.3.9)
79
88
  google-protobuf (~> 3.0)
80
89
  googleapis-common-protos-types (~> 1.0)
@@ -88,9 +97,12 @@ GEM
88
97
  multi_json (~> 1.11)
89
98
  os (>= 0.9, < 2.0)
90
99
  signet (~> 0.7)
91
- grpc (1.20.0)
100
+ grpc (1.20.0-universal-darwin)
92
101
  google-protobuf (~> 3.7)
93
102
  googleapis-common-protos-types (~> 1.0.0)
103
+ grpc-google-iam-v1 (0.6.9)
104
+ googleapis-common-protos (>= 1.3.1, < 2.0)
105
+ grpc (~> 1.0)
94
106
  haml (5.1.0)
95
107
  temple (>= 0.8.0)
96
108
  tilt
@@ -130,8 +142,6 @@ GEM
130
142
  pusher-signature (~> 0.1.8)
131
143
  pusher-signature (0.1.8)
132
144
  rack (2.0.7)
133
- rack-protection (2.0.5)
134
- rack
135
145
  rack-test (1.1.0)
136
146
  rack (>= 1.0, < 3)
137
147
  rails-dom-testing (2.0.3)
@@ -140,7 +150,6 @@ GEM
140
150
  rails-html-sanitizer (1.0.4)
141
151
  loofah (~> 2.2, >= 2.2.2)
142
152
  rainbow (3.0.0)
143
- redis (4.1.1)
144
153
  rly (0.2.3)
145
154
  rmagick (2.16.0)
146
155
  rspec (3.8.0)
@@ -165,11 +174,6 @@ GEM
165
174
  unicode-display_width (>= 1.4.0, < 1.7)
166
175
  ruby-progressbar (1.10.0)
167
176
  rubyzip (1.2.2)
168
- sidekiq (5.2.7)
169
- connection_pool (~> 2.2, >= 2.2.2)
170
- rack (>= 1.5.0)
171
- rack-protection (>= 1.5.0)
172
- redis (>= 3.3.5, < 5)
173
177
  signet (0.11.0)
174
178
  addressable (~> 2.3)
175
179
  faraday (~> 0.9)
data/README.md CHANGED
@@ -13,3 +13,7 @@ Install gems:
13
13
  List dronejob commands:
14
14
 
15
15
  $ bundle exec dronejob
16
+
17
+ Start server:
18
+
19
+ $ bundle exec dronejob server
data/dronejob.gemspec CHANGED
@@ -17,10 +17,10 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency "bundler", "< 3.0.0", ">= 1.12.0"
18
18
  s.add_runtime_dependency "actionpack", ">= 4.0.2"
19
19
  s.add_runtime_dependency "activejob", ">= 4.0.2"
20
+ s.add_runtime_dependency "activejob-google_cloud_pubsub", ">= 0.7"
20
21
  s.add_runtime_dependency "git", ">= 1.3"
21
22
  s.add_runtime_dependency "google-cloud-logging", ">= 1.2"
22
23
  s.add_runtime_dependency "pusher", ">= 1.3"
23
- s.add_runtime_dependency "sidekiq", ">= 5.0"
24
24
  s.add_runtime_dependency "thor", ">= 0.19"
25
25
  s.add_runtime_dependency "workspace", ">= 1.0"
26
26
  s.add_runtime_dependency "workspace-archive", ">= 1.0"
@@ -1,19 +1,16 @@
1
1
  require "dronejob"
2
2
  require "active_job"
3
+
3
4
  module Dronejob
4
5
  class Command < Thor
5
6
  Dronejob::Loader.workers(:base).each do |identifier, worker|
6
7
  desc identifier, "Queue #{identifier} worker"
7
8
 
8
- # Pub/Sub options
9
- method_option(:queue_adapter, type: :string, default: "sidekiq")
10
-
11
9
  # Worker options
12
10
  method_option(:run, aliases: "-r", type: :boolean, default: false)
13
11
  method_option(:break, aliases: "-b", type: :boolean, default: false)
14
12
  method_option(:skip, aliases: "-s", type: :array, default: [])
15
13
  method_option(:from, aliases: "-f", type: :string)
16
- method_option(:listen, aliases: "-l", type: :boolean, default: false)
17
14
  method_option(:notify, aliases: "-n", type: :boolean, default: true)
18
15
  method_option(:jobs_path, type: :string)
19
16
  method_option(:output_path, type: :string)
@@ -24,7 +21,6 @@ module Dronejob
24
21
  end
25
22
 
26
23
  define_method(identifier) do
27
- Dronejob::Base.queue_adapter = options.queue_adapter
28
24
  Dronejob::Base.jobs_path = options.jobs_path if options.jobs_path
29
25
  Dronejob::Base.output_path = options.output_path if options.output_path
30
26
 
@@ -32,28 +28,8 @@ module Dronejob
32
28
  if options.run
33
29
  worker.perform_now(options)
34
30
  else
35
- Sidekiq.configure_client do |config|
36
- config.redis = { url: Dronejob::Base.options.redis_url }
37
- end
38
31
  job = worker.perform_later(options.to_hash)
39
-
40
- # Listen for notifications
41
- if options.listen
42
- if options.run or !options.notify
43
- Dronejob::Base.log("error", "Unable to listen to a jobs that '--run' instantly, or with '--no-notify' set")
44
- else
45
- Dronejob::Base.subscribe(Dronejob::Base.status_topic, true) do |data|
46
- if data["job_id"] == job.job_id
47
- Dronejob::Base.log("info", "status: #{data['detail'].to_json}")
48
- if data["detail"]["phase"] == "complete"
49
- Dronejob::Base.log("info", "job completed")
50
- Kernel.exit
51
- end
52
- end
53
- end
54
- end
55
- end
56
-
32
+ Dronejob::Base.log("info", "Enqueued job #{job.job_id}")
57
33
  end
58
34
  end
59
35
  end
@@ -109,8 +85,18 @@ module Dronejob
109
85
  job_identifier = dronejob_config[:job_identifier]
110
86
  worker = Dronejob::Loader.workers[job_identifier]
111
87
  job_params["from"] = options.from
112
- Dronejob::Base.queue_adapter = job_params["queue_adapter"]
113
88
  worker.perform_now(job_params)
114
89
  end
90
+
91
+ desc :server, "Start Dronejob Server"
92
+ def server
93
+ server = Server.new(Dronejob::Base.options)
94
+ begin
95
+ server.start
96
+ rescue Interrupt
97
+ server.stop
98
+ exit
99
+ end
100
+ end
115
101
  end
116
102
  end
@@ -30,7 +30,7 @@ module Dronejob
30
30
  end
31
31
 
32
32
  class_methods do
33
- def log(level, message, job)
33
+ def log(level, message, job = nil)
34
34
  if !logger.nil?
35
35
  if option(:dronejob_log) == "google"
36
36
  message = "[#{job.job_id}] #{message}" if level != :error
@@ -38,15 +38,17 @@ module Dronejob
38
38
  # data[:phase] = job.phase.to_s if job.phase
39
39
  # data[:user_id] = job.param(:user_id) if job.param(:user_id)
40
40
  data[:phase_title] = job.phase_config[:title].to_s if job.phase_config&.key?(:title)
41
- if job.phase_config&.key?(:progress)
41
+ if job&.phase_config&.key?(:progress)
42
42
  data[:phase_progress] = job.phase_config[:progress]
43
43
  end
44
44
  logger.send(level, data.compact)
45
45
  else
46
46
  logger.send(level, message)
47
47
  end
48
- else
48
+ elsif job
49
49
  puts "#{level}: [#{job.phase}] #{message}"
50
+ else
51
+ puts "#{level}: #{message}"
50
52
  end
51
53
  end
52
54
  end
@@ -1,17 +1,25 @@
1
1
  require "pusher"
2
+
2
3
  module Dronejob
3
4
  module Modules
4
5
  module Queue
5
6
  extend ActiveSupport::Concern
6
7
 
7
8
  included do
8
- attr_accessor :queue_adapter
9
9
  queue_as option(:dronejob_queue) || :dronejob
10
10
  set_callback :phase, :before, :notify_before_phase
11
11
  set_callback :job, :after, :notify_after_job
12
12
  end
13
13
 
14
14
  class_methods do
15
+ def pubsub
16
+ @pubsub ||= Google::Cloud::Pubsub.new(project_id: option(:google_cloud_project_id), credentials: option(:google_cloud_service_account))
17
+ end
18
+
19
+ def queue_adapter
20
+ @queue_adapter ||= ActiveJob::GoogleCloudPubsub::Adapter.new(async: false, logger: logger, pubsub: pubsub)
21
+ end
22
+
15
23
  def notify(value = true)
16
24
  @notify = value
17
25
  end
@@ -0,0 +1,21 @@
1
+ module Dronejob
2
+ class Dronejob::Server
3
+ attr_reader :worker, :queue, :min_threads, :max_threads
4
+
5
+ def initialize(options)
6
+ @queue = options.dronejob_queue || "drone"
7
+ @min_threads = options.min_threads || 1
8
+ @max_threads = options.max_threads || 1
9
+ end
10
+
11
+ def start
12
+ @worker = ActiveJob::GoogleCloudPubsub::Worker.new(queue: @queue, pubsub: Dronejob::Base.pubsub, min_threads: self.min_threads, max_threads: self.max_threads)
13
+ Dronejob::Base.log("info", "Starting server for queue #{@queue} ...", nil)
14
+ @worker.run
15
+ end
16
+
17
+ def stop
18
+ Dronejob::Base.log("info", "Stopping server ...", nil)
19
+ end
20
+ end
21
+ end
@@ -1,3 +1,3 @@
1
1
  module Dronejob
2
- VERSION = "1.6.0"
2
+ VERSION = "2.0.0"
3
3
  end
data/lib/dronejob.rb CHANGED
@@ -1,6 +1,8 @@
1
+ require 'activejob-google_cloud_pubsub'
1
2
  require "google/cloud/logging"
2
3
  require "active_support"
3
4
  require 'active_support/rails'
5
+ require "dronejob/server"
4
6
  require "dronejob/version"
5
7
  require "psych"
6
8
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dronejob
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Strebitzer
@@ -59,61 +59,61 @@ dependencies:
59
59
  - !ruby/object:Gem::Version
60
60
  version: 4.0.2
61
61
  - !ruby/object:Gem::Dependency
62
- name: git
62
+ name: activejob-google_cloud_pubsub
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: '1.3'
67
+ version: '0.7'
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: '1.3'
74
+ version: '0.7'
75
75
  - !ruby/object:Gem::Dependency
76
- name: google-cloud-logging
76
+ name: git
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
79
  - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: '1.2'
81
+ version: '1.3'
82
82
  type: :runtime
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
- version: '1.2'
88
+ version: '1.3'
89
89
  - !ruby/object:Gem::Dependency
90
- name: pusher
90
+ name: google-cloud-logging
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - ">="
94
94
  - !ruby/object:Gem::Version
95
- version: '1.3'
95
+ version: '1.2'
96
96
  type: :runtime
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: '1.3'
102
+ version: '1.2'
103
103
  - !ruby/object:Gem::Dependency
104
- name: sidekiq
104
+ name: pusher
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - ">="
108
108
  - !ruby/object:Gem::Version
109
- version: '5.0'
109
+ version: '1.3'
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - ">="
115
115
  - !ruby/object:Gem::Version
116
- version: '5.0'
116
+ version: '1.3'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: thor
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -253,7 +253,6 @@ files:
253
253
  - Gemfile
254
254
  - Gemfile.lock
255
255
  - README.md
256
- - app.rb
257
256
  - bin/dronejob
258
257
  - dronejob.gemspec
259
258
  - lib/dronejob.rb
@@ -272,6 +271,7 @@ files:
272
271
  - lib/dronejob/modules/workspace.rb
273
272
  - lib/dronejob/railtie.rb
274
273
  - lib/dronejob/railties/dronejob.rake
274
+ - lib/dronejob/server.rb
275
275
  - lib/dronejob/version.rb
276
276
  homepage: https://github.com/MagLoft/dronejob
277
277
  licenses:
data/app.rb DELETED
@@ -1,6 +0,0 @@
1
- require "dronejob"
2
- Dronejob::Loader.load
3
- Dronejob::Base.queue_adapter = "sidekiq"
4
- Sidekiq.configure_server do |config|
5
- config.redis = { url: Dronejob::Base.options.redis_url }
6
- end