foreman_rh_cloud 1.0.9 → 1.0.13.1

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 (197) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +33 -0
  3. data/app/controllers/foreman_inventory_upload/accounts_controller.rb +3 -0
  4. data/app/controllers/foreman_inventory_upload/tasks_controller.rb +25 -0
  5. data/app/controllers/foreman_inventory_upload/uploads_controller.rb +18 -0
  6. data/app/controllers/insights_cloud/hits_controller.rb +17 -0
  7. data/app/controllers/insights_cloud/settings_controller.rb +24 -0
  8. data/app/controllers/insights_cloud/tasks_controller.rb +1 -2
  9. data/app/helpers/foreman_inventory_upload_host_helper.rb +10 -2
  10. data/app/models/concerns/rh_cloud_host.rb +15 -0
  11. data/app/models/insights_facet.rb +5 -1
  12. data/app/models/insights_hit.rb +1 -1
  13. data/app/models/inventory_sync/inventory_status.rb +30 -0
  14. data/app/models/setting/rh_cloud.rb +3 -0
  15. data/app/overrides/hosts_list.rb +1 -1
  16. data/app/services/foreman_rh_cloud/cloud_auth.rb +28 -0
  17. data/app/views/foreman_rh_cloud/react/inventory_upload.html.erb +1 -1
  18. data/app/views/hosts/_insights_tab.html.erb +15 -0
  19. data/config/routes.rb +6 -0
  20. data/db/migrate/20200727111529_add_uuid_column_to_insights_facets.foreman_rh_cloud.rb +5 -0
  21. data/db/migrate/20201007115752_add_hits_count_to_insights_facets_table.foreman_rh_cloud.rb +5 -0
  22. data/db/migrate/20201007121540_setup_hits_count_cache.foreman_rh_cloud.rb +10 -0
  23. data/lib/foreman_inventory_upload.rb +4 -0
  24. data/lib/foreman_inventory_upload/async/generate_report_job.rb +1 -1
  25. data/lib/foreman_inventory_upload/async/shell_process.rb +15 -9
  26. data/lib/foreman_inventory_upload/async/upload_report_job.rb +21 -9
  27. data/lib/foreman_inventory_upload/generators/fact_helpers.rb +36 -1
  28. data/lib/foreman_inventory_upload/generators/json_stream.rb +7 -2
  29. data/lib/foreman_inventory_upload/generators/metadata.rb +3 -0
  30. data/lib/foreman_inventory_upload/generators/queries.rb +4 -4
  31. data/lib/foreman_inventory_upload/generators/slice.rb +51 -27
  32. data/lib/foreman_rh_cloud.rb +68 -0
  33. data/lib/foreman_rh_cloud/engine.rb +19 -3
  34. data/lib/foreman_rh_cloud/version.rb +1 -1
  35. data/lib/insights_cloud.rb +8 -8
  36. data/lib/insights_cloud/async/insights_full_sync.rb +19 -31
  37. data/lib/insights_cloud/async/insights_scheduled_sync.rb +23 -0
  38. data/lib/inventory_sync/async/host_result.rb +50 -0
  39. data/lib/inventory_sync/async/inventory_full_sync.rb +80 -0
  40. data/lib/tasks/insights.rake +15 -0
  41. data/lib/tasks/rh_cloud_inventory.rake +37 -0
  42. data/package.json +3 -1
  43. data/test/controllers/insights_sync/settings_controller_test.rb +30 -0
  44. data/test/factories/insights_factories.rb +31 -0
  45. data/test/jobs/insights_full_sync_test.rb +4 -2
  46. data/test/jobs/inventory_full_sync_test.rb +91 -0
  47. data/test/jobs/upload_report_job_test.rb +34 -0
  48. data/test/unit/fact_helpers_test.rb +22 -0
  49. data/test/unit/insights_facet_test.rb +23 -0
  50. data/test/unit/metadata_generator_test.rb +2 -0
  51. data/test/unit/rh_cloud_http_proxy_test.rb +65 -0
  52. data/test/unit/slice_generator_test.rb +144 -8
  53. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +16 -1
  54. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +22 -17
  55. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListReducer.js +18 -0
  56. data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +8 -0
  57. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListActions.test.js +7 -0
  58. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListReducer.test.js +12 -6
  59. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +9 -0
  60. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListActions.test.js.snap +20 -0
  61. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListReducer.test.js.snap +12 -0
  62. data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListSelectors.test.js.snap +6 -0
  63. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.fixtures.js +2 -0
  64. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js +10 -11
  65. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherConstants.js +0 -1
  66. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcherActions.test.js +12 -2
  67. data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcherActions.test.js.snap +17 -0
  68. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.fixtures.js +1 -0
  69. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.js +30 -0
  70. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherActions.js +29 -0
  71. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherConstants.js +1 -0
  72. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcher.test.js +13 -0
  73. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcherActions.test.js +21 -0
  74. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcher.test.js.snap +38 -0
  75. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcherActions.test.js.snap +31 -0
  76. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/integration.test.js.snap +41 -0
  77. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/integration.test.js +38 -0
  78. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/excludePackagesSwitcher.scss +3 -0
  79. data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/index.js +20 -0
  80. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/FullScreenModal.js +5 -1
  81. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/__tests__/__snapshots__/FullScreenModal.test.js.snap +1 -0
  82. data/webpack/ForemanInventoryUpload/Components/FullScreenModal/fullScreenModal.scss +15 -13
  83. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.fixtures.js +2 -1
  84. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.js +1 -0
  85. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.scss +3 -0
  86. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherActions.js +10 -11
  87. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherConstants.js +0 -2
  88. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcherActions.test.js +12 -2
  89. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcherActions.test.js.snap +18 -1
  90. data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +9 -0
  91. data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.js +4 -0
  92. data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettings.test.js.snap +2 -0
  93. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.fixtures.js +1 -0
  94. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.js +29 -0
  95. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherActions.js +29 -0
  96. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherConstants.js +1 -0
  97. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcher.test.js +13 -0
  98. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcherActions.test.js +21 -0
  99. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcher.test.js.snap +38 -0
  100. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcherActions.test.js.snap +31 -0
  101. data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/index.js +20 -0
  102. data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.js +1 -1
  103. data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageHeader.test.js.snap +3 -3
  104. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/DocsButton.js +1 -0
  105. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/__tests__/__snapshots__/DocsButton.test.js.snap +1 -0
  106. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/HistoryButton.js +1 -0
  107. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/__tests__/__snapshots__/HistoryButton.test.js.snap +1 -0
  108. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButton.js +58 -0
  109. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +57 -0
  110. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js +3 -0
  111. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js +36 -0
  112. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonSelectors.js +13 -0
  113. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButton.test.js +13 -0
  114. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js +31 -0
  115. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonFixtures.js +9 -0
  116. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js +26 -0
  117. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonSelectors.test.js +36 -0
  118. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButton.test.js.snap +26 -0
  119. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap +98 -0
  120. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap +18 -0
  121. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonSelectors.test.js.snap +18 -0
  122. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Modal.js +63 -0
  123. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Toast.js +41 -0
  124. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/modal.scss +20 -0
  125. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/index.js +22 -0
  126. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/ToolbarButtons.js +2 -0
  127. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/__tests__/__snapshots__/ToolbarButtons.test.js.snap +1 -0
  128. data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/toolbarButtons.scss +6 -1
  129. data/webpack/ForemanInventoryUpload/Components/StatusChart/StatusChart.js +1 -1
  130. data/webpack/ForemanInventoryUpload/Components/StatusChart/__tests__/__snapshots__/StatusChart.test.js.snap +1 -1
  131. data/webpack/ForemanInventoryUpload/Components/TabContainer/tabContainer.scss +1 -1
  132. data/webpack/ForemanInventoryUpload/Components/TabHeader/TabHeader.js +6 -1
  133. data/webpack/ForemanInventoryUpload/Components/Terminal/Terminal.js +2 -4
  134. data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +3 -1
  135. data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +8 -0
  136. data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +2 -0
  137. data/webpack/ForemanRhCloudPages.js +9 -0
  138. data/webpack/ForemanRhCloudReducers.js +2 -0
  139. data/webpack/ForemanRhCloudSelectors.js +5 -0
  140. data/webpack/ForemanRhCloudTestHelpers.js +17 -3
  141. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettings.js +33 -0
  142. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsActions.js +57 -0
  143. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsConstants.js +4 -0
  144. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsReducer.js +24 -0
  145. data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsSelectors.js +6 -0
  146. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettings.test.js +18 -0
  147. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsActions.test.js +62 -0
  148. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsReducer.test.js +33 -0
  149. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsSelectors.test.js +21 -0
  150. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettings.test.js.snap +15 -0
  151. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsActions.test.js.snap +65 -0
  152. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsReducer.test.js.snap +19 -0
  153. data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsSelectors.test.js.snap +9 -0
  154. data/webpack/InsightsCloudSync/Components/InsightsSettings/index.js +21 -0
  155. data/webpack/InsightsCloudSync/Components/InsightsSettings/insightsSettings.scss +16 -0
  156. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.fixtures.js +1 -0
  157. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.js +45 -0
  158. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/InsightsSyncSwitcher.test.js +17 -0
  159. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/__snapshots__/InsightsSyncSwitcher.test.js.snap +38 -0
  160. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/index.js +1 -0
  161. data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/insightsSyncSwitcher.scss +3 -0
  162. data/webpack/InsightsCloudSync/InsightsCloudSync.js +32 -28
  163. data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +10 -11
  164. data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +0 -2
  165. data/webpack/InsightsCloudSync/InsightsCloudSyncReducers.js +7 -2
  166. data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +51 -46
  167. data/webpack/InsightsCloudSync/index.js +2 -1
  168. data/webpack/InsightsHostDetailsTab/InsightsTab.js +64 -0
  169. data/webpack/InsightsHostDetailsTab/InsightsTab.scss +86 -0
  170. data/webpack/InsightsHostDetailsTab/InsightsTabActions.js +31 -0
  171. data/webpack/InsightsHostDetailsTab/InsightsTabConstants.js +2 -0
  172. data/webpack/InsightsHostDetailsTab/InsightsTabReducer.js +19 -0
  173. data/webpack/InsightsHostDetailsTab/InsightsTabSelectors.js +3 -0
  174. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.fixtures.js +25 -0
  175. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.test.js +13 -0
  176. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabActions.test.js +19 -0
  177. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabIntegration.test.js +17 -0
  178. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabReducer.test.js +26 -0
  179. data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabSelectors.test.js +13 -0
  180. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTab.test.js.snap +30 -0
  181. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabActions.test.js.snap +58 -0
  182. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabReducer.test.js.snap +34 -0
  183. data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabSelectors.test.js.snap +20 -0
  184. data/webpack/InsightsHostDetailsTab/components/ListItem/ListItem.js +69 -0
  185. data/webpack/InsightsHostDetailsTab/components/ListItem/index.js +1 -0
  186. data/webpack/InsightsHostDetailsTab/index.js +20 -0
  187. data/webpack/__mocks__/foremanReact/constants.js +5 -0
  188. data/webpack/__mocks__/foremanReact/redux/actions/toasts.js +8 -0
  189. data/webpack/__tests__/ForemanRhCloudSelectors.test.js +4 -1
  190. data/webpack/__tests__/ForemanRhCloudTestHelpers.test.js +12 -2
  191. data/webpack/__tests__/__snapshots__/ForemanRhCloudSelectors.test.js.snap +10 -9
  192. data/webpack/__tests__/__snapshots__/ForemanRhCloudTestHelpers.test.js.snap +27 -2
  193. data/webpack/index.js +2 -12
  194. data/webpack/stories/decorators/withCardsDecorator.js +1 -1
  195. metadata +120 -12
  196. data/lib/tasks/generator.rake +0 -29
  197. data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/hostObfuscationSwitcher.scss +0 -0
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
4
4
  import { translate as __ } from 'foremanReact/common/I18n';
5
5
  import { Button, Icon } from 'patternfly-react';
6
6
  import { INSIGHTS_SYNC_PAGE_TITLE } from './InsightsCloudSyncConstants';
7
+ import InsightsSettings from './Components/InsightsSettings';
7
8
 
8
9
  const InsightsCloudSync = ({ data: { settingsUrl }, syncInsights }) => {
9
10
  document.title = INSIGHTS_SYNC_PAGE_TITLE;
@@ -11,34 +12,37 @@ const InsightsCloudSync = ({ data: { settingsUrl }, syncInsights }) => {
11
12
  <IntlProvider locale={navigator.language}>
12
13
  <div className="insights-cloud-sync">
13
14
  <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>
15
+ <div className="insights-cloud-sync-body">
16
+ <InsightsSettings />
17
+ <p>
18
+ {__(`Insights synchronization process is used to provide Insights
19
+ recommendations output for hosts managed here`)}
20
+ </p>
21
+ <p>
22
+ {__(`1. Obtain an RHSM API token: `)}
23
+ <a
24
+ href="https://access.redhat.com/management/api"
25
+ target="_blank"
26
+ rel="noopener noreferrer"
27
+ >
28
+ access.redhat.com <Icon name="external-link" size="xs" />
29
+ </a>
30
+ <br />
31
+ {__("2. Copy the token to 'Red Hat Cloud token' setting: ")}
32
+ <a href={settingsUrl} target="_blank" rel="noopener noreferrer">
33
+ {__('Red Hat Cloud token ')}
34
+ <Icon name="external-link" size="xs" />
35
+ </a>
36
+ <br />
37
+ {__(
38
+ '3. Now you can synchronize recommendations manually using the "Sync now" button.'
39
+ )}
40
+ </p>
41
+ <div>
42
+ <Button bsStyle="primary" onClick={syncInsights}>
43
+ {__('Sync now')}
44
+ </Button>
45
+ </div>
42
46
  </div>
43
47
  </div>
44
48
  </IntlProvider>
@@ -1,9 +1,7 @@
1
1
  import API from 'foremanReact/API';
2
+ import { addToast } from 'foremanReact/redux/actions/toasts';
2
3
  import { insightsCloudUrl } from './InsightsCloudSyncHelpers';
3
- import {
4
- INSIGHTS_CLOUD_SYNC_SUCCESS,
5
- INSIGHTS_CLOUD_SYNC_FAILURE,
6
- } from './InsightsCloudSyncConstants';
4
+ import { INSIGHTS_CLOUD_SYNC_SUCCESS } from './InsightsCloudSyncConstants';
7
5
 
8
6
  export const syncInsights = () => async dispatch => {
9
7
  try {
@@ -12,12 +10,13 @@ export const syncInsights = () => async dispatch => {
12
10
  type: INSIGHTS_CLOUD_SYNC_SUCCESS,
13
11
  payload: {},
14
12
  });
15
- } catch (error) {
16
- dispatch({
17
- type: INSIGHTS_CLOUD_SYNC_FAILURE,
18
- payload: {
19
- error: error.message,
20
- },
21
- });
13
+ } catch ({ message }) {
14
+ dispatch(
15
+ addToast({
16
+ sticky: true,
17
+ type: 'error',
18
+ message,
19
+ })
20
+ );
22
21
  }
23
22
  };
@@ -1,6 +1,4 @@
1
1
  import { translate as __ } from 'foremanReact/common/I18n';
2
2
 
3
3
  export const INSIGHTS_CLOUD_SYNC_SUCCESS = 'INSIGHTS_CLOUD_SYNC_SUCCESS';
4
- export const INSIGHTS_CLOUD_SYNC_FAILURE = 'INSIGHTS_CLOUD_SYNC_FAILURE';
5
-
6
4
  export const INSIGHTS_SYNC_PAGE_TITLE = __('Red Hat Insights cloud sync');
@@ -1,3 +1,8 @@
1
- const reducers = {};
1
+ import { combineReducers } from 'redux';
2
+ import { reducers as settingsReducers } from './Components/InsightsSettings';
2
3
 
3
- export default reducers;
4
+ export default {
5
+ InsightsCloudSync: combineReducers({
6
+ ...settingsReducers,
7
+ }),
8
+ };
@@ -10,52 +10,57 @@ exports[`InsightsCloudSync render 1`] = `
10
10
  <h1>
11
11
  Red Hat Insights Sync
12
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>
13
+ <div
14
+ className="insights-cloud-sync-body"
15
+ >
16
+ <Connect(InsightsSettings) />
17
+ <p>
18
+ Insights synchronization process is used to provide Insights
19
+ recommendations output for hosts managed here
20
+ </p>
21
+ <p>
22
+ 1. Obtain an RHSM API token:
23
+ <a
24
+ href="https://access.redhat.com/management/api"
25
+ rel="noopener noreferrer"
26
+ target="_blank"
27
+ >
28
+ access.redhat.com
29
+ <Icon
30
+ name="external-link"
31
+ size="xs"
32
+ type="fa"
33
+ />
34
+ </a>
35
+ <br />
36
+ 2. Copy the token to 'Red Hat Cloud token' setting:
37
+ <a
38
+ href="www.example.com/settings"
39
+ rel="noopener noreferrer"
40
+ target="_blank"
41
+ >
42
+ Red Hat Cloud token
43
+ <Icon
44
+ name="external-link"
45
+ size="xs"
46
+ type="fa"
47
+ />
48
+ </a>
49
+ <br />
50
+ 3. Now you can synchronize recommendations manually using the "Sync now" button.
51
+ </p>
52
+ <div>
53
+ <Button
54
+ active={false}
55
+ block={false}
56
+ bsClass="btn"
57
+ bsStyle="primary"
58
+ disabled={false}
59
+ onClick={[Function]}
60
+ >
61
+ Sync now
62
+ </Button>
63
+ </div>
59
64
  </div>
60
65
  </div>
61
66
  </IntlProvider>
@@ -3,6 +3,7 @@ import { connect } from 'react-redux';
3
3
 
4
4
  import * as actions from './InsightsCloudSyncActions';
5
5
  import InsightsCloudSync from './InsightsCloudSync';
6
+ import insightsCloudSyncReducers from './InsightsCloudSyncReducers';
6
7
 
7
8
  // map state to props
8
9
  const mapStateToProps = state => ({});
@@ -11,7 +12,7 @@ const mapStateToProps = state => ({});
11
12
  const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);
12
13
 
13
14
  // export reducers
14
- export const reducers = {};
15
+ export const reducers = insightsCloudSyncReducers;
15
16
 
16
17
  // export connected component
17
18
  export default connect(mapStateToProps, mapDispatchToProps)(InsightsCloudSync);
@@ -0,0 +1,64 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { orderBy } from 'lodash';
4
+ import { Grid, ListView, noop } from 'patternfly-react';
5
+ import ListItem from './components/ListItem';
6
+ import './InsightsTab.scss';
7
+
8
+ class InsightsHostDetailsTab extends React.Component {
9
+ componentDidMount() {
10
+ const { fetchHits, hostID } = this.props;
11
+ fetchHits(hostID);
12
+ }
13
+
14
+ render() {
15
+ const { hits } = this.props;
16
+
17
+ if (!hits.length) {
18
+ return <h2>No recommendations were found for this host!</h2>;
19
+ }
20
+ const hitsSorted = orderBy(hits, ['insights_hit.total_risk'], ['desc']);
21
+ const items = hitsSorted.map(
22
+ (
23
+ {
24
+ insights_hit: {
25
+ title,
26
+ total_risk: totalRisk,
27
+ results_url: resultsUrl,
28
+ solution_url: solutionUrl,
29
+ },
30
+ },
31
+ index
32
+ ) => (
33
+ <ListItem
34
+ key={index}
35
+ title={title}
36
+ totalRisk={totalRisk}
37
+ resultsUrl={resultsUrl}
38
+ solutionUrl={solutionUrl}
39
+ />
40
+ )
41
+ );
42
+ return (
43
+ <Grid.Row>
44
+ <Grid.Col xs={12}>
45
+ <h2>Recommendations</h2>
46
+ <ListView id="hits_list">{items}</ListView>
47
+ </Grid.Col>
48
+ </Grid.Row>
49
+ );
50
+ }
51
+ }
52
+
53
+ InsightsHostDetailsTab.propTypes = {
54
+ hostID: PropTypes.number.isRequired,
55
+ fetchHits: PropTypes.func,
56
+ hits: PropTypes.array,
57
+ };
58
+
59
+ InsightsHostDetailsTab.defaultProps = {
60
+ fetchHits: noop,
61
+ hits: [],
62
+ };
63
+
64
+ export default InsightsHostDetailsTab;
@@ -0,0 +1,86 @@
1
+ #host_details_insights_react_container {
2
+ #btn_toolbar {
3
+ float: right;
4
+ }
5
+
6
+ #btn_fullscreen {
7
+ margin-left: 5px;
8
+
9
+ .fa-arrows-alt {
10
+ margin-left: 5px;
11
+ }
12
+ }
13
+
14
+ h2 {
15
+ margin-top: 5px;
16
+ }
17
+
18
+ #hits_list {
19
+ max-height: 650px;
20
+ overflow-y: scroll;
21
+ overflow-x: hidden;
22
+ margin-top: 15px;
23
+
24
+ .list-view-pf-expand {
25
+ padding: 0;
26
+ }
27
+
28
+ .list-group-item-header {
29
+ .list-view-pf-expand .fa-angle-right {
30
+ margin-top: 6px;
31
+ }
32
+
33
+ .list-view-pf-main-info .list-view-pf-description {
34
+ width: 83%;
35
+
36
+ .list-group-item-heading {
37
+ width: 375px;
38
+ }
39
+
40
+ p {
41
+ margin: 0;
42
+ font-size: 14px;
43
+ }
44
+ }
45
+
46
+ .list-view-pf-additional-info {
47
+ .risk-label {
48
+ padding: 5px 8px;
49
+ border-radius: 12px;
50
+
51
+ &.Low {
52
+ background-color: #e7f1fa;
53
+ }
54
+
55
+ &.Moderate {
56
+ background-color: #fdf7e7;
57
+ }
58
+
59
+ &.Important {
60
+ background-color: #f9dddd;
61
+ }
62
+
63
+ &.Critical {
64
+ background-color: #ffecec;
65
+ }
66
+
67
+ p {
68
+ margin: 0;
69
+ }
70
+ }
71
+ }
72
+ }
73
+
74
+ &::-webkit-scrollbar {
75
+ width: 12px;
76
+ height: 12px;
77
+ }
78
+
79
+ &::-webkit-scrollbar-thumb {
80
+ background: #222;
81
+ border-radius: 6px;
82
+ border: 3px solid transparent;
83
+ background-clip: content-box;
84
+ }
85
+ }
86
+ }
@@ -0,0 +1,31 @@
1
+ import API from 'foremanReact/API';
2
+ import { addToast } from 'foremanReact/redux/actions/toasts';
3
+ import { insightsCloudUrl } from '../InsightsCloudSync/InsightsCloudSyncHelpers';
4
+ import {
5
+ INSIGHTS_HITS_REQUEST,
6
+ INSIGHTS_HITS_SUCCESS,
7
+ } from './InsightsTabConstants';
8
+
9
+ export const fetchHits = hostID => async dispatch => {
10
+ try {
11
+ dispatch({
12
+ type: INSIGHTS_HITS_REQUEST,
13
+ payload: {},
14
+ });
15
+ const {
16
+ data: { hits },
17
+ } = await API.get(insightsCloudUrl(`hits/${hostID}`));
18
+ dispatch({
19
+ type: INSIGHTS_HITS_SUCCESS,
20
+ payload: { hits },
21
+ });
22
+ } catch ({ message }) {
23
+ dispatch(
24
+ addToast({
25
+ sticky: true,
26
+ type: 'error',
27
+ message,
28
+ })
29
+ );
30
+ }
31
+ };
@@ -0,0 +1,2 @@
1
+ export const INSIGHTS_HITS_REQUEST = 'INSIGHTS_HITS_REQUEST';
2
+ export const INSIGHTS_HITS_SUCCESS = 'INSIGHTS_HITS_SUCCESS';
@@ -0,0 +1,19 @@
1
+ import Immutable from 'seamless-immutable';
2
+ import { INSIGHTS_HITS_SUCCESS } from './InsightsTabConstants';
3
+
4
+ const initialState = Immutable({
5
+ hits: [],
6
+ });
7
+
8
+ export default (state = initialState, action) => {
9
+ const { payload: { hits } = {} } = action;
10
+
11
+ switch (action.type) {
12
+ case INSIGHTS_HITS_SUCCESS:
13
+ return state.merge({
14
+ hits,
15
+ });
16
+ default:
17
+ return state;
18
+ }
19
+ };