foreman_rh_cloud 2.0.4 → 2.0.9

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.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -0
  3. data/app/controllers/foreman_inventory_upload/accounts_controller.rb +4 -6
  4. data/app/controllers/foreman_inventory_upload/uploads_controller.rb +33 -7
  5. data/app/controllers/foreman_rh_cloud/react_controller.rb +11 -0
  6. data/app/controllers/insights_cloud/tasks_controller.rb +8 -0
  7. data/app/helpers/foreman_inventory_upload_host_helper.rb +11 -0
  8. data/app/models/insights_facet.rb +3 -0
  9. data/app/models/insights_hit.rb +6 -0
  10. data/app/models/setting/rh_cloud.rb +15 -0
  11. data/app/overrides/hosts_list.rb +13 -0
  12. data/app/views/foreman_rh_cloud/react/insights_cloud.html.erb +6 -0
  13. data/app/views/foreman_rh_cloud/react/inventory_upload.html.erb +1 -0
  14. data/app/views/{foreman_inventory_upload/layouts/react.html.erb → layouts/foreman_rh_cloud/application.html.erb} +2 -2
  15. data/config/routes.rb +12 -1
  16. data/db/migrate/20191215104806_create_insights_hits.foreman_inventory_upload.rb +14 -0
  17. data/db/migrate/20191216062008_create_insights_facets.foreman_inventory_upload.rb +7 -0
  18. data/lib/foreman_inventory_upload.rb +12 -0
  19. data/lib/foreman_inventory_upload/async/async_helpers.rb +13 -0
  20. data/lib/foreman_inventory_upload/async/generate_all_reports_job.rb +8 -0
  21. data/lib/foreman_inventory_upload/async/shell_process.rb +9 -1
  22. data/lib/foreman_inventory_upload/async/upload_report_job.rb +1 -1
  23. data/lib/foreman_inventory_upload/generators/archived_report.rb +6 -3
  24. data/lib/foreman_inventory_upload/generators/fact_helpers.rb +56 -0
  25. data/lib/foreman_inventory_upload/generators/json_stream.rb +10 -0
  26. data/lib/foreman_inventory_upload/generators/queries.rb +7 -0
  27. data/lib/foreman_inventory_upload/generators/slice.rb +48 -22
  28. data/lib/foreman_inventory_upload/notifications/manifest_import_success_notification_override.rb +19 -0
  29. data/lib/foreman_inventory_upload/scripts/uploader.sh.erb +1 -1
  30. data/lib/foreman_rh_cloud/engine.rb +33 -5
  31. data/lib/foreman_rh_cloud/version.rb +1 -1
  32. data/lib/insights_cloud.rb +15 -0
  33. data/lib/insights_cloud/async/insights_full_sync.rb +96 -0
  34. data/test/controllers/accounts_controller_test.rb +8 -3
  35. data/test/controllers/uploads_controller_test.rb +13 -0
  36. data/test/factories/inventory_upload_factories.rb +13 -13
  37. data/test/jobs/insights_full_sync_test.rb +92 -0
  38. data/test/unit/archived_report_generator_test.rb +1 -0
  39. data/test/unit/fact_helpers_test.rb +29 -0
  40. data/test/unit/slice_generator_test.rb +277 -15
  41. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +14 -2
  42. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.js +13 -10
  43. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +6 -3
  44. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListHelper.js +10 -0
  45. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListReducer.js +16 -0
  46. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +10 -1
  47. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/EmptyResults.js +15 -0
  48. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/__tests__/EmptyResults.test.js +13 -0
  49. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/__tests__/__snapshots__/EmptyResults.test.js.snap +18 -0
  50. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/emptyResults.scss +7 -0
  51. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/index.js +1 -0
  52. data/webpack/ForemanInventoryUpload/Components/AccountList/Components/ListItem/ListItem.js +1 -4
  53. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountList.test.js +1 -0
  54. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListActions.test.js +8 -1
  55. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListHelper.test.js +12 -0
  56. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListIntegration.test.js +1 -1
  57. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListReducer.test.js +22 -0
  58. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +20 -8
  59. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountList.test.js.snap +2 -3
  60. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListActions.test.js.snap +20 -2
  61. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListReducer.test.js.snap +20 -0
  62. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListSelectors.test.js.snap +8 -2
  63. data/webpack/ForemanInventoryUpload/Components/AccountList/index.js +2 -0
  64. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.fixtures.js +1 -0
  65. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.js +32 -0
  66. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js +30 -0
  67. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherConstants.js +2 -0
  68. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcher.test.js +14 -0
  69. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcherActions.test.js +14 -0
  70. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcher.test.js.snap +38 -0
  71. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcherActions.test.js.snap +14 -0
  72. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/autoUploadSwitcher.scss +3 -0
  73. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/index.js +17 -0
  74. data/webpack/ForemanInventoryUpload/Components/Dashboard/DashboardActions.js +4 -3
  75. data/webpack/ForemanInventoryUpload/Components/Dashboard/DashboardSelectors.js +1 -1
  76. data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardActions.test.js +2 -3
  77. data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardIntegration.test.js +2 -1
  78. data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardSelectors.test.js +3 -2
  79. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.fixtures.js +1 -0
  80. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.js +29 -0
  81. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherActions.js +30 -0
  82. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherConstants.js +3 -0
  83. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcher.test.js +14 -0
  84. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcherActions.test.js +14 -0
  85. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcher.test.js.snap +38 -0
  86. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcherActions.test.js.snap +14 -0
  87. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/hostObfuscationSwitcher.scss +0 -0
  88. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/index.js +20 -0
  89. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/Components/ClearButton/ClearButton.js +26 -0
  90. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/Components/ClearButton/index.js +1 -0
  91. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.fixtures.js +2 -0
  92. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.js +39 -0
  93. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterActions.js +16 -0
  94. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterConstants.js +3 -0
  95. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterReducer.js +36 -0
  96. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterSelectors.js +7 -0
  97. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilter.test.js +14 -0
  98. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterActions.test.js +14 -0
  99. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterReducer.test.js +35 -0
  100. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterSelectors.test.js +21 -0
  101. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilter.test.js.snap +25 -0
  102. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilterActions.test.js.snap +17 -0
  103. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilterReducer.test.js.snap +25 -0
  104. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilterSelectors.test.js.snap +9 -0
  105. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +31 -0
  106. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/integration.test.js +18 -0
  107. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/index.js +17 -0
  108. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/inventoryFilter.scss +28 -0
  109. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.js +15 -0
  110. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/InventorySettings.test.js +13 -0
  111. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettings.test.js.snap +13 -0
  112. data/webpack/ForemanInventoryUpload/Components/InventorySettings/index.js +1 -0
  113. data/webpack/ForemanInventoryUpload/Components/InventorySettings/inventorySettings.scss +15 -0
  114. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.js +40 -0
  115. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/PageHeader.test.js +13 -0
  116. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageHeader.test.js.snap +61 -0
  117. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/DocsButton.js +17 -0
  118. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/__tests__/DocsButton.test.js +12 -0
  119. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/__tests__/__snapshots__/DocsButton.test.js.snap +20 -0
  120. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/index.js +1 -0
  121. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/HistoryButton.js +18 -0
  122. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/__tests__/HistoryButton.test.js +12 -0
  123. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/__tests__/__snapshots__/HistoryButton.test.js.snap +21 -0
  124. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/index.js +1 -0
  125. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/PageDescription.js +24 -0
  126. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/__tests__/PageDescription.test.js +11 -0
  127. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/__tests__/__snapshots__/PageDescription.test.js.snap +17 -0
  128. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/index.js +1 -0
  129. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/ToolbarButtons.js +13 -0
  130. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/__tests__/ToolbarButtons.test.js +12 -0
  131. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/__tests__/__snapshots__/ToolbarButtons.test.js.snap +10 -0
  132. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/index.js +1 -0
  133. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/toolbarButtons.scss +7 -0
  134. data/webpack/ForemanInventoryUpload/Components/PageHeader/index.js +1 -0
  135. data/webpack/ForemanInventoryUpload/Components/PageHeader/pageHeader.scss +3 -0
  136. data/webpack/ForemanInventoryUpload/Components/ScheduledRun/ScheduledRun.fixtures.js +1 -0
  137. data/webpack/ForemanInventoryUpload/Components/ScheduledRun/ScheduledRun.js +4 -2
  138. data/webpack/ForemanInventoryUpload/Components/ScheduledRun/__tests__/ScheduledRun.test.js +0 -1
  139. data/webpack/ForemanInventoryUpload/Components/ScheduledRun/__tests__/__snapshots__/ScheduledRun.test.js.snap +0 -2
  140. data/webpack/ForemanInventoryUpload/Components/ScheduledRun/index.js +12 -1
  141. data/webpack/ForemanInventoryUpload/Components/TabBody/__tests__/__snapshots__/TabBody.test.js.snap +1 -1
  142. data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +7 -0
  143. data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +17 -0
  144. data/webpack/ForemanInventoryUpload/ForemanInventoryUpload.js +18 -9
  145. data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +4 -4
  146. data/webpack/ForemanInventoryUpload/SubscriptionsPageExtension/SubscriptionsPageExtensionActions.js +34 -0
  147. data/webpack/ForemanInventoryUpload/__tests__/ForemanInventoryHelpers.test.js +10 -0
  148. data/webpack/ForemanInventoryUpload/{ForemanInventoryUpload.test.js → __tests__/ForemanInventoryUpload.test.js} +1 -1
  149. data/webpack/ForemanInventoryUpload/__tests__/__snapshots__/ForemanInventoryHelpers.test.js.snap +5 -0
  150. data/webpack/ForemanInventoryUpload/{__snapshots__ → __tests__/__snapshots__}/ForemanInventoryUpload.test.js.snap +6 -5
  151. data/webpack/ForemanRhCloudHelpers.js +6 -0
  152. data/webpack/ForemanRhCloudReducers.js +10 -0
  153. data/webpack/ForemanRhCloudSelectors.js +5 -0
  154. data/webpack/ForemanRhCloudTestHelpers.js +6 -0
  155. data/webpack/InsightsCloudSync/InsightsCloudSync.js +55 -0
  156. data/webpack/InsightsCloudSync/InsightsCloudSync.test.js +16 -0
  157. data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +23 -0
  158. data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +6 -0
  159. data/webpack/InsightsCloudSync/InsightsCloudSyncHelpers.js +3 -0
  160. data/webpack/InsightsCloudSync/InsightsCloudSyncReducers.js +3 -0
  161. data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +62 -0
  162. data/webpack/InsightsCloudSync/__tests__/InsightsCloudSyncHelpers.test.js +9 -0
  163. data/webpack/InsightsCloudSync/__tests__/__snapshots__/InsightsCloudSyncHelpers.test.js.snap +3 -0
  164. data/webpack/InsightsCloudSync/index.js +17 -0
  165. data/webpack/__mocks__/foremanReact/components/Layout/LayoutConstants.js +1 -0
  166. data/webpack/__tests__/ForemanRhCloudHelpers.test.js +11 -0
  167. data/webpack/__tests__/ForemanRhCloudSelectors.test.js +19 -0
  168. data/webpack/__tests__/ForemanRhCloudTestHelpers.test.js +10 -0
  169. data/webpack/__tests__/__snapshots__/ForemanRhCloudHelpers.test.js.snap +3 -0
  170. data/webpack/__tests__/__snapshots__/ForemanRhCloudSelectors.test.js.snap +24 -0
  171. data/webpack/__tests__/__snapshots__/ForemanRhCloudTestHelpers.test.js.snap +14 -0
  172. data/webpack/index.js +8 -1
  173. data/webpack/subscriptions_extension_index.js +8 -0
  174. metadata +124 -7
  175. data/app/controllers/foreman_inventory_upload/react_controller.rb +0 -7
  176. data/webpack/ForemanInventoryUpload/ForemanInventoryUploadSelectors.js +0 -4
@@ -0,0 +1,10 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ToolbarButtons rendering render without Props 1`] = `
4
+ <div
5
+ className="inventory_toolbar_buttons"
6
+ >
7
+ <HistoryButton />
8
+ <DocsButton />
9
+ </div>
10
+ `;
@@ -0,0 +1 @@
1
+ export { default } from './ToolbarButtons';
@@ -0,0 +1,7 @@
1
+ .inventory_toolbar_buttons {
2
+ float: right;
3
+
4
+ .tasks_history_button {
5
+ margin-right: 5px;
6
+ }
7
+ }
@@ -0,0 +1 @@
1
+ export { default } from './PageHeader';
@@ -0,0 +1,3 @@
1
+ .inventory_title {
2
+ margin-bottom: 30px;
3
+ }
@@ -1,3 +1,4 @@
1
1
  export const props = {
2
2
  date: '2019-08-21T16:14:16.520+03:00',
3
+ autoUploadEnabled: true,
3
4
  };
@@ -5,8 +5,8 @@ import { FormattedRelative } from 'react-intl';
5
5
  import { translate as __ } from 'foremanReact/common/I18n';
6
6
  import './scheduledRun.scss';
7
7
 
8
- const ScheduledRun = ({ date }) =>
9
- date ? (
8
+ const ScheduledRun = ({ date, autoUploadEnabled }) =>
9
+ autoUploadEnabled && date ? (
10
10
  <Grid.Col sm={12} className="scheduled_run">
11
11
  <p>
12
12
  <Icon name="calendar" />
@@ -18,10 +18,12 @@ const ScheduledRun = ({ date }) =>
18
18
 
19
19
  ScheduledRun.propTypes = {
20
20
  date: PropTypes.string,
21
+ autoUploadEnabled: PropTypes.bool,
21
22
  };
22
23
 
23
24
  ScheduledRun.defaultProps = {
24
25
  date: null,
26
+ autoUploadEnabled: true,
25
27
  };
26
28
 
27
29
  export default ScheduledRun;
@@ -4,7 +4,6 @@ import ScheduledRun from '../ScheduledRun';
4
4
  import { props } from '../ScheduledRun.fixtures';
5
5
 
6
6
  const fixtures = {
7
- 'render without Props': {},
8
7
  'render with Props': props,
9
8
  };
10
9
 
@@ -21,5 +21,3 @@ exports[`ScheduledRun rendering render with Props 1`] = `
21
21
  </p>
22
22
  </Col>
23
23
  `;
24
-
25
- exports[`ScheduledRun rendering render without Props 1`] = `""`;
@@ -1 +1,12 @@
1
- export { default } from './ScheduledRun';
1
+ import { connect } from 'react-redux';
2
+
3
+ import ScheduledRun from './ScheduledRun';
4
+ import { selectAutoUploadEnabled } from '../AccountList/AccountListSelectors';
5
+
6
+ // map state to props
7
+ const mapStateToProps = state => ({
8
+ autoUploadEnabled: selectAutoUploadEnabled(state),
9
+ });
10
+
11
+ // export connected component
12
+ export default connect(mapStateToProps)(ScheduledRun);
@@ -12,7 +12,7 @@ exports[`TabBody rendering render without Props 1`] = `
12
12
  exitCode=""
13
13
  logs={null}
14
14
  />
15
- <ScheduledRun
15
+ <Connect(ScheduledRun)
16
16
  date={null}
17
17
  />
18
18
  </Row>
@@ -0,0 +1,7 @@
1
+ import { translate as __ } from 'foremanReact/common/I18n';
2
+
3
+ export const INVENTORY_PAGE_TITLE = __('Red Hat Inventory Uploads');
4
+
5
+ export const DOCS_BUTTON_TEXT = __(' Documentation');
6
+
7
+ export const ACTIONS_HISTORY_BUTTON_TEXT = __(' Actions history');
@@ -0,0 +1,17 @@
1
+ import URI from 'urijs';
2
+ import { foremanUrl } from '../ForemanRhCloudHelpers';
3
+
4
+ export const inventoryUrl = path =>
5
+ foremanUrl(`/foreman_inventory_upload/${path}`);
6
+
7
+ export const getInventoryDocsUrl = () =>
8
+ foremanUrl(
9
+ `/links/manual/+?root_url=${URI.encode(
10
+ 'https://access.redhat.com/products/subscription-central'
11
+ )}`
12
+ );
13
+
14
+ export const getActionsHistoryUrl = () =>
15
+ foremanUrl(
16
+ '/foreman_tasks/tasks?search=action++%3D++ForemanInventoryUpload%3A%3AAsync%3A%3AGenerateReportJob+or+action++%3D++ForemanInventoryUpload%3A%3AAsync%3A%3AGenerateAllReportsJob&page=1'
17
+ );
@@ -1,15 +1,24 @@
1
1
  import React from 'react';
2
2
  import { IntlProvider } from 'react-intl';
3
- import { translate as __ } from 'foremanReact/common/I18n';
3
+ import { Grid } from 'patternfly-react';
4
4
  import AccountList from './Components/AccountList';
5
+ import PageHeader from './Components/PageHeader';
6
+ import { INVENTORY_PAGE_TITLE } from './ForemanInventoryConstants';
5
7
 
6
- const ForemanInventoryUpload = () => (
7
- <IntlProvider locale={navigator.language}>
8
- <div className="inventory-upload">
9
- <h1>{__('Red Hat Inventory Uploads')}</h1>
10
- <AccountList />
11
- </div>
12
- </IntlProvider>
13
- );
8
+ const ForemanInventoryUpload = () => {
9
+ document.title = INVENTORY_PAGE_TITLE;
10
+ return (
11
+ <IntlProvider locale={navigator.language}>
12
+ <Grid fluid className="inventory-upload">
13
+ <PageHeader />
14
+ <AccountList />
15
+ </Grid>
16
+ </IntlProvider>
17
+ );
18
+ };
19
+
20
+ ForemanInventoryUpload.propTypes = {};
21
+
22
+ ForemanInventoryUpload.defaultProps = {};
14
23
 
15
24
  export default ForemanInventoryUpload;
@@ -1,12 +1,12 @@
1
1
  import { combineReducers } from 'redux';
2
2
  import { reducers as accountListReducers } from './Components/AccountList';
3
3
  import { reducers as dashboardReducers } from './Components/Dashboard';
4
+ import { reducers as filterReducers } from './Components/InventoryFilter';
4
5
 
5
- const reducers = {
6
- ForemanInventoryUpload: combineReducers({
6
+ export default {
7
+ inventoryUpload: combineReducers({
7
8
  ...accountListReducers,
8
9
  ...dashboardReducers,
10
+ ...filterReducers,
9
11
  }),
10
12
  };
11
-
12
- export default reducers;
@@ -0,0 +1,34 @@
1
+ import API from 'foremanReact/API';
2
+ import { translate as __ } from 'foremanReact/common/I18n';
3
+ import { foremanUrl } from '../../ForemanRhCloudHelpers';
4
+ import { inventoryUrl } from '../ForemanInventoryHelpers';
5
+
6
+ export const subscriptionCountListener = (itemsCount, unsubscribe) => {
7
+ const showToast = autoUploadEnabled => {
8
+ !autoUploadEnabled &&
9
+ window.tfm.toastNotifications.notify({
10
+ message: __('Now you can enable Red Hat inventory upload'),
11
+ type: 'info',
12
+ link: {
13
+ children: __('Go to inventory upload settings'),
14
+ href: foremanUrl('foreman_rh_cloud/inventory_upload'),
15
+ },
16
+ });
17
+
18
+ unsubscribe();
19
+ };
20
+
21
+ itemsCount && fetchInventoryAutoUploadSetting(showToast);
22
+ };
23
+
24
+ const fetchInventoryAutoUploadSetting = async processApiResponse => {
25
+ let settingValue;
26
+ try {
27
+ const {
28
+ data: { autoUploadEnabled },
29
+ } = await API.get(inventoryUrl('auto_upload'));
30
+ settingValue = autoUploadEnabled;
31
+ } finally {
32
+ processApiResponse(settingValue);
33
+ }
34
+ };
@@ -0,0 +1,10 @@
1
+ import { testSelectorsSnapshotWithFixtures } from '@theforeman/test';
2
+ import { inventoryUrl, getInventoryDocsUrl } from '../ForemanInventoryHelpers';
3
+
4
+ const fixtures = {
5
+ 'should return inventory Url': () => inventoryUrl('test_path'),
6
+ 'should return inventory docs url': () => getInventoryDocsUrl(),
7
+ };
8
+
9
+ describe('ForemanInventoryUpload helpers', () =>
10
+ testSelectorsSnapshotWithFixtures(fixtures));
@@ -1,6 +1,6 @@
1
1
  import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
- import ForemanInventoryUpload from './ForemanInventoryUpload';
3
+ import ForemanInventoryUpload from '../../ForemanInventoryUpload';
4
4
 
5
5
  const fixtures = {
6
6
  'render without Props': {},
@@ -0,0 +1,5 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ForemanInventoryUpload helpers should return inventory Url 1`] = `"/foreman_inventory_upload/test_path"`;
4
+
5
+ exports[`ForemanInventoryUpload helpers should return inventory docs url 1`] = `"/links/manual/+?root_url=https%3A%2F%2Faccess.redhat.com%2Fproducts%2Fsubscription-central"`;
@@ -4,13 +4,14 @@ exports[`ForemanInventoryUpload render without Props 1`] = `
4
4
  <IntlProvider
5
5
  locale="en-US"
6
6
  >
7
- <div
7
+ <Grid
8
+ bsClass="container"
8
9
  className="inventory-upload"
10
+ componentClass="div"
11
+ fluid={true}
9
12
  >
10
- <h1>
11
- Red Hat Inventory Uploads
12
- </h1>
13
+ <PageHeader />
13
14
  <Connect(AccountList) />
14
- </div>
15
+ </Grid>
15
16
  </IntlProvider>
16
17
  `;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * copied from core, since it's not in the ReactApp folder,
3
+ * it's complicated to import it and mock it in tests.
4
+ * should be imported once core moves it to the ReactApp folder.
5
+ */
6
+ export const foremanUrl = path => `${window.URL_PREFIX}${path}`;
@@ -0,0 +1,10 @@
1
+ import { combineReducers } from 'redux';
2
+ import inventoryUploadReducers from './ForemanInventoryUpload/ForemanInventoryUploadReducers';
3
+ import insightsReducers from './InsightsCloudSync/InsightsCloudSyncReducers';
4
+
5
+ export default {
6
+ ForemanRhCloud: combineReducers({
7
+ ...inventoryUploadReducers,
8
+ ...insightsReducers,
9
+ }),
10
+ };
@@ -0,0 +1,5 @@
1
+ export const selectForemanRhCloud = state => state.ForemanRhCloud;
2
+ export const selectForemanInventoryUpload = state =>
3
+ selectForemanRhCloud(state).inventoryUpload;
4
+ export const selectInsightsCloudSync = state =>
5
+ selectForemanRhCloud(state).InsightsCloudSync;
@@ -0,0 +1,6 @@
1
+ export const rhCloudStateWrapper = innerState => ({
2
+ ForemanRhCloud: {
3
+ inventoryUpload: { ...innerState },
4
+ InsightsCloudSync: { ...innerState },
5
+ },
6
+ });
@@ -0,0 +1,55 @@
1
+ import React from 'react';
2
+ import { IntlProvider } from 'react-intl';
3
+ import PropTypes from 'prop-types';
4
+ import { translate as __ } from 'foremanReact/common/I18n';
5
+ import { Button, Icon } from 'patternfly-react';
6
+ import { INSIGHTS_SYNC_PAGE_TITLE } from './InsightsCloudSyncConstants';
7
+
8
+ const InsightsCloudSync = ({ data: { settingsUrl }, syncInsights }) => {
9
+ document.title = INSIGHTS_SYNC_PAGE_TITLE;
10
+ return (
11
+ <IntlProvider locale={navigator.language}>
12
+ <div className="insights-cloud-sync">
13
+ <h1>{__('Red Hat Insights Sync')}</h1>
14
+ <p>
15
+ {__(`Insights synchronization process is used to provide Insights
16
+ recommendations output for hosts managed here`)}
17
+ </p>
18
+ <p>
19
+ {__(`1. Obtain an RHSM API token: `)}
20
+ <a
21
+ href="https://access.redhat.com/management/api"
22
+ target="_blank"
23
+ rel="noopener noreferrer"
24
+ >
25
+ access.redhat.com <Icon name="external-link" size="xs" />
26
+ </a>
27
+ <br />
28
+ {__("2. Copy the token to 'Red Hat Cloud token' setting: ")}
29
+ <a href={settingsUrl} target="_blank" rel="noopener noreferrer">
30
+ {__('Red Hat Cloud token ')}
31
+ <Icon name="external-link" size="xs" />
32
+ </a>
33
+ <br />
34
+ {__(
35
+ '3. Now you can syncronize recommendations manually using the "Sync now" button.'
36
+ )}
37
+ </p>
38
+ <div>
39
+ <Button bsStyle="primary" onClick={syncInsights}>
40
+ {__('Sync now')}
41
+ </Button>
42
+ </div>
43
+ </div>
44
+ </IntlProvider>
45
+ );
46
+ };
47
+
48
+ InsightsCloudSync.propTypes = {
49
+ syncInsights: PropTypes.func.isRequired,
50
+ data: PropTypes.shape({
51
+ settingsUrl: PropTypes.string.isRequired,
52
+ }).isRequired,
53
+ };
54
+
55
+ export default InsightsCloudSync;
@@ -0,0 +1,16 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+ import { noop } from 'patternfly-react';
3
+
4
+ import InsightsCloudSync from './InsightsCloudSync';
5
+
6
+ const fixtures = {
7
+ render: {
8
+ syncInsights: noop,
9
+ data: {
10
+ settingsUrl: 'www.example.com/settings',
11
+ },
12
+ },
13
+ };
14
+
15
+ describe('InsightsCloudSync', () =>
16
+ testComponentSnapshotsWithFixtures(InsightsCloudSync, fixtures));
@@ -0,0 +1,23 @@
1
+ import API from 'foremanReact/API';
2
+ import { insightsCloudUrl } from './InsightsCloudSyncHelpers';
3
+ import {
4
+ INSIGHTS_CLOUD_SYNC_SUCCESS,
5
+ INSIGHTS_CLOUD_SYNC_FAILURE,
6
+ } from './InsightsCloudSyncConstants';
7
+
8
+ export const syncInsights = () => async dispatch => {
9
+ try {
10
+ await API.post(insightsCloudUrl('tasks'));
11
+ dispatch({
12
+ type: INSIGHTS_CLOUD_SYNC_SUCCESS,
13
+ payload: {},
14
+ });
15
+ } catch (error) {
16
+ dispatch({
17
+ type: INSIGHTS_CLOUD_SYNC_FAILURE,
18
+ payload: {
19
+ error: error.message,
20
+ },
21
+ });
22
+ }
23
+ };
@@ -0,0 +1,6 @@
1
+ import { translate as __ } from 'foremanReact/common/I18n';
2
+
3
+ export const INSIGHTS_CLOUD_SYNC_SUCCESS = 'INSIGHTS_CLOUD_SYNC_SUCCESS';
4
+ export const INSIGHTS_CLOUD_SYNC_FAILURE = 'INSIGHTS_CLOUD_SYNC_FAILURE';
5
+
6
+ export const INSIGHTS_SYNC_PAGE_TITLE = __('Red Hat Insights cloud sync');
@@ -0,0 +1,3 @@
1
+ import { foremanUrl } from '../ForemanRhCloudHelpers';
2
+
3
+ export const insightsCloudUrl = path => foremanUrl(`/insights_cloud/${path}`);
@@ -0,0 +1,3 @@
1
+ const reducers = {};
2
+
3
+ export default reducers;
@@ -0,0 +1,62 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`InsightsCloudSync render 1`] = `
4
+ <IntlProvider
5
+ locale="en-US"
6
+ >
7
+ <div
8
+ className="insights-cloud-sync"
9
+ >
10
+ <h1>
11
+ Red Hat Insights Sync
12
+ </h1>
13
+ <p>
14
+ Insights synchronization process is used to provide Insights
15
+ recommendations output for hosts managed here
16
+ </p>
17
+ <p>
18
+ 1. Obtain an RHSM API token:
19
+ <a
20
+ href="https://access.redhat.com/management/api"
21
+ rel="noopener noreferrer"
22
+ target="_blank"
23
+ >
24
+ access.redhat.com
25
+ <Icon
26
+ name="external-link"
27
+ size="xs"
28
+ type="fa"
29
+ />
30
+ </a>
31
+ <br />
32
+ 2. Copy the token to 'Red Hat Cloud token' setting:
33
+ <a
34
+ href="www.example.com/settings"
35
+ rel="noopener noreferrer"
36
+ target="_blank"
37
+ >
38
+ Red Hat Cloud token
39
+ <Icon
40
+ name="external-link"
41
+ size="xs"
42
+ type="fa"
43
+ />
44
+ </a>
45
+ <br />
46
+ 3. Now you can syncronize recommendations manually using the "Sync now" button.
47
+ </p>
48
+ <div>
49
+ <Button
50
+ active={false}
51
+ block={false}
52
+ bsClass="btn"
53
+ bsStyle="primary"
54
+ disabled={false}
55
+ onClick={[Function]}
56
+ >
57
+ Sync now
58
+ </Button>
59
+ </div>
60
+ </div>
61
+ </IntlProvider>
62
+ `;