queue_classic_admin 0.0.13 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 851415209926f178a6e77e82763e314e39e9d186
4
- data.tar.gz: 4e4164c9807cbcafb3d0790aecf996e85bfc235b
3
+ metadata.gz: af3e82cb0e74c8f07092805d70faac50787c24a1
4
+ data.tar.gz: a96d62309d29728cebc1431416adadab9518f870
5
5
  SHA512:
6
- metadata.gz: 628666910f834624a20a69efd19ca3057b503af02ba3b1299502c31359dc94d5c30d6b2dc8f78cbadf8d8489d7de15da1ba0e400a3548e9922d13b3cbed4599d
7
- data.tar.gz: dbdb4cef1c9bf9d473fc2b18c267a6e7cbb28665161053ebfc71ad3a7dd47ed70a4ec3a8f056b227f5f067cb865e0b418d41a73b1539ed595dc3bf235bce8aab
6
+ metadata.gz: 0e3107691428b831903a91f6789019bf1cc1337c0a9be62ffb74efe55f57136efdbe406c5ed7ba83b2eb0b6b0e9c06df6e51b004ff1907b068e3408e14b8a5c9
7
+ data.tar.gz: 96031b1f2af02a9d50b5c11c21e9a4fef5ded8bc7ab1c8cf82ecd4d8b3268eb74e01e9aeef51b4c76fbbfa0d5abff343e424ce0e9c7439a3bac89fc70afc2a80
data/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  An admin interface for the [queue_classic](https://github.com/ryandotsmith/queue_classic) and [queue_classic-later](https://github.com/dpiddy/queue_classic-later) gems.
6
6
 
7
+ **IMPORTANT: this branch is for QueueClassic 3. See the [queueclassic-2-support](https://github.com/dpiddy/queue_classic-later/tree/queueclassic-2-support) branch for prior version support.**
8
+
7
9
  ![qc admin](https://f.cloud.github.com/assets/148622/865030/9b1b2610-f62e-11e2-8908-8c271bfe0f6c.png)
8
10
 
9
11
 
@@ -13,6 +15,7 @@ An admin interface for the [queue_classic](https://github.com/ryandotsmith/queue
13
15
  * Support for custom columns
14
16
  * Delete entire queues
15
17
  * Delete jobs
18
+ * Search
16
19
 
17
20
 
18
21
  # Install
@@ -53,14 +56,21 @@ end
53
56
 
54
57
  # Development
55
58
 
59
+ ```bash
60
+ git clone git@github.com:rainforestapp/queue_classic_admin.git
61
+ ```
62
+
56
63
  You can develop with POW by configuring it like so:
57
64
 
58
65
  ```bash
59
66
  ln -s $PWD/spec/dummy ~/.pow/qc-admin
60
- (cd spec/dummy && rake db:create:all db:migrate)
67
+ (cd spec/dummy && bundle exec rake db:create:all db:migrate)
68
+ # Run the engine's migration.
69
+ bundle exec rake db:migrate
70
+ (cd spec/dummy && bundle exec rake db:schema:dump)
61
71
 
62
72
  ln -s $PWD/spec/dummy-no-later ~/.pow/qc-admin-no-later
63
- (cd spec/dummy-no-later && rake db:create:all db:migrate)
73
+ (cd spec/dummy-no-later && bundle exec rake db:create:all db:migrate)
64
74
  ```
65
75
 
66
76
  Then go to [http://qc-admin.dev/](http://qc-admin.dev/).
@@ -11,7 +11,7 @@ module QueueClassicAdmin
11
11
  @queue_classic_jobs = @queue_classic_jobs.search(params[:search])
12
12
  end
13
13
  if params[:sort].present?
14
- @queue_classic_jobs = @queue_classic_jobs.reorder("#{params[:sort]} #{params[:dir]}")
14
+ @queue_classic_jobs = @queue_classic_jobs.reorder("#{params[:sort]} #{params[:dir]} NULLS LAST")
15
15
  end
16
16
  @queue_classic_jobs
17
17
  end
@@ -2,7 +2,7 @@ require_dependency "queue_classic_admin/application_controller"
2
2
 
3
3
  module QueueClassicAdmin
4
4
  class QueueClassicJobsController < ApplicationController
5
- before_filter :get_job, only: [:destroy, :unlock, :custom]
5
+ before_filter :get_job, only: [:destroy, :unlock, :custom, :show]
6
6
  def index
7
7
  filter_jobs(QueueClassicJob)
8
8
  @queue_classic_jobs = @queue_classic_jobs.paginate(page: params[:page])
@@ -29,6 +29,11 @@ module QueueClassicAdmin
29
29
  redirect_to :back
30
30
  end
31
31
 
32
+ def show
33
+ query = "SELECT * FROM pg_catalog.pg_locks lock JOIN pg_catalog.pg_stat_activity stat ON lock.pid = stat.pid WHERE lock.pid = #{@queue_classic_job.locked_by.to_i}"
34
+ @locks = QueueClassicJob.connection.execute(query)
35
+ end
36
+
32
37
  def custom
33
38
  custom_action = QueueClassicAdmin.custom_actions[params[:custom_action]]
34
39
  custom_action.action.call(@queue_classic_job)
@@ -3,7 +3,7 @@ require 'will_paginate'
3
3
  module QueueClassicAdmin
4
4
  module JobCommon
5
5
  module ClassMethods
6
- KNOWN_COLUMN = ["id", "q_name", "method", "args", "locked_at", "created_at", "not_before"].freeze
6
+ KNOWN_COLUMN = ["id", "q_name", "method", "args", "locked_at", "created_at", "not_before", "locked_by"].freeze
7
7
  SEARCHABLE_COLUMNS = [ :method, :args ].freeze
8
8
 
9
9
  def queue_counts
@@ -19,18 +19,24 @@ module QueueClassicAdmin
19
19
  end
20
20
 
21
21
  def search(query)
22
- sql = searchable_columns.inject([]) do |sql, field|
23
- sql << "#{field} LIKE :query"
24
- end.join(" OR ")
22
+ sql = searchable_columns.map do |field|
23
+ unless field == :args && args_is_json?
24
+ "#{field} LIKE :query"
25
+ end
26
+ end.reject(&:nil?).join(" OR ")
25
27
 
26
28
  wildcard_query = ["%", query, "%"].join
27
29
  relation.where(sql, query: wildcard_query)
28
30
  end
31
+
32
+ def args_is_json?
33
+ self.column_types["args"].type == :json
34
+ end
29
35
  end
30
36
 
31
37
  module InstanceMethods
32
38
  def arguments
33
- if self.class.column_types["args"].type == :json
39
+ if self.class.args_is_json?
34
40
  args
35
41
  else
36
42
  MultiJson.decode(args)
@@ -0,0 +1,15 @@
1
+ <h1>Details for job #<%= @queue_classic_job.id %></h1>
2
+ <% @queue_classic_job.attributes.each do |attr, value| %>
3
+ <p>
4
+ <strong><%= attr %></strong>: <%= value %>
5
+ </p>
6
+ <% end %>
7
+
8
+ <h2>Locks</h2>
9
+ <% if @locks.count == 0 %>
10
+ There are no locks related.
11
+ <% end %>
12
+ <% @locks.each do |lock| %>
13
+ <hr>
14
+ <%= lock %>
15
+ <% end %>
@@ -23,6 +23,7 @@
23
23
  <%= sortable_column :id, "ID" %>
24
24
  <%= sortable_column :created_at, "Enqueued At" %>
25
25
  <%= sortable_column :locked_at, "Locked At" %>
26
+ <%= sortable_column :locked_by, "Locked By" %>
26
27
  <%= sortable_column :method, "Method" %>
27
28
  <%= sortable_column :args, "Arguments" %>
28
29
  <% if @klass.columns_hash['not_before'] %>
@@ -48,25 +49,32 @@
48
49
  <% @queue_classic_jobs.each do |queue_classic_job| %>
49
50
  <tr>
50
51
  <td><%= queue_classic_job.q_name %></td>
51
- <td><%= queue_classic_job.id %></td>
52
+ <td><%= link_to queue_classic_job.id, queue_classic_job %></td>
52
53
  <td>
53
- <%= time_ago_in_words queue_classic_job.created_at %>
54
- <br/>
55
- <small>
56
- (<%= queue_classic_job.created_at %>)
57
- </small>
54
+ <% if queue_classic_job.respond_to?(:created_at) %>
55
+ <%= time_ago_in_words queue_classic_job.created_at %>
56
+ <br/>
57
+ <small>
58
+ (<%= queue_classic_job.created_at %>)
59
+ </small>
60
+ <% else %>
61
+ &mdash;
62
+ <% end %>
58
63
  </td>
59
64
  <td>
60
65
  <% if queue_classic_job[:locked_at].nil? %>
61
- &mdash;
66
+ &mdash;
62
67
  <% else %>
63
- <%= time_ago_in_words queue_classic_job.locked_at %>
64
- <br/>
65
- <small>
66
- (<%= queue_classic_job.locked_at %>)
67
- </small>
68
+ <%= time_ago_in_words queue_classic_job.locked_at %>
69
+ <br/>
70
+ <small>
71
+ (<%= queue_classic_job.locked_at %>)
72
+ </small>
68
73
  <% end %>
69
74
  </td>
75
+ <td>
76
+ <%= queue_classic_job[:locked_by] %>
77
+ </td>
70
78
  <td><%= queue_classic_job.method %></td>
71
79
  <td><%= queue_classic_job.arguments.inspect%></td>
72
80
  <% if @klass.columns_hash['not_before'] %>
@@ -78,10 +86,12 @@
78
86
  <% end %>
79
87
 
80
88
  <td>
89
+ <%= link_to 'Details', queue_classic_job_path(queue_classic_job), class: 'btn btn-info' %>
81
90
  <%= link_to 'Destroy', queue_classic_job, method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-danger' %>
82
91
  <% if queue_classic_job[:locked_at] %>
83
92
  <%= link_to 'Unlock', unlock_queue_classic_job_path(queue_classic_job), method: :post, data: { confirm: 'Are you sure?' }, class: 'btn btn-danger' %>
84
93
  <% end %>
94
+
85
95
  <% QueueClassicAdmin.custom_actions.each do |slug, action| %>
86
96
  <%= link_to action.name, custom_queue_classic_job_path(queue_classic_job, custom_action: slug), method: :post, class: "btn btn-danger" %>
87
97
  <% end %>
data/config/routes.rb CHANGED
@@ -14,6 +14,7 @@ QueueClassicAdmin::Engine.routes.draw do
14
14
  member do
15
15
  post :unlock
16
16
  post :custom
17
+ get :show
17
18
  end
18
19
  end
19
20
 
@@ -1,14 +1,16 @@
1
1
  class AddCreatedColumn < ActiveRecord::Migration
2
2
  def up
3
- %w(queue_classic_later_jobs queue_classic_jobs).each do |table|
4
- if ActiveRecord::Base.connection.table_exists?(:table)
3
+ %w(queue_classic_later_jobs).each do |table|
4
+ if ActiveRecord::Base.connection.table_exists?(table)
5
5
  execute "ALTER TABLE #{table} ADD COLUMN created_at TIMESTAMP NOT NULL DEFAULT now();"
6
+ else
7
+ say "Skiping migration because table #{table} does not exist"
6
8
  end
7
9
  end
8
10
  end
9
11
 
10
12
  def down
11
- %w(queue_classic_later_jobs queue_classic_jobs).each do |table|
13
+ %w(queue_classic_later_jobs).each do |table|
12
14
  remove_column table, :created_at
13
15
  end
14
16
  end
@@ -1,3 +1,3 @@
1
1
  module QueueClassicAdmin
2
- VERSION = "0.0.13"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -2,6 +2,7 @@ require "queue_classic_admin/engine"
2
2
  require "queue_classic_admin/custom_action"
3
3
  require 'will_paginate'
4
4
  require "will_paginate-bootstrap"
5
+ require 'twitter-bootstrap-rails'
5
6
 
6
7
  module QueueClassicAdmin
7
8
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: queue_classic_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.13
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simon Mathieu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-11 00:00:00.000000000 Z
11
+ date: 2014-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.2.13
19
+ version: 4.0.9
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 3.2.13
26
+ version: 4.0.9
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: queue_classic
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 2.1.0
33
+ version: '3.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 2.1.0
40
+ version: '3.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pg
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -87,7 +87,7 @@ dependencies:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
- type: :development
90
+ type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
@@ -136,6 +136,7 @@ files:
136
136
  - app/models/queue_classic_admin/queue_classic_later_job.rb
137
137
  - app/views/layouts/queue_classic_admin/application.html.erb
138
138
  - app/views/queue_classic_admin/queue_classic_jobs/index.html.erb
139
+ - app/views/queue_classic_admin/queue_classic_jobs/show.html.erb
139
140
  - app/views/queue_classic_admin/queue_classic_later_jobs/index.html.erb
140
141
  - app/views/queue_classic_admin/shared/_job_list.html.erb
141
142
  - config/routes.rb