sidekiq-enqueuer 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d5dbc2cdcd956e6126c1299c490e61057bc1dc61
4
+ data.tar.gz: 16526ef109984855d5a85018fc2767663d5d3018
5
+ SHA512:
6
+ metadata.gz: 92c9046d2dd0200b36147283a34d91aaa093168a1646325154e81d81c933ad3c341b080e4b404ec9f6ad9c470042ec028c79da1932c4a0cde871779a2384a1d6
7
+ data.tar.gz: c8deb9bc67eb0f46d325564d3d0191a39ea26b7a3dc42f79924df4db830a80980637bc349d82e5d1372045a35ee96f734738eb8534aa58fcc3917187b8451eb5
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
4
+ before_install: gem install bundler -v 1.10.6
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in sidekiq-enqueuer.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Sidekiq::Enqueuer
2
+
3
+ A Sidekiq Web extension to enqueue/schedule job in Web UI. Support both Sidekiq::Worker and ActiveJob.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'sidekiq-enqueuer'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install sidekiq-enqueuer
20
+
21
+ ## Usage
22
+
23
+ Visit the Sidekiq Web, click the Enqueuer tab.
24
+
25
+
26
+ ## Contributing
27
+
28
+ Bug reports and pull requests are welcome on GitHub at https://github.com/richfisher/sidekiq-enqueuer.
29
+
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ task :default => :test
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "lib"
8
+ t.libs << "test"
9
+ t.test_files = FileList["test/**/*_test.rb"]
10
+ t.verbose = true
11
+ end
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "sidekiq/enqueuer"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,2 @@
1
+ en:
2
+ enqueuer: Enqueuer
@@ -0,0 +1,6 @@
1
+ module Sidekiq::Enqueuer
2
+ class Railtie < ::Rails::Railtie
3
+ initializer "sidekiq_enqueuer_loaded" do
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module Sidekiq
2
+ module Enqueuer
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ <h3>Enqueuer</h3>
2
+
3
+ <table class="table table-hover table-bordered table-striped table-white">
4
+ <thead>
5
+ <tr>
6
+ <th>Name</th>
7
+ <th>Params</th>
8
+ <th>Actions</th>
9
+ </tr>
10
+ </thead>
11
+ <tbody>
12
+ <% for job in @jobs %>
13
+ <tr>
14
+ <td><%= job %></td>
15
+ <td><%= get_job_perform_params(job).join(', ') %></td>
16
+ <td><a href="<%= root_path %>enqueuer/<%= job %>" class="btn btn-danger btn-xs" style="color: white;">Enqueue Form</a></td>
17
+ </tr>
18
+ <% end %>
19
+ </tbody>
20
+ </table>
@@ -0,0 +1,32 @@
1
+ <h3>Enqueuer</h3>
2
+
3
+ <form method="post" action="<%= root_path %>enqueuer">
4
+ <%= csrf_tag if respond_to?(:csrf_tag) %>
5
+
6
+ <div class="form-group">
7
+ <label for="job_class_name">Job Class/Module</label>
8
+ <input class="form-control" name="job_class_name" value="<%= @klass %>" readonly=readonly />
9
+ </div>
10
+
11
+ <% for param in get_job_perform_params(@klass) %>
12
+ <div class="form-group">
13
+ <label for="peform[<%= param %>]"><%= param %></label>
14
+ <input class="form-control" name="perform[<%= param %>]" />
15
+ </div>
16
+ <% end %>
17
+
18
+ <div class="form-group">
19
+ <input type="submit" class="btn btn-danger" name="submit" value="Enqueue" />
20
+ </div>
21
+
22
+ <div class="form-group">
23
+ <hr />
24
+ </div>
25
+
26
+ <div class="form-group">
27
+ <label for="enqueue_in">Enqueue in</label>
28
+ <input class="form-control" name="enqueue_in" placeholder="x seconds" />
29
+ </div>
30
+
31
+ <input type="submit" class="btn btn-danger" name="submit" value="Schedule" />
32
+ </form>
@@ -0,0 +1,37 @@
1
+ module Sidekiq::Enqueuer::WebExtension
2
+ def self.registered(app)
3
+ view_path = File.join(File.expand_path("..", __FILE__), "views")
4
+
5
+ app.helpers do
6
+ def get_job_perform_params(klass_or_module)
7
+ klass_or_module.instance_method(:perform).parameters.map{ |e| e[1]}
8
+ end
9
+ end
10
+
11
+ app.get "/enqueuer" do
12
+ @jobs = Sidekiq::Enqueuer.get_jobs
13
+
14
+ render(:erb, File.read(File.join(view_path, "index.erb")))
15
+ end
16
+
17
+ app.get "/enqueuer/:job_class_name" do
18
+ @klass = params[:job_class_name].constantize
19
+ render(:erb, File.read(File.join(view_path, "new.erb")))
20
+ end
21
+
22
+ app.post "/enqueuer" do
23
+ klass = params[:job_class_name].constantize
24
+
25
+ if params['submit'] == 'Enqueue'
26
+ Sidekiq::Enqueuer.perform_async(klass, params['perform'].values)
27
+ end
28
+
29
+ if params['submit'] == 'Schedule'
30
+ Sidekiq::Enqueuer.perform_in(klass, params['enqueue_in'], params['perform'].values)
31
+ end
32
+
33
+ redirect "#{root_path}enqueuer"
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,62 @@
1
+ require 'sidekiq/web'
2
+ require "sidekiq/enqueuer/version"
3
+ require 'sidekiq/enqueuer/web_extension'
4
+ require 'sidekiq/enqueuer/railtie' if defined? ::Rails::Railtie
5
+
6
+ module Sidekiq
7
+ module Enqueuer
8
+ def self.eager_load
9
+ has_eager_loaded = false
10
+ if defined?(::Rails) && ::Rails.env != 'production' && has_eager_loaded == false
11
+ ::Rails.application.eager_load!
12
+ has_eager_loaded = true
13
+ end
14
+ end
15
+
16
+ def self.get_job_modules
17
+ ObjectSpace.each_object(Module).select { |klass| has_worker_module?(klass) }
18
+ .delete_if {|klass| klass.to_s =~ /^Sidekiq::Extensions/}
19
+ .delete_if {|klass| klass.to_s =~ /^ActiveJob::QueueAdapters/}
20
+ end
21
+
22
+ def self.get_job_classes
23
+ ObjectSpace.each_object(Class).select { |klass| is_job_class?(klass) }
24
+ end
25
+
26
+ def self.get_jobs
27
+ eager_load
28
+ jobs = get_job_modules + get_job_classes
29
+ jobs.map(&:to_s).uniq.map(&:constantize)
30
+ end
31
+
32
+ def self.is_job_class?(klass)
33
+ klass < ::ActiveJob::Base
34
+ end
35
+
36
+ def self.has_worker_module?(klass)
37
+ klass.included_modules.include? ::Sidekiq::Worker
38
+ end
39
+
40
+ def self.perform_async(klass, values)
41
+ if is_job_class?(klass)
42
+ klass.perform_later(*values)
43
+ elsif has_worker_module?(klass)
44
+ klass.perform_async(*values)
45
+ end
46
+ end
47
+
48
+ def self.perform_in(klass, seconds_str, values)
49
+ seconds = seconds_str.to_i.seconds
50
+ if is_job_class?(klass)
51
+ klass.set(wait: seconds).perform_later(*values)
52
+ elsif has_worker_module?(klass)
53
+ klass.perform_in(seconds, *values)
54
+ end
55
+ end
56
+
57
+ end
58
+ end
59
+
60
+ Sidekiq::Web.register Sidekiq::Enqueuer::WebExtension
61
+ Sidekiq::Web.tabs["Enqueuer"] = "enqueuer"
62
+ Sidekiq::Web.settings.locales << File.join(File.dirname(__FILE__), "enqueuer/locales")
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'sidekiq/enqueuer/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "sidekiq-enqueuer"
8
+ spec.version = Sidekiq::Enqueuer::VERSION
9
+ spec.authors = ["richfisher"]
10
+ spec.email = ["richfisher.pan@gmail.com"]
11
+
12
+ spec.summary = %q{A Sidekiq Web extension to enqueue/schedule job in Web UI.}
13
+ spec.description = %q{A Sidekiq Web extension to enqueue/schedule job in Web UI. Support both Sidekiq::Worker and ActiveJob.}
14
+ spec.homepage = "https://github.com/richfisher/sidekiq-enqueuer"
15
+
16
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
17
+ # delete this section to allow pushing this gem to any host.
18
+ # if spec.respond_to?(:metadata)
19
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
20
+ # else
21
+ # raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
22
+ # end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ["lib"]
28
+
29
+ spec.add_development_dependency "bundler"
30
+ spec.add_development_dependency "rake"
31
+ spec.add_development_dependency "rack-test"
32
+ spec.add_development_dependency "sidekiq"
33
+ spec.add_development_dependency "rails", '> 4.2'
34
+ spec.add_development_dependency "sinatra"
35
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sidekiq-enqueuer
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - richfisher
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-04-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
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: rake
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: rack-test
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: sidekiq
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'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sinatra
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: A Sidekiq Web extension to enqueue/schedule job in Web UI. Support both
98
+ Sidekiq::Worker and ActiveJob.
99
+ email:
100
+ - richfisher.pan@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".travis.yml"
107
+ - Gemfile
108
+ - README.md
109
+ - Rakefile
110
+ - bin/console
111
+ - bin/setup
112
+ - lib/sidekiq/enqueuer.rb
113
+ - lib/sidekiq/enqueuer/locales/en.yml
114
+ - lib/sidekiq/enqueuer/railtie.rb
115
+ - lib/sidekiq/enqueuer/version.rb
116
+ - lib/sidekiq/enqueuer/views/index.erb
117
+ - lib/sidekiq/enqueuer/views/new.erb
118
+ - lib/sidekiq/enqueuer/web_extension.rb
119
+ - sidekiq-enqueuer.gemspec
120
+ homepage: https://github.com/richfisher/sidekiq-enqueuer
121
+ licenses: []
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubyforge_project:
139
+ rubygems_version: 2.4.8
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: A Sidekiq Web extension to enqueue/schedule job in Web UI.
143
+ test_files: []