tasks_scheduler 0.5.2 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1990d0ec938668f01704d530a1797027f84ae24771f22ec716051176032039d9
4
- data.tar.gz: 66bab115b2e5fa8f0aeb837ff9549b5a3779fbd9637733521f5f4800239d9fcb
3
+ metadata.gz: 7c175f5d68102231223e0d0b132c1d8ee5e36e73d39c9fa8750ca6b68aff0d57
4
+ data.tar.gz: b83338a7c27496daff792fa9ae20f2c1388315c976751aa99ee87d39353ae096
5
5
  SHA512:
6
- metadata.gz: bc08c8c498e0179d205f23bf6b7107e4f9db245857bcce37a0956ad73d14ef45d7ff0300a9140dc25e9976c7636c4f442a7a8af374bf84a4cb7d8c89fe988b1d
7
- data.tar.gz: af0434d46a4ef3fecc00d177132f0cd2a7b1717853113ec0327c3d798fc1a24f1b7e55f3daa1e511aa31e1754deae4fc7af37393826d624834bf90d30eb3b242
6
+ metadata.gz: b979e6bf097cfdb701ff8655f628fa69001a5fcf4523b4ebd8b8ae975447a400fa1c504b449b9aa73ff61d0009e2d9c5efc800579c9a10676ff8d0f12eef2fb5
7
+ data.tar.gz: 0046c58bf789375875cfa22810ca1bf6262c68c492b374f04688e674191aaea30f68cd7d5da3b14b764c9c2c3fd534188447dd9c8f64fbb6c4fb2448e96d6fa4
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TasksSchedulerHelper
4
+ NAVBAR_ENTRIES = {
5
+ tasks_scheduler_daemon: 'tasks_scheduler_daemon',
6
+ scheduled_tasks: 'scheduled_tasks',
7
+ tasks_scheduler_status: :status_scheduled_tasks
8
+ }.freeze
9
+
10
+ def tasks_scheduler_navbar
11
+ content_tag(:navbar) do
12
+ safe_join(tasks_scheduler_navbar_entries.map { |label, path| link_to label, path }, ' | ')
13
+ end
14
+ end
15
+
16
+ def tasks_scheduler_navbar_entries
17
+ NAVBAR_ENTRIES
18
+ .map { |i18n_key, path_name| [::I18n.t(i18n_key), send("#{path_name}_path")] }
19
+ .to_h
20
+ end
21
+ end
@@ -61,6 +61,8 @@ class ScheduledTask < ActiveRecord::Base
61
61
  check_log("Running? #{process_running?}")
62
62
  check_log("Last fail status: #{last_fail_status}")
63
63
  check_log("Enabled: #{enabled?}")
64
+ check_log("Tasks running: #{::TasksScheduler::Info.tasks_running_current}/" +
65
+ ::TasksScheduler::Info.tasks_running_limit.to_s)
64
66
  end
65
67
 
66
68
  def check_task_without_next_run
@@ -72,11 +74,13 @@ class ScheduledTask < ActiveRecord::Base
72
74
  def check_task_with_next_run
73
75
  if !task_exist?
74
76
  check_on_task_not_exist
75
- elsif next_run < Time.zone.now
77
+ elsif next_run >= Time.zone.now
78
+ check_log('Next run not reached')
79
+ elsif !::TasksScheduler::Info.can_run_new_task?
80
+ check_log('Running tasks limit reached. Waiting...')
81
+ else
76
82
  check_log('Next run reached. Running...')
77
83
  spawn_task
78
- else
79
- check_log('Next run not reached')
80
84
  end
81
85
  end
82
86
 
@@ -1,2 +1,2 @@
1
- <%= render partial: '/tasks_scheduler/navbar' %>
1
+ <%= tasks_scheduler_navbar %>
2
2
  <%= render :super %>
@@ -1,3 +1,4 @@
1
+ <%= tasks_scheduler_navbar %>
1
2
  <p>Log file: <%= @log_file %></p>
2
3
  <% if File.exist?(@log_file) %>
3
4
  <p>Content: </p>
@@ -1,4 +1,4 @@
1
- <%= render partial: '/tasks_scheduler/navbar' %>
1
+ <%= tasks_scheduler_navbar %>
2
2
  <h2><%= I18n.t(:tasks_scheduler_status) %></h2>
3
3
  <div id="TaskScheduler_Status_Status">
4
4
  </div>
@@ -4,6 +4,10 @@
4
4
  <br/>
5
5
  <strong>Daemon status: </strong>
6
6
  <%= render partial: '/tasks_scheduler_daemon/running_status' %>
7
+ <br/>
8
+ <strong>Tasks running/limit: </strong>
9
+ <%= ::TasksScheduler::Info.tasks_running_current %> /
10
+ <%= ::TasksScheduler::Info.tasks_running_limit %>
7
11
  </p>
8
12
  <table>
9
13
  <thead>
@@ -1,4 +1,4 @@
1
- <%= render partial: '/tasks_scheduler/navbar' %>
1
+ <%= tasks_scheduler_navbar %>
2
2
  <h2><%= I18n.t(:tasks_scheduler_daemon) %></h2>
3
3
  <%= render partial: 'daemon', locals: {status_label: 'Status:'} %>
4
4
  <%= render partial: 'logs' %>
data/config/routes.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Rails.application.routes.draw do
4
- resources(:scheduled_tasks) do
5
- as_routes
4
+ concern :active_scaffold, ActiveScaffold::Routing::Basic.new(association: true)
5
+ resources(:scheduled_tasks, concerns: :active_scaffold) do
6
6
  collection do
7
7
  get :status
8
8
  get :status_content
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class CreateScheduledTasks < (
4
- Rails.version < '5.2' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
4
+ Rails.version < '5' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
5
5
  )
6
6
  def change
7
7
  create_table :scheduled_tasks do |t|
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class AddStatusAttributesToScheduledTasks < (
4
- Rails.version < '5.2' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
4
+ Rails.version < '5' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
5
5
  )
6
6
  def change
7
7
  add_column :scheduled_tasks, :last_run_start, :datetime
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class AddPidToScheduledTasks < (
4
- Rails.version < '5.2' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
4
+ Rails.version < '5' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
5
5
  )
6
6
  def change
7
7
  add_column :scheduled_tasks, :pid, :integer
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class AddArgsToScheduledTasks < (
4
- Rails.version < '5.2' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
4
+ Rails.version < '5' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
5
5
  )
6
6
  def change
7
7
  add_column :scheduled_tasks, :args, :string
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class AddLastFailStatusToScheduledTasks < (
4
- Rails.version < '5.2' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
4
+ Rails.version < '5' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
5
5
  )
6
6
  def change
7
7
  add_column :scheduled_tasks, :last_fail_status, :string
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class AddEnabledToScheduledTasks < (
4
- Rails.version < '5.2' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
4
+ Rails.version < '5' ? ActiveRecord::Migration : ActiveRecord::Migration[4.2]
5
5
  )
6
6
  def change
7
7
  add_column :scheduled_tasks, :enabled, :boolean, null: false, default: true
@@ -16,7 +16,7 @@ module TasksScheduler
16
16
  Signal.trap('TERM') { running = false }
17
17
  while running
18
18
  Rails.logger.info('Checking all tasks...')
19
- ::ScheduledTask.all.each(&:check)
19
+ ::ScheduledTask.all.order(next_run: :asc).each(&:check)
20
20
  Rails.logger.info("All tasks checked. Sleeping for #{CHECK_INTERVAL} second(s)...")
21
21
  sleep(CHECK_INTERVAL)
22
22
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TasksScheduler
4
+ class Info
5
+ TASKS_LIMIT_KEY = 'TASKS_SCHEDULER_TASKS_LIMIT'
6
+ TASKS_LIMIT_DEFAULT_VALUE = '-1'
7
+
8
+ class << self
9
+ def can_run_new_task?
10
+ return true if tasks_running_limit.negative?
11
+
12
+ tasks_running_current < tasks_running_limit
13
+ end
14
+
15
+ def tasks_running_current
16
+ ::ScheduledTask.all.select(&:process_running?).count
17
+ end
18
+
19
+ def tasks_running_limit
20
+ ENV[TASKS_LIMIT_KEY].if_present(TASKS_LIMIT_DEFAULT_VALUE, &:to_i)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TasksScheduler
4
- VERSION = '0.5.2'
4
+ VERSION = '0.6.2'
5
5
  end
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tasks_scheduler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-14 00:00:00.000000000 Z
11
+ date: 2021-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_scaffold
@@ -64,28 +64,40 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '0.43'
67
+ version: '0.56'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 0.56.1
68
71
  type: :runtime
69
72
  prerelease: false
70
73
  version_requirements: !ruby/object:Gem::Requirement
71
74
  requirements:
72
75
  - - "~>"
73
76
  - !ruby/object:Gem::Version
74
- version: '0.43'
77
+ version: '0.56'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 0.56.1
75
81
  - !ruby/object:Gem::Dependency
76
82
  name: js-routes
77
83
  requirement: !ruby/object:Gem::Requirement
78
84
  requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '1.4'
79
88
  - - ">="
80
89
  - !ruby/object:Gem::Version
81
- version: '0'
90
+ version: 1.4.14
82
91
  type: :runtime
83
92
  prerelease: false
84
93
  version_requirements: !ruby/object:Gem::Requirement
85
94
  requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1.4'
86
98
  - - ">="
87
99
  - !ruby/object:Gem::Version
88
- version: '0'
100
+ version: 1.4.14
89
101
  - !ruby/object:Gem::Dependency
90
102
  name: parse-cron
91
103
  requirement: !ruby/object:Gem::Requirement
@@ -106,34 +118,28 @@ dependencies:
106
118
  requirements:
107
119
  - - ">="
108
120
  - !ruby/object:Gem::Version
109
- version: 4.2.11.3
121
+ version: 4.2.11
110
122
  type: :runtime
111
123
  prerelease: false
112
124
  version_requirements: !ruby/object:Gem::Requirement
113
125
  requirements:
114
126
  - - ">="
115
127
  - !ruby/object:Gem::Version
116
- version: 4.2.11.3
128
+ version: 4.2.11
117
129
  - !ruby/object:Gem::Dependency
118
130
  name: eac_ruby_gem_support
119
131
  requirement: !ruby/object:Gem::Requirement
120
132
  requirements:
121
133
  - - "~>"
122
134
  - !ruby/object:Gem::Version
123
- version: '0.1'
124
- - - ">="
125
- - !ruby/object:Gem::Version
126
- version: 0.1.1
135
+ version: '0.2'
127
136
  type: :development
128
137
  prerelease: false
129
138
  version_requirements: !ruby/object:Gem::Requirement
130
139
  requirements:
131
140
  - - "~>"
132
141
  - !ruby/object:Gem::Version
133
- version: '0.1'
134
- - - ">="
135
- - !ruby/object:Gem::Version
136
- version: 0.1.1
142
+ version: '0.2'
137
143
  - !ruby/object:Gem::Dependency
138
144
  name: sqlite3
139
145
  requirement: !ruby/object:Gem::Requirement
@@ -169,6 +175,7 @@ files:
169
175
  - app/controllers/tasks_scheduler_daemon_controller.rb
170
176
  - app/controllers/tasks_scheduler_daemon_controller/_download_log.rb
171
177
  - app/helpers/scheduled_tasks_helper.rb
178
+ - app/helpers/tasks_scheduler_helper.rb
172
179
  - app/models/scheduled_task.rb
173
180
  - app/models/scheduled_task/checker.rb
174
181
  - app/models/scheduled_task/log.rb
@@ -179,7 +186,6 @@ files:
179
186
  - app/views/scheduled_tasks/status.html.erb
180
187
  - app/views/scheduled_tasks/status_content.html.erb
181
188
  - app/views/tasks_scheduler/_alert.html.erb
182
- - app/views/tasks_scheduler/_navbar.html.erb
183
189
  - app/views/tasks_scheduler_daemon/_daemon.html.erb
184
190
  - app/views/tasks_scheduler_daemon/_logs.html.erb
185
191
  - app/views/tasks_scheduler_daemon/_results.html.erb
@@ -205,9 +211,11 @@ files:
205
211
  - lib/tasks_scheduler/cron_scheduling_validator.rb
206
212
  - lib/tasks_scheduler/daemon.rb
207
213
  - lib/tasks_scheduler/engine.rb
214
+ - lib/tasks_scheduler/info.rb
208
215
  - lib/tasks_scheduler/version.rb
209
216
  - test/dummy/README.rdoc
210
217
  - test/dummy/Rakefile
218
+ - test/dummy/app/assets/config/manifest.js
211
219
  - test/dummy/app/assets/javascripts/application.js
212
220
  - test/dummy/app/assets/stylesheets/application.css
213
221
  - test/dummy/app/controllers/application_controller.rb
@@ -263,7 +271,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
263
271
  - !ruby/object:Gem::Version
264
272
  version: '0'
265
273
  requirements: []
266
- rubygems_version: 3.0.8
274
+ rubygems_version: 3.0.9
267
275
  signing_key:
268
276
  specification_version: 4
269
277
  summary: Scheduler for Rake tasks.
@@ -293,6 +301,7 @@ test_files:
293
301
  - test/dummy/app/views/layouts/application.html.erb
294
302
  - test/dummy/app/controllers/application_controller.rb
295
303
  - test/dummy/app/helpers/application_helper.rb
304
+ - test/dummy/app/assets/config/manifest.js
296
305
  - test/dummy/app/assets/stylesheets/application.css
297
306
  - test/dummy/app/assets/javascripts/application.js
298
307
  - test/dummy/public/422.html
@@ -1,5 +0,0 @@
1
- <navbar>
2
- <%= link_to I18n.t(:tasks_scheduler_daemon), tasks_scheduler_daemon_path %> |
3
- <%= link_to I18n.t(:scheduled_tasks), scheduled_tasks_path %> |
4
- <%= link_to I18n.t(:tasks_scheduler_status), status_scheduled_tasks_path %>
5
- </navbar>