tasks_scheduler 0.7.0 → 0.9.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
  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 %>