foreman-tasks 0.14.4 → 0.14.5
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f651b03116f8e483229e92bad65056ad96c2e1922850d0dd93f5a347d0f34f46
|
4
|
+
data.tar.gz: 8f1fa49ba1dcd42f2c4508e2dd4d12a981a7fdd5c6233f48d76770276d47ad55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93904ebc7747a5aa2e49862c243b7330eb1d804fe4d5c58fc87da036e052c8c3cd088bbcf7d25d4d12b41118d0398f0ab2d923c846369368af1b8602e89b079a
|
7
|
+
data.tar.gz: 83eac16d2413eb0aab6e2a14eb618ff570e4aada7aa9b1c3f80ddded23cd53303ca77c9b569b9af7638782445d5b59fed490df9d0c31e451c53f78d7eda34373
|
@@ -83,6 +83,9 @@ module ForemanTasks
|
|
83
83
|
|
84
84
|
def next_occurrence_time(time = Time.zone.now)
|
85
85
|
@parser ||= CronParser.new(cron_line, Time.zone)
|
86
|
+
# @parser.next(start_time) is not inclusive of the start_time hence stepping back one run to include checking start_time for the first run.
|
87
|
+
before_next = @parser.next(@parser.last(time))
|
88
|
+
return before_next if before_next >= time && tasks.count == 0
|
86
89
|
@parser.next(time)
|
87
90
|
end
|
88
91
|
|
data/extra/dynflow-debug.sh
CHANGED
@@ -31,10 +31,10 @@ add_files /var/log/foreman/dynflow_executor*.output*
|
|
31
31
|
# Foreman Tasks fast export (Postgresql only; for HTML version use foreman-rake foreman_tasks:export_tasks)
|
32
32
|
|
33
33
|
if [ "$FOREMAN_DB_ADAPTER" == "postgresql" ]; then
|
34
|
-
export_csv "select dynflow_execution_plans.* from foreman_tasks_tasks join dynflow_execution_plans on (foreman_tasks_tasks.external_id = dynflow_execution_plans.uuid) where foreman_tasks_tasks.started_at > 'now'::timestamp - '${DYNFLOW_EXPORT_MONTHS:-
|
35
|
-
export_csv "select dynflow_actions.* from foreman_tasks_tasks join dynflow_actions on (foreman_tasks_tasks.external_id = dynflow_actions.execution_plan_uuid) where foreman_tasks_tasks.started_at > 'now'::timestamp - '${DYNFLOW_EXPORT_MONTHS:-
|
36
|
-
export_csv "select dynflow_steps.* from foreman_tasks_tasks join dynflow_steps on (foreman_tasks_tasks.external_id = dynflow_steps.execution_plan_uuid) where foreman_tasks_tasks.started_at > 'now'::timestamp - '${DYNFLOW_EXPORT_MONTHS:-
|
34
|
+
export_csv "select dynflow_execution_plans.* from foreman_tasks_tasks join dynflow_execution_plans on (foreman_tasks_tasks.external_id = dynflow_execution_plans.uuid) where foreman_tasks_tasks.started_at > 'now'::timestamp - '${DYNFLOW_EXPORT_MONTHS:-1} months'::interval limit ${DYNFLOW_EXPORT_LIMIT:-100000}" "$DIR/dynflow_execution_plans.csv"
|
35
|
+
export_csv "select dynflow_actions.* from foreman_tasks_tasks join dynflow_actions on (foreman_tasks_tasks.external_id = dynflow_actions.execution_plan_uuid) where foreman_tasks_tasks.started_at > 'now'::timestamp - '${DYNFLOW_EXPORT_MONTHS:-1} months'::interval limit ${DYNFLOW_EXPORT_LIMIT:-100000}" "$DIR/dynflow_actions.csv"
|
36
|
+
export_csv "select dynflow_steps.* from foreman_tasks_tasks join dynflow_steps on (foreman_tasks_tasks.external_id = dynflow_steps.execution_plan_uuid) where foreman_tasks_tasks.started_at > 'now'::timestamp - '${DYNFLOW_EXPORT_MONTHS:-1} months'::interval limit ${DYNFLOW_EXPORT_LIMIT:-100000}" "$DIR/dynflow_steps.csv"
|
37
37
|
export_csv "select * from dynflow_schema_info" "$DIR/dynflow_schema_info.csv"
|
38
|
-
export_csv "select * from foreman_tasks_tasks" "$DIR/foreman_tasks_tasks.csv"
|
38
|
+
export_csv "select * from foreman_tasks_tasks limit ${DYNFLOW_EXPORT_LIMIT:-100000}" "$DIR/foreman_tasks_tasks.csv"
|
39
39
|
fi
|
40
40
|
|
@@ -7,13 +7,13 @@ module Support
|
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@log = Hash.new { |h, k| h[k] = [] }
|
10
|
-
@task_triggered = Concurrent.future
|
10
|
+
@task_triggered = defined?(Concurrent::Promises) ? Concurrent::Promises.resolvable_future : Concurrent.future
|
11
11
|
@uuid = SecureRandom.uuid
|
12
12
|
end
|
13
13
|
|
14
14
|
def trigger_task(*args)
|
15
15
|
@log[:trigger_task] << args
|
16
|
-
@task_triggered.success(true)
|
16
|
+
defined?(Concurrent::Promises) ? @task_triggered.fulfill(true) : @task_triggered.success(true)
|
17
17
|
{ 'task_id' => @uuid }
|
18
18
|
end
|
19
19
|
|
@@ -25,9 +25,9 @@ class RecurringLogicsTest < ActiveSupport::TestCase
|
|
25
25
|
minute = 0
|
26
26
|
reference_time = Time.utc(year, month, day, hour, minute)
|
27
27
|
parser = ForemanTasks::RecurringLogic.new_from_cronline('* * * * *')
|
28
|
-
parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month, day, hour, minute
|
28
|
+
parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month, day, hour, minute)
|
29
29
|
parser = ForemanTasks::RecurringLogic.new_from_cronline('*/2 * * * *')
|
30
|
-
parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month, day, hour, minute
|
30
|
+
parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month, day, hour, minute)
|
31
31
|
parser = ForemanTasks::RecurringLogic.new_from_cronline('*/2 18,19 * * *')
|
32
32
|
parser.next_occurrence_time(reference_time).must_equal Time.utc(year, month, day, 18)
|
33
33
|
parser = ForemanTasks::RecurringLogic.new_from_cronline('*/2 18,19 10 * *')
|
@@ -75,7 +75,7 @@ class RecurringLogicsTest < ActiveSupport::TestCase
|
|
75
75
|
parser = ForemanTasks::RecurringLogic.new_from_cronline('* * * * *')
|
76
76
|
parser.stubs(:id).returns(1)
|
77
77
|
reference_time = Time.utc(2015, 9, 29, 15)
|
78
|
-
expected_hash = { :start_at => reference_time
|
78
|
+
expected_hash = { :start_at => reference_time, :start_before => nil, :recurring_logic_id => parser.id, :frozen => false }
|
79
79
|
parser.generate_delay_options(reference_time).must_equal expected_hash
|
80
80
|
parser.generate_delay_options(reference_time, 'start_before' => reference_time + 3600)
|
81
81
|
.must_equal expected_hash.merge(:start_before => reference_time + 3600)
|
@@ -90,15 +90,21 @@ class RecurringLogicsTest < ActiveSupport::TestCase
|
|
90
90
|
|
91
91
|
it 'can start at' do
|
92
92
|
recurring_logic = ForemanTasks::RecurringLogic.new_from_cronline('* * * * *')
|
93
|
-
|
94
|
-
future_time = Time.zone.now + 1.week
|
93
|
+
future_time = (Time.zone.now + 1.week).change(:sec => 0)
|
95
94
|
recurring_logic.start_after(::Support::DummyRecurringDynflowAction, future_time)
|
96
|
-
|
97
|
-
|
98
|
-
target_time = (future_time + 1.minute).change(:sec => 0)
|
95
|
+
# Able to start at same time as it is valid for * * * * *
|
96
|
+
target_time = future_time
|
99
97
|
assert_equal target_time, recurring_logic.tasks.first.start_at
|
100
98
|
end
|
101
99
|
|
100
|
+
it 'can start at scheduled time' do
|
101
|
+
future_time = (Time.zone.now + 2.minutes).change(:sec => 0)
|
102
|
+
cron = future_time.min.to_s + " * * * *"
|
103
|
+
recurring_logic = ForemanTasks::RecurringLogic.new_from_cronline(cron)
|
104
|
+
recurring_logic.start_after(::Support::DummyRecurringDynflowAction, future_time)
|
105
|
+
assert_equal future_time, recurring_logic.tasks.first.start_at
|
106
|
+
end
|
107
|
+
|
102
108
|
it 'has a task group associated to all tasks that were created as part of the recurring logic' do
|
103
109
|
recurring_logic = ForemanTasks::RecurringLogic.new_from_cronline('* * * * *')
|
104
110
|
recurring_logic.save
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman-tasks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.14.
|
4
|
+
version: 0.14.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Nečas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: foreman-tasks-core
|
@@ -300,7 +300,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
300
300
|
version: '0'
|
301
301
|
requirements: []
|
302
302
|
rubyforge_project:
|
303
|
-
rubygems_version: 2.7.
|
303
|
+
rubygems_version: 2.7.3
|
304
304
|
signing_key:
|
305
305
|
specification_version: 4
|
306
306
|
summary: Foreman plugin for showing tasks information for resoruces and users
|