foreman-tasks 3.0.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/js_tests.yml +5 -1
  3. data/app/controllers/foreman_tasks/api/tasks_controller.rb +19 -5
  4. data/app/lib/actions/entry_action.rb +8 -4
  5. data/app/lib/actions/helpers/lock.rb +11 -5
  6. data/app/lib/actions/middleware/keep_current_request_id.rb +4 -1
  7. data/app/lib/actions/middleware/keep_current_user.rb +11 -1
  8. data/app/lib/actions/observable_action.rb +80 -0
  9. data/app/models/foreman_tasks/concerns/action_subject.rb +0 -6
  10. data/app/models/foreman_tasks/link.rb +60 -0
  11. data/app/models/foreman_tasks/lock.rb +30 -128
  12. data/app/models/foreman_tasks/recurring_logic.rb +3 -3
  13. data/app/models/foreman_tasks/task.rb +20 -7
  14. data/app/models/foreman_tasks/task/search.rb +7 -6
  15. data/app/models/setting/foreman_tasks.rb +8 -8
  16. data/app/services/foreman_tasks/dashboard_table_filter.rb +5 -1
  17. data/app/views/foreman_tasks/api/locks/show.json.rabl +4 -0
  18. data/app/views/foreman_tasks/api/tasks/details.json.rabl +5 -3
  19. data/app/views/foreman_tasks/layouts/react.html.erb +1 -2
  20. data/app/views/foreman_tasks/tasks/_lock_card.html.erb +10 -0
  21. data/app/views/foreman_tasks/tasks/dashboard/_latest_tasks_in_error_warning.html.erb +1 -1
  22. data/app/views/foreman_tasks/tasks/dashboard/_tasks_status.html.erb +1 -1
  23. data/app/views/foreman_tasks/tasks/show.html.erb +1 -6
  24. data/db/migrate/20181206123910_create_foreman_tasks_links.foreman_tasks.rb +26 -0
  25. data/db/migrate/20181206124952_migrate_non_exclusive_locks_to_links.foreman_tasks.rb +14 -0
  26. data/db/migrate/20181206131436_drop_old_locks.foreman_tasks.rb +20 -0
  27. data/db/migrate/20181206131627_make_locks_exclusive.foreman_tasks.rb +25 -0
  28. data/foreman-tasks.gemspec +1 -0
  29. data/lib/foreman_tasks/cleaner.rb +10 -0
  30. data/lib/foreman_tasks/engine.rb +5 -2
  31. data/lib/foreman_tasks/tasks/export_tasks.rake +2 -2
  32. data/lib/foreman_tasks/version.rb +1 -1
  33. data/package.json +6 -6
  34. data/test/controllers/api/tasks_controller_test.rb +10 -0
  35. data/test/controllers/tasks_controller_test.rb +1 -1
  36. data/test/unit/actions/action_with_sub_plans_test.rb +5 -2
  37. data/test/unit/cleaner_test.rb +4 -4
  38. data/test/unit/locking_test.rb +85 -0
  39. data/test/unit/recurring_logic_test.rb +6 -0
  40. data/test/unit/task_test.rb +10 -0
  41. data/webpack/ForemanTasks/Components/TaskDetails/Components/Locks.js +2 -2
  42. data/webpack/ForemanTasks/Components/TaskDetails/Components/TaskInfo.js +3 -2
  43. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Locks.test.js.snap +4 -4
  44. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/TaskInfo.test.js.snap +2 -0
  45. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetails.js +4 -1
  46. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetails.scss +14 -0
  47. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsSelectors.js +3 -0
  48. data/webpack/ForemanTasks/Components/TaskDetails/index.js +2 -0
  49. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.scss +4 -0
  50. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/OtherInfo.js +53 -0
  51. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/OtherInfo.test.js +14 -0
  52. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.js +27 -19
  53. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.scss +14 -0
  54. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.test.js +1 -34
  55. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/{StoppedTasksCardHelper.js → StoppedTasksCardTable.js} +28 -1
  56. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCardTable.test.js +54 -0
  57. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/__snapshots__/OtherInfo.test.js.snap +48 -0
  58. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/__snapshots__/StoppedTasksCard.test.js.snap +60 -1367
  59. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/__snapshots__/StoppedTasksCardTable.test.js.snap +960 -0
  60. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/__snapshots__/TasksCardsGrid.test.js.snap +14 -11
  61. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardConstants.js +2 -0
  62. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardSelectors.js +17 -11
  63. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardSelectors.test.js +26 -14
  64. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/__snapshots__/TasksDashboard.test.js.snap +14 -11
  65. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/__snapshots__/TasksDashboardSelectors.test.js.snap +38 -22
  66. data/webpack/ForemanTasks/Components/TasksTable/TasksTableHelpers.js +0 -8
  67. data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.js +13 -4
  68. data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.scss +4 -13
  69. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTablePage.test.js.snap +2 -4
  70. data/webpack/ForemanTasks/Components/TasksTable/formatters/__test__/__snapshots__/actionNameCellFormatter.test.js.snap +1 -0
  71. data/webpack/ForemanTasks/Components/TasksTable/formatters/actionNameCellFormatter.js +5 -1
  72. metadata +24 -11
  73. data/app/assets/stylesheets/foreman_tasks/tasks.scss +0 -9
  74. data/test/unit/lock_test.rb +0 -22
@@ -57,17 +57,20 @@ exports[`TasksCardsGrid render with minimal props 1`] = `
57
57
  className=""
58
58
  data={
59
59
  Object {
60
- "error": Object {
61
- "last": 0,
62
- "total": 0,
63
- },
64
- "success": Object {
65
- "last": 0,
66
- "total": 0,
67
- },
68
- "warning": Object {
69
- "last": 0,
70
- "total": 0,
60
+ "other": 0,
61
+ "results": Object {
62
+ "error": Object {
63
+ "last": 0,
64
+ "total": 0,
65
+ },
66
+ "success": Object {
67
+ "last": 0,
68
+ "total": 0,
69
+ },
70
+ "warning": Object {
71
+ "last": 0,
72
+ "total": 0,
73
+ },
71
74
  },
72
75
  }
73
76
  }
@@ -11,6 +11,7 @@ export const TASKS_DASHBOARD_AVAILABLE_QUERY_RESULTS = {
11
11
  ERROR: 'error',
12
12
  WARNING: 'warning',
13
13
  SUCCESS: 'success',
14
+ OTHER: 'other',
14
15
  };
15
16
 
16
17
  export const TASKS_DASHBOARD_AVAILABLE_QUERY_MODES = {
@@ -44,6 +45,7 @@ export const TASKS_DASHBOARD_QUERY_VALUES_TEXT = {
44
45
  [TASKS_DASHBOARD_AVAILABLE_QUERY_RESULTS.ERROR]: __('error'),
45
46
  [TASKS_DASHBOARD_AVAILABLE_QUERY_RESULTS.WARNING]: __('warning'),
46
47
  [TASKS_DASHBOARD_AVAILABLE_QUERY_RESULTS.SUCCESS]: __('success'),
48
+ [TASKS_DASHBOARD_AVAILABLE_QUERY_RESULTS.OTHER]: __('other'),
47
49
  [TASKS_DASHBOARD_AVAILABLE_QUERY_MODES.LAST]: __('last'),
48
50
  [TASKS_DASHBOARD_AVAILABLE_QUERY_MODES.OLDER]: __('older'),
49
51
  [TASKS_DASHBOARD_AVAILABLE_TIMES.H24]: __('24h'),
@@ -12,6 +12,9 @@ export const selectTime = state =>
12
12
 
13
13
  export const selectQuery = state => selectTasksDashboard(state).query || {};
14
14
 
15
+ export const calcStoppedOther = data =>
16
+ (data?.cancelled?.total || 0) + (data?.pending?.total || 0);
17
+
15
18
  export const selectTasksSummary = state => {
16
19
  const { running, paused, stopped, scheduled } =
17
20
  selectTasksDashboard(state).tasksSummary || TASKS_SUMMARY_ZERO;
@@ -26,18 +29,21 @@ export const selectTasksSummary = state => {
26
29
  older: paused.total - paused.recent,
27
30
  },
28
31
  stopped: {
29
- error: {
30
- total: stopped.by_result.error.total,
31
- last: stopped.by_result.error.recent,
32
- },
33
- warning: {
34
- total: stopped.by_result.warning.total,
35
- last: stopped.by_result.warning.recent,
36
- },
37
- success: {
38
- total: stopped.by_result.success.total,
39
- last: stopped.by_result.success.recent,
32
+ results: {
33
+ error: {
34
+ total: stopped.by_result.error.total,
35
+ last: stopped.by_result.error.recent,
36
+ },
37
+ warning: {
38
+ total: stopped.by_result.warning.total,
39
+ last: stopped.by_result.warning.recent,
40
+ },
41
+ success: {
42
+ total: stopped.by_result.success.total,
43
+ last: stopped.by_result.success.recent,
44
+ },
40
45
  },
46
+ other: calcStoppedOther(stopped.by_result),
41
47
  },
42
48
  scheduled: scheduled.total,
43
49
  };
@@ -4,8 +4,32 @@ import {
4
4
  selectTime,
5
5
  selectQuery,
6
6
  selectTasksSummary,
7
+ calcStoppedOther,
7
8
  } from '../TasksDashboardSelectors';
8
9
 
10
+ const stoppedResult = {
11
+ error: {
12
+ total: 9,
13
+ recent: 1,
14
+ },
15
+ warning: {
16
+ total: 8,
17
+ recent: 2,
18
+ },
19
+ success: {
20
+ total: 7,
21
+ recent: 3,
22
+ },
23
+ cancelled: {
24
+ total: 5,
25
+ recent: 3,
26
+ },
27
+ pending: {
28
+ total: 11,
29
+ recent: 4,
30
+ },
31
+ };
32
+
9
33
  const state = {
10
34
  foremanTasks: {
11
35
  tasksDashboard: {
@@ -21,20 +45,7 @@ const state = {
21
45
  total: 9,
22
46
  },
23
47
  stopped: {
24
- by_result: {
25
- error: {
26
- total: 9,
27
- recent: 1,
28
- },
29
- warning: {
30
- total: 8,
31
- recent: 2,
32
- },
33
- success: {
34
- total: 7,
35
- recent: 3,
36
- },
37
- },
48
+ by_result: stoppedResult,
38
49
  },
39
50
  scheduled: {
40
51
  total: 6,
@@ -55,6 +66,7 @@ const fixtures = {
55
66
  'should select tasks-summary': () => selectTasksSummary(state),
56
67
  'should select tasks-summary when state is empty': () =>
57
68
  selectTasksSummary({}),
69
+ 'should calcStoppedOther': () => calcStoppedOther(stoppedResult),
58
70
  };
59
71
 
60
72
  describe('TasksDashboard - Selectors', () =>
@@ -24,17 +24,20 @@ exports[`TasksDashboard rendering render without Props 1`] = `
24
24
  },
25
25
  "scheduled": 0,
26
26
  "stopped": Object {
27
- "error": Object {
28
- "last": 0,
29
- "total": 0,
30
- },
31
- "success": Object {
32
- "last": 0,
33
- "total": 0,
34
- },
35
- "warning": Object {
36
- "last": 0,
37
- "total": 0,
27
+ "other": 0,
28
+ "results": Object {
29
+ "error": Object {
30
+ "last": 0,
31
+ "total": 0,
32
+ },
33
+ "success": Object {
34
+ "last": 0,
35
+ "total": 0,
36
+ },
37
+ "warning": Object {
38
+ "last": 0,
39
+ "total": 0,
40
+ },
38
41
  },
39
42
  },
40
43
  }
@@ -1,5 +1,7 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`TasksDashboard - Selectors should calcStoppedOther 1`] = `16`;
4
+
3
5
  exports[`TasksDashboard - Selectors should select query 1`] = `"some-query"`;
4
6
 
5
7
  exports[`TasksDashboard - Selectors should select query when state is empty 1`] = `Object {}`;
@@ -21,10 +23,18 @@ Object {
21
23
  },
22
24
  "stopped": Object {
23
25
  "by_result": Object {
26
+ "cancelled": Object {
27
+ "recent": 3,
28
+ "total": 5,
29
+ },
24
30
  "error": Object {
25
31
  "recent": 1,
26
32
  "total": 9,
27
33
  },
34
+ "pending": Object {
35
+ "recent": 4,
36
+ "total": 11,
37
+ },
28
38
  "success": Object {
29
39
  "recent": 3,
30
40
  "total": 7,
@@ -54,17 +64,20 @@ Object {
54
64
  },
55
65
  "scheduled": 6,
56
66
  "stopped": Object {
57
- "error": Object {
58
- "last": 1,
59
- "total": 9,
60
- },
61
- "success": Object {
62
- "last": 3,
63
- "total": 7,
64
- },
65
- "warning": Object {
66
- "last": 2,
67
- "total": 8,
67
+ "other": 16,
68
+ "results": Object {
69
+ "error": Object {
70
+ "last": 1,
71
+ "total": 9,
72
+ },
73
+ "success": Object {
74
+ "last": 3,
75
+ "total": 7,
76
+ },
77
+ "warning": Object {
78
+ "last": 2,
79
+ "total": 8,
80
+ },
68
81
  },
69
82
  },
70
83
  }
@@ -82,17 +95,20 @@ Object {
82
95
  },
83
96
  "scheduled": 0,
84
97
  "stopped": Object {
85
- "error": Object {
86
- "last": 0,
87
- "total": 0,
88
- },
89
- "success": Object {
90
- "last": 0,
91
- "total": 0,
92
- },
93
- "warning": Object {
94
- "last": 0,
95
- "total": 0,
98
+ "other": 0,
99
+ "results": Object {
100
+ "error": Object {
101
+ "last": 0,
102
+ "total": 0,
103
+ },
104
+ "success": Object {
105
+ "last": 0,
106
+ "total": 0,
107
+ },
108
+ "warning": Object {
109
+ "last": 0,
110
+ "total": 0,
111
+ },
96
112
  },
97
113
  },
98
114
  }
@@ -14,14 +14,6 @@ export const getApiPathname = url => {
14
14
  return uri.pathname().replace('foreman_tasks/', 'foreman_tasks/api/');
15
15
  };
16
16
 
17
- export const resolveSearchQuery = (search, history) => {
18
- const uriQuery = {
19
- search,
20
- page: 1,
21
- };
22
- updateURlQuery(uriQuery, history);
23
- };
24
-
25
17
  export const getCSVurl = (path, query) => {
26
18
  let url = new URI(path);
27
19
  url = url.pathname(`${url.pathname()}.csv`);
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import URI from 'urijs';
3
4
  import { getURIsearch } from 'foremanReact/common/urlHelpers';
4
5
  import { Spinner, Button, Icon } from 'patternfly-react';
5
6
  import PageLayout from 'foremanReact/routes/common/PageLayout/PageLayout';
@@ -10,7 +11,7 @@ import { STATUS } from 'foremanReact/constants';
10
11
  import { useForemanModal } from 'foremanReact/components/ForemanModal/ForemanModalHooks';
11
12
  import TasksDashboard from '../TasksDashboard';
12
13
  import TasksTable from './TasksTable';
13
- import { resolveSearchQuery, getCSVurl } from './TasksTableHelpers';
14
+ import { getCSVurl, updateURlQuery } from './TasksTableHelpers';
14
15
  import ConfirmModal from './Components/ConfirmModal/';
15
16
  import {
16
17
  TASKS_SEARCH_PROPS,
@@ -35,8 +36,17 @@ const TasksTablePage = ({
35
36
  }) => {
36
37
  const url = history.location.pathname + history.location.search;
37
38
  const uriQuery = getURIQuery(url);
38
- const onSearch = searchQuery => {
39
- resolveSearchQuery(searchQuery, history);
39
+ const onSearch = search => {
40
+ const uri = new URI(url);
41
+ if (uri.search(true).search === search && uri.search(true).page === '1') {
42
+ props.getTableItems(uri);
43
+ } else {
44
+ const newUriQuery = {
45
+ search,
46
+ page: 1,
47
+ };
48
+ updateURlQuery(newUriQuery, history);
49
+ }
40
50
  };
41
51
 
42
52
  const { setModalOpen, setModalClosed } = useForemanModal({
@@ -60,7 +70,6 @@ const TasksTablePage = ({
60
70
  onSearch={onSearch}
61
71
  header={createHeader(props.actionName)}
62
72
  breadcrumbOptions={getBreadcrumbs(props.actionName)}
63
- toastNotifications="foreman-tasks-cancel"
64
73
  toolbarButtons={
65
74
  <React.Fragment>
66
75
  <Button onClick={() => props.reloadPage(url, props.parentTaskID)}>
@@ -1,8 +1,9 @@
1
- .tasks-pagination {
2
- margin-top: -6px;
3
- }
4
1
  .tasks-table {
5
2
  margin-bottom: 70px;
3
+
4
+ .action-name-tasks-table {
5
+ overflow-wrap: anywhere;
6
+ }
6
7
  }
7
8
 
8
9
  .tasks-table-wrapper {
@@ -14,16 +15,6 @@
14
15
  }
15
16
  }
16
17
 
17
- .param-name {
18
- display: inline-block;
19
- width: 10em;
20
- }
21
-
22
- .task-details pre {
23
- white-space: pre;
24
- word-break: normal;
25
- }
26
-
27
18
  .tasks-time-row .time-label {
28
19
  float: left;
29
20
  }
@@ -17,7 +17,7 @@ exports[`TasksTablePage rendering render with Breadcrubs and edit permissions 1`
17
17
  />
18
18
  <PageLayout
19
19
  beforeToolbarComponent={
20
- <UNDEFINED
20
+ <Memo(Connect(TasksDashboard))
21
21
  history={
22
22
  Object {
23
23
  "location": Object {
@@ -66,7 +66,6 @@ exports[`TasksTablePage rendering render with Breadcrubs and edit permissions 1`
66
66
  }
67
67
  searchQuery="a=b"
68
68
  searchable={true}
69
- toastNotifications="foreman-tasks-cancel"
70
69
  toolbarButtons={
71
70
  <React.Fragment>
72
71
  <Button
@@ -170,7 +169,7 @@ exports[`TasksTablePage rendering render with minimal props 1`] = `
170
169
  />
171
170
  <PageLayout
172
171
  beforeToolbarComponent={
173
- <UNDEFINED
172
+ <Memo(Connect(TasksDashboard))
174
173
  history={
175
174
  Object {
176
175
  "location": Object {
@@ -202,7 +201,6 @@ exports[`TasksTablePage rendering render with minimal props 1`] = `
202
201
  }
203
202
  searchQuery="a=b"
204
203
  searchable={true}
205
- toastNotifications="foreman-tasks-cancel"
206
204
  toolbarButtons={
207
205
  <React.Fragment>
208
206
  <Button
@@ -2,6 +2,7 @@
2
2
 
3
3
  exports[`actionNameCellFormatter render 1`] = `
4
4
  <a
5
+ className="action-name-tasks-table"
5
6
  href="/some-url/some-id"
6
7
  >
7
8
  action-name
@@ -2,4 +2,8 @@ import React from 'react';
2
2
  import { cellFormatter } from 'foremanReact/components/common/table';
3
3
 
4
4
  export const actionNameCellFormatter = url => (value, { rowData: { id } }) =>
5
- cellFormatter(<a href={`/${url}/${id}`}>{value}</a>);
5
+ cellFormatter(
6
+ <a href={`/${url}/${id}`} className="action-name-tasks-table">
7
+ {value}
8
+ </a>
9
+ );
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: 3.0.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-01 00:00:00.000000000 Z
11
+ date: 2021-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dynflow
@@ -137,7 +137,6 @@ files:
137
137
  - app/assets/javascripts/foreman_tasks/foreman_tasks.js
138
138
  - app/assets/javascripts/foreman_tasks/trigger_form.js
139
139
  - app/assets/stylesheets/foreman_tasks/foreman_tasks.css
140
- - app/assets/stylesheets/foreman_tasks/tasks.scss
141
140
  - app/assets/stylesheets/foreman_tasks/trigger_form.css
142
141
  - app/controllers/foreman_tasks/api/recurring_logics_controller.rb
143
142
  - app/controllers/foreman_tasks/api/tasks_controller.rb
@@ -171,6 +170,7 @@ files:
171
170
  - app/lib/actions/middleware/rails_executor_wrap.rb
172
171
  - app/lib/actions/middleware/recurring_logic.rb
173
172
  - app/lib/actions/middleware/watch_delegated_proxy_sub_tasks.rb
173
+ - app/lib/actions/observable_action.rb
174
174
  - app/lib/actions/proxy_action.rb
175
175
  - app/lib/actions/recurring_action.rb
176
176
  - app/lib/actions/serializers/active_record_serializer.rb
@@ -180,6 +180,7 @@ files:
180
180
  - app/models/foreman_tasks/concerns/action_triggering.rb
181
181
  - app/models/foreman_tasks/concerns/host_action_subject.rb
182
182
  - app/models/foreman_tasks/concerns/user_extensions.rb
183
+ - app/models/foreman_tasks/link.rb
183
184
  - app/models/foreman_tasks/lock.rb
184
185
  - app/models/foreman_tasks/recurring_logic.rb
185
186
  - app/models/foreman_tasks/recurring_logic_cancelled_exception.rb
@@ -205,6 +206,7 @@ files:
205
206
  - app/services/ui_notifications/tasks/task_paused_admin.rb
206
207
  - app/services/ui_notifications/tasks/task_paused_owner.rb
207
208
  - app/views/common/_trigger_form.html.erb
209
+ - app/views/foreman_tasks/api/locks/show.json.rabl
208
210
  - app/views/foreman_tasks/api/recurring_logics/base.json.rabl
209
211
  - app/views/foreman_tasks/api/recurring_logics/index.json.rabl
210
212
  - app/views/foreman_tasks/api/recurring_logics/main.json.rabl
@@ -221,6 +223,7 @@ files:
221
223
  - app/views/foreman_tasks/task_groups/_detail.html.erb
222
224
  - app/views/foreman_tasks/task_groups/_tab_related.html.erb
223
225
  - app/views/foreman_tasks/task_groups/recurring_logic_task_groups/_recurring_logic_task_group.html.erb
226
+ - app/views/foreman_tasks/tasks/_lock_card.html.erb
224
227
  - app/views/foreman_tasks/tasks/dashboard/_latest_tasks_in_error_warning.html.erb
225
228
  - app/views/foreman_tasks/tasks/dashboard/_tasks_status.html.erb
226
229
  - app/views/foreman_tasks/tasks/show.html.erb
@@ -247,6 +250,10 @@ files:
247
250
  - db/migrate/20180216092715_use_uuid.rb
248
251
  - db/migrate/20180927120509_add_user_id.foreman_tasks.rb
249
252
  - db/migrate/20181019135324_add_remote_task_operation.rb
253
+ - db/migrate/20181206123910_create_foreman_tasks_links.foreman_tasks.rb
254
+ - db/migrate/20181206124952_migrate_non_exclusive_locks_to_links.foreman_tasks.rb
255
+ - db/migrate/20181206131436_drop_old_locks.foreman_tasks.rb
256
+ - db/migrate/20181206131627_make_locks_exclusive.foreman_tasks.rb
250
257
  - db/migrate/20190318153925_add_task_state_updated_at.foreman_tasks.rb
251
258
  - db/migrate/20200517215015_rename_bookmarks_controller.rb
252
259
  - db/migrate/20200519093217_drop_dynflow_allow_dangerous_actions_setting.foreman_tasks.rb
@@ -328,7 +335,7 @@ files:
328
335
  - test/unit/config/environment.rb
329
336
  - test/unit/dashboard_table_filter_test.rb
330
337
  - test/unit/dynflow_console_authorizer_test.rb
331
- - test/unit/lock_test.rb
338
+ - test/unit/locking_test.rb
332
339
  - test/unit/otp_manager_test.rb
333
340
  - test/unit/proxy_selector_test.rb
334
341
  - test/unit/recurring_logic_test.rb
@@ -399,12 +406,17 @@ files:
399
406
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.stories.js
400
407
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.test.js
401
408
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/__snapshots__/ScheduledTasksCard.test.js.snap
409
+ - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/OtherInfo.js
410
+ - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/OtherInfo.test.js
402
411
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.js
403
412
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.scss
404
413
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.stories.js
405
414
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.test.js
406
- - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCardHelper.js
415
+ - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCardTable.js
416
+ - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCardTable.test.js
417
+ - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/__snapshots__/OtherInfo.test.js.snap
407
418
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/__snapshots__/StoppedTasksCard.test.js.snap
419
+ - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/__snapshots__/StoppedTasksCardTable.test.js.snap
408
420
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.js
409
421
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.scss
410
422
  - webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.stories.js
@@ -581,9 +593,10 @@ files:
581
593
  - webpack/stories/decorators/index.js
582
594
  - webpack/stories/decorators/withCardsDecorator.js
583
595
  homepage: https://github.com/theforeman/foreman-tasks
584
- licenses: []
596
+ licenses:
597
+ - GPL-3.0
585
598
  metadata: {}
586
- post_install_message:
599
+ post_install_message:
587
600
  rdoc_options: []
588
601
  require_paths:
589
602
  - lib
@@ -598,8 +611,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
598
611
  - !ruby/object:Gem::Version
599
612
  version: '0'
600
613
  requirements: []
601
- rubygems_version: 3.0.3
602
- signing_key:
614
+ rubygems_version: 3.1.2
615
+ signing_key:
603
616
  specification_version: 4
604
617
  summary: Foreman plugin for showing tasks information for resources and users
605
618
  test_files:
@@ -637,7 +650,7 @@ test_files:
637
650
  - test/unit/config/environment.rb
638
651
  - test/unit/dashboard_table_filter_test.rb
639
652
  - test/unit/dynflow_console_authorizer_test.rb
640
- - test/unit/lock_test.rb
653
+ - test/unit/locking_test.rb
641
654
  - test/unit/otp_manager_test.rb
642
655
  - test/unit/proxy_selector_test.rb
643
656
  - test/unit/recurring_logic_test.rb