tasks_scheduler 0.7.0 → 0.9.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
  SHA256:
3
- metadata.gz: 9b913be2e2291cc27208e02af8b31c07d85070b73037c1eea24c1f91f45e63a9
4
- data.tar.gz: 2fe374924c6751c1ef33c6c727dea2dfe83dccfd521de2e5a24783691db5d7a4
3
+ metadata.gz: 711a4559c53944035eb7fcf896395defe0932d2e78c2419b40af569fb4682a2e
4
+ data.tar.gz: af431d6229b13c27b84196044d0adcc83afd525d7730df25ab934d327db87e73
5
5
  SHA512:
6
- metadata.gz: 57ddcdd38e84cabcc98419ce1bf8904a0854c43c6d03f3b0edf1c4542dacb52ac0d3367ebd4c714025900a01184d05215cdc23c7cb02683085cfb5dd7a0cce4b
7
- data.tar.gz: 9d151d67c6a38040bde4a78f4021adc646890260f56c8f4172a88397b9fa566c624386eb499df80f4e65489d4beffd19666381fae6549124d0601b549359b065
6
+ metadata.gz: 75ac60b1ca9e6ff19e0826bcb6d8e8a4ae85cbc602fc87be4c0fc674448976d889a82daea6d431ccfbe693467c8091809bb9e8125c32c5b5abfbe1769de654b2
7
+ data.tar.gz: bf183bd19dde6e0b04fe6df6b43fe0a6cdd084f6ec684ed15d98915b4ad397356e65682bb326ee3e67a5049212854868f2b545aeeccf1dcd55cb2de3648ff0c9
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ScheduledTaskStatusesController < ApplicationController
4
+ def log
5
+ record = find_if_allowed(params[:id], :read)
6
+ @log_file = record.log_file(params[:identifier])
7
+ end
8
+
9
+ def index; end
10
+
11
+ def status_content
12
+ @scheduled_tasks = ::ScheduledTask.order(task: :asc, scheduling: :asc)
13
+ render layout: false
14
+ end
15
+ end
@@ -9,6 +9,8 @@ class ScheduledTasksController < ApplicationController
9
9
  end
10
10
  end
11
11
 
12
+ before_action :localize_active_scaffold
13
+
12
14
  active_scaffold :scheduled_task do |conf|
13
15
  %i[create update list].each do |action|
14
16
  conf.send(action).columns.exclude(:next_run, :last_fail_status, :last_run_start,
@@ -19,27 +21,21 @@ class ScheduledTasksController < ApplicationController
19
21
  conf.columns[:task].form_ui = :select
20
22
  conf.columns[:task].options ||= {}
21
23
  conf.columns[:task].options[:options] = task_column_options
22
- conf.action_links.add :run_now, label: I18n.t(:run_now), type: :member,
24
+ conf.action_links.add :run_now, label: :run_now, type: :member,
23
25
  crud_type: :update, method: :put, position: false
24
26
  end
25
27
 
26
- def log
27
- record = find_if_allowed(params[:id], :read)
28
- @log_file = record.log_file(params[:identifier])
29
- end
30
-
31
- def status; end
32
-
33
- def status_content
34
- @scheduled_tasks = ::ScheduledTask.order(task: :asc, scheduling: :asc)
35
- render layout: false
36
- end
37
-
38
28
  def run_now
39
29
  process_action_link_action do |record|
40
30
  record.update!(next_run: Time.zone.now)
41
31
  record.reload
42
- flash[:info] = "Next run adjusted to #{record.next_run}"
32
+ flash.now[:info] = "Next run adjusted to #{record.next_run}"
43
33
  end
44
34
  end
35
+
36
+ private
37
+
38
+ def localize_active_scaffold
39
+ active_scaffold_config.action_links[:run_now].label = ::I18n.t(:run_now)
40
+ end
45
41
  end
@@ -35,7 +35,7 @@ class TasksSchedulerDaemonController < ApplicationController
35
35
  send_file(
36
36
  log.path,
37
37
  filename: "#{request.base_url.parameterize}_tasks-scheduler_checker-log_" \
38
- "#{Time.zone.now.to_s.parameterize}.log",
38
+ "#{Time.zone.now.to_s.parameterize}.log",
39
39
  type: 'text/plain'
40
40
  )
41
41
  end
@@ -19,10 +19,10 @@ class ScheduledTask < ActiveRecord::Base
19
19
  def log_on_start
20
20
  log_file = log_file(LOG_RUNNING)
21
21
  FileUtils.mkdir_p(File.dirname(log_file))
22
- File.unlink(log_file) if File.exist?(log_file)
23
- STDOUT.reopen(log_file, 'w')
24
- STDERR.reopen(log_file, 'w')
25
- Rails.logger = ActiveSupport::Logger.new(STDOUT)
22
+ FileUtils.rm_f(log_file)
23
+ $stdout.reopen(log_file, 'w')
24
+ $stderr.reopen(log_file, 'w')
25
+ Rails.logger = ActiveSupport::Logger.new($stdout)
26
26
  end
27
27
 
28
28
  def log_on_end(exception)
@@ -30,7 +30,7 @@ class ScheduledTask < ActiveRecord::Base
30
30
  return unless ::File.exist?(running_log)
31
31
 
32
32
  target_log = exception ? log_file(LOG_UNSUCCESSFUL) : log_file(LOG_SUCCESSFUL)
33
- File.unlink(target_log) if File.exist?(target_log)
33
+ FileUtils.rm_f(target_log)
34
34
  File.rename(running_log, target_log)
35
35
  end
36
36
  end
@@ -22,10 +22,10 @@ class ScheduledTask < ActiveRecord::Base
22
22
 
23
23
  def timeout
24
24
  @timeout ||= begin
25
- r = Integer(ENV[DEFAULT_TIMEOUT_ENVVAR_NAME])
25
+ r = Integer(ENV.fetch(DEFAULT_TIMEOUT_ENVVAR_NAME, nil))
26
26
  r.positive? ? r.seconds : DEFAULT_TIMEOUT
27
- rescue ArgumentError, TypeError
28
- DEFAULT_TIMEOUT
27
+ rescue ArgumentError, TypeError
28
+ DEFAULT_TIMEOUT
29
29
  end
30
30
  end
31
31
  end
@@ -1,9 +1,8 @@
1
- <%= tasks_scheduler_navbar %>
2
1
  <h2><%= I18n.t(:tasks_scheduler_status) %></h2>
3
2
  <div id="TaskScheduler_Status_Status">
4
3
  </div>
5
4
  <div id="TaskScheduler_Status_Content">
6
5
  </div>
7
6
  <script>
8
- TasksScheduler.Status.init('<%= status_content_scheduled_tasks_path %>', 5);
7
+ TasksScheduler.Status.init('<%= status_content_scheduled_task_statuses_path %>', 5);
9
8
  </script>
@@ -1,4 +1,3 @@
1
- <%= tasks_scheduler_navbar %>
2
1
  <p>Log file: <%= @log_file %></p>
3
2
  <% if File.exist?(@log_file) %>
4
3
  <p>Content: </p>
@@ -1,4 +1,3 @@
1
- <%= tasks_scheduler_navbar %>
2
1
  <h2><%= I18n.t(:tasks_scheduler_daemon) %></h2>
3
2
  <%= render partial: 'daemon', locals: {status_label: 'Status:'} %>
4
3
  <%= render partial: 'logs' %>
@@ -2,8 +2,8 @@
2
2
 
3
3
  require 'eac_rails_utils/patches/application'
4
4
 
5
- ::Rails.application.root_menu.group(:admin).group(:tasks_scheduler).within do |g|
5
+ Rails.application.root_menu.group(:admin).group(:tasks_scheduler).within do |g|
6
6
  g.action :tasks_scheduler_daemon
7
7
  g.action :scheduled_tasks
8
- g.action :status_scheduled_tasks
8
+ g.action :scheduled_task_statuses
9
9
  end
@@ -12,7 +12,7 @@ en:
12
12
  __self: Tasks scheduler
13
13
  main_app_tasks_scheduler_daemon: Daemon
14
14
  main_app_scheduled_tasks: Tasks
15
- main_app_status_scheduled_tasks: Status
15
+ main_app_scheduled_task_statuses: Status
16
16
  helpers:
17
17
  label:
18
18
  scheduled_task:
@@ -12,7 +12,7 @@ pt-BR:
12
12
  __self: 'Agendador de tarefas'
13
13
  main_app_tasks_scheduler_daemon: Daemon
14
14
  main_app_scheduled_tasks: Tarefas
15
- main_app_status_scheduled_tasks: Situação
15
+ main_app_scheduled_task_statuses: Situação
16
16
  helpers:
17
17
  label:
18
18
  scheduled_task:
data/config/routes.rb CHANGED
@@ -1,13 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Rails.application.routes.draw do
4
- resources(:scheduled_tasks, concerns: active_scaffold) do
4
+ resources(:scheduled_task_statuses, only: [:index]) do
5
5
  collection do
6
- get :status
7
6
  get :status_content
8
7
  end
9
8
  member do
10
9
  get :log
10
+ end
11
+ end
12
+ resources(:scheduled_tasks, concerns: active_scaffold) do
13
+ member do
11
14
  put :run_now
12
15
  end
13
16
  end
data/exe/tasks_scheduler CHANGED
@@ -16,8 +16,8 @@ rails_root = find_rails_root
16
16
  dir = File.expand_path('tmp/pids', rails_root)
17
17
  FileUtils.mkdir_p(dir)
18
18
  Daemons.run_proc 'tasks_scheduler', dir_mode: :normal, dir: dir do
19
- ::Dir.chdir(rails_root) do
19
+ Dir.chdir(rails_root) do
20
20
  require File.join(rails_root, 'config', 'environment')
21
- ::TasksScheduler::Checker.instance.run
21
+ TasksScheduler::Checker.instance.run
22
22
  end
23
23
  end
@@ -13,4 +13,4 @@ end
13
13
 
14
14
  rails_root = find_rails_root
15
15
  require File.join(rails_root, 'config', 'environment')
16
- ::ScheduledTask.find(ARGV[0].to_i).run
16
+ ScheduledTask.find(ARGV[0].to_i).run
@@ -7,7 +7,7 @@ module TasksScheduler
7
7
  class Log
8
8
  class << self
9
9
  def logs_directory
10
- @logs_directory ||= ::Rails.root.join('log', 'tasks_scheduler', 'checker')
10
+ @logs_directory ||= ::Rails.root.join('log/tasks_scheduler/checker')
11
11
  end
12
12
  end
13
13
 
@@ -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.order(next_run: :asc).each(&:check)
19
+ ::ScheduledTask.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
@@ -31,7 +31,7 @@ module TasksScheduler
31
31
  end
32
32
 
33
33
  LOGS_KEYS.each do |log_key|
34
- class_eval <<CODE, __FILE__, __LINE__ + 1
34
+ class_eval <<CODE, __FILE__, __LINE__ + 1 # rubocop:disable Style/DocumentDynamicEvalDefinition
35
35
  def #{log_key}_log
36
36
  @#{log_key}_log ||= ::TasksScheduler::Checker::Log.new('#{log_key}')
37
37
  end
@@ -26,6 +26,6 @@ module TasksScheduler
26
26
  end
27
27
  end
28
28
 
29
- unless ::CronParser.included_modules.include?(::TasksScheduler::CronParserPatch)
30
- ::CronParser.include(::TasksScheduler::CronParserPatch)
29
+ unless CronParser.included_modules.include?(TasksScheduler::CronParserPatch)
30
+ CronParser.include(TasksScheduler::CronParserPatch)
31
31
  end
@@ -5,8 +5,8 @@ module TasksScheduler
5
5
  def validate_each(record, attribute, value)
6
6
  return if value_valid?(value)
7
7
 
8
- record.errors[attribute] << (options[:message] ||
9
- I18n.t(:cron_scheduling_validator_error_message))
8
+ record.errors.add(attribute, (options[:message] ||
9
+ I18n.t(:cron_scheduling_validator_error_message)))
10
10
  end
11
11
 
12
12
  private
@@ -11,7 +11,7 @@ module TasksScheduler
11
11
  raise "Action not allowed: #{action} (Allowed: #{ACTIONS})" unless ACTIONS.include?(action)
12
12
 
13
13
  ::TasksScheduler::AppGem.instance.bundle('exec', 'tasks_scheduler', action)
14
- .envvar(::TasksScheduler::Checker::LOG_ON_FILE_ENV_KEY, '1')
14
+ .envvar(::TasksScheduler::Checker::LOG_ON_FILE_ENV_KEY, '1')
15
15
  end
16
16
 
17
17
  def execute(action)
@@ -1,13 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'eac_active_scaffold'
3
+ require 'eac_active_scaffold/engine'
4
+ require 'eac_rails_utils/engine'
5
+ require 'eac_rails_utils/engine_helper'
4
6
 
5
7
  module TasksScheduler
6
8
  class Engine < ::Rails::Engine
7
- initializer :append_migrations do |app|
8
- config.paths['db/migrate'].expanded.each do |expanded_path|
9
- app.config.paths['db/migrate'] << expanded_path
10
- end
11
- end
9
+ include ::EacRailsUtils::EngineHelper
12
10
  end
13
11
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TasksScheduler
4
- VERSION = '0.7.0'
4
+ VERSION = '0.9.0'
5
5
  end
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.7.0
4
+ version: 0.9.0
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: 2023-09-18 00:00:00.000000000 Z
11
+ date: 2024-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avm-eac_ruby_base1
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.31'
19
+ version: '0.33'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.31.2
22
+ version: 0.33.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '0.31'
29
+ version: '0.33'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.31.2
32
+ version: 0.33.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: daemons
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -56,54 +56,48 @@ dependencies:
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '0.5'
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 0.5.1
59
+ version: '0.6'
63
60
  type: :runtime
64
61
  prerelease: false
65
62
  version_requirements: !ruby/object:Gem::Requirement
66
63
  requirements:
67
64
  - - "~>"
68
65
  - !ruby/object:Gem::Version
69
- version: '0.5'
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 0.5.1
66
+ version: '0.6'
73
67
  - !ruby/object:Gem::Dependency
74
68
  name: eac_rails_utils
75
69
  requirement: !ruby/object:Gem::Requirement
76
70
  requirements:
77
71
  - - "~>"
78
72
  - !ruby/object:Gem::Version
79
- version: '0.22'
73
+ version: '0.23'
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 0.23.2
80
77
  type: :runtime
81
78
  prerelease: false
82
79
  version_requirements: !ruby/object:Gem::Requirement
83
80
  requirements:
84
81
  - - "~>"
85
82
  - !ruby/object:Gem::Version
86
- version: '0.22'
83
+ version: '0.23'
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 0.23.2
87
87
  - !ruby/object:Gem::Dependency
88
88
  name: eac_ruby_utils
89
89
  requirement: !ruby/object:Gem::Requirement
90
90
  requirements:
91
91
  - - "~>"
92
92
  - !ruby/object:Gem::Version
93
- version: '0.119'
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: 0.119.2
93
+ version: '0.121'
97
94
  type: :runtime
98
95
  prerelease: false
99
96
  version_requirements: !ruby/object:Gem::Requirement
100
97
  requirements:
101
98
  - - "~>"
102
99
  - !ruby/object:Gem::Version
103
- version: '0.119'
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: 0.119.2
100
+ version: '0.121'
107
101
  - !ruby/object:Gem::Dependency
108
102
  name: parse-cron
109
103
  requirement: !ruby/object:Gem::Requirement
@@ -124,34 +118,26 @@ dependencies:
124
118
  - - ">="
125
119
  - !ruby/object:Gem::Version
126
120
  version: 0.1.4
127
- - !ruby/object:Gem::Dependency
128
- name: rails
129
- requirement: !ruby/object:Gem::Requirement
130
- requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- version: 4.2.11
134
- type: :runtime
135
- prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- requirements:
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- version: 4.2.11
141
121
  - !ruby/object:Gem::Dependency
142
122
  name: eac_rails_gem_support
143
123
  requirement: !ruby/object:Gem::Requirement
144
124
  requirements:
145
125
  - - "~>"
146
126
  - !ruby/object:Gem::Version
147
- version: 0.7.2
127
+ version: '0.10'
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 0.10.1
148
131
  type: :development
149
132
  prerelease: false
150
133
  version_requirements: !ruby/object:Gem::Requirement
151
134
  requirements:
152
135
  - - "~>"
153
136
  - !ruby/object:Gem::Version
154
- version: 0.7.2
137
+ version: '0.10'
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 0.10.1
155
141
  description:
156
142
  email:
157
143
  - eduardobogoni@gmail.com
@@ -169,20 +155,19 @@ files:
169
155
  - app/assets/javascripts/tasks_scheduler/status.js
170
156
  - app/assets/stylesheets/tasks_scheduler.scss
171
157
  - app/assets/stylesheets/tasks_scheduler/alert.scss
158
+ - app/controllers/scheduled_task_statuses_controller.rb
172
159
  - app/controllers/scheduled_tasks_controller.rb
173
160
  - app/controllers/tasks_scheduler_daemon_controller.rb
174
161
  - app/controllers/tasks_scheduler_daemon_controller/_download_log.rb
175
162
  - app/helpers/scheduled_tasks_helper.rb
176
- - app/helpers/tasks_scheduler_helper.rb
177
163
  - app/models/scheduled_task.rb
178
164
  - app/models/scheduled_task/checker.rb
179
165
  - app/models/scheduled_task/log.rb
180
166
  - app/models/scheduled_task/runner.rb
181
167
  - app/models/scheduled_task/status.rb
182
- - app/views/scheduled_tasks/list.html.erb
183
- - app/views/scheduled_tasks/log.html.erb
184
- - app/views/scheduled_tasks/status.html.erb
185
- - app/views/scheduled_tasks/status_content.html.erb
168
+ - app/views/scheduled_task_statuses/index.html.erb
169
+ - app/views/scheduled_task_statuses/log.html.erb
170
+ - app/views/scheduled_task_statuses/status_content.html.erb
186
171
  - app/views/tasks_scheduler/_alert.html.erb
187
172
  - app/views/tasks_scheduler_daemon/_daemon.html.erb
188
173
  - app/views/tasks_scheduler_daemon/_logs.html.erb
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module TasksSchedulerHelper
4
- def tasks_scheduler_navbar
5
- tag.navbar do
6
- safe_join(tasks_scheduler_navbar_entries.map { |label, path| link_to label, path }, ' | ')
7
- end
8
- end
9
-
10
- def tasks_scheduler_navbar_entries
11
- ::Rails.application.root_menu.sub(:admin).sub(:tasks_scheduler).children
12
- .map { |child| [child.label, child.view_path(self)] }
13
- .to_h
14
- end
15
- end
@@ -1,2 +0,0 @@
1
- <%= tasks_scheduler_navbar %>
2
- <%= render :super %>