foreman_rh_cloud 0.9.8 → 0.9.13
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.
- checksums.yaml +4 -4
- data/README.md +33 -0
- data/app/controllers/foreman_inventory_upload/accounts_controller.rb +3 -0
- data/app/controllers/foreman_inventory_upload/tasks_controller.rb +25 -0
- data/app/controllers/foreman_inventory_upload/uploads_controller.rb +18 -0
- data/app/controllers/insights_cloud/hits_controller.rb +17 -0
- data/app/controllers/insights_cloud/settings_controller.rb +24 -0
- data/app/controllers/insights_cloud/tasks_controller.rb +1 -2
- data/app/helpers/foreman_inventory_upload_host_helper.rb +10 -2
- data/app/models/concerns/rh_cloud_host.rb +15 -0
- data/app/models/insights_facet.rb +5 -1
- data/app/models/insights_hit.rb +1 -1
- data/app/models/inventory_sync/inventory_status.rb +30 -0
- data/app/models/setting/rh_cloud.rb +4 -1
- data/app/overrides/hosts_list.rb +1 -1
- data/app/services/foreman_rh_cloud/cloud_auth.rb +28 -0
- data/app/views/foreman_rh_cloud/react/insights_cloud.html.erb +6 -1
- data/app/views/foreman_rh_cloud/react/inventory_upload.html.erb +1 -1
- data/app/views/hosts/_insights_tab.html.erb +15 -0
- data/config/routes.rb +6 -0
- data/db/migrate/20200727111529_add_uuid_column_to_insights_facets.foreman_rh_cloud.rb +5 -0
- data/db/migrate/20201007115752_add_hits_count_to_insights_facets_table.foreman_rh_cloud.rb +5 -0
- data/db/migrate/20201007121540_setup_hits_count_cache.foreman_rh_cloud.rb +10 -0
- data/lib/foreman_inventory_upload.rb +4 -0
- data/lib/foreman_inventory_upload/async/generate_report_job.rb +1 -1
- data/lib/foreman_inventory_upload/async/shell_process.rb +15 -9
- data/lib/foreman_inventory_upload/async/upload_report_job.rb +21 -9
- data/lib/foreman_inventory_upload/generators/fact_helpers.rb +36 -1
- data/lib/foreman_inventory_upload/generators/json_stream.rb +17 -2
- data/lib/foreman_inventory_upload/generators/metadata.rb +3 -0
- data/lib/foreman_inventory_upload/generators/queries.rb +4 -4
- data/lib/foreman_inventory_upload/generators/slice.rb +62 -34
- data/lib/foreman_rh_cloud.rb +67 -0
- data/lib/foreman_rh_cloud/engine.rb +20 -3
- data/lib/foreman_rh_cloud/version.rb +1 -1
- data/lib/insights_cloud.rb +8 -8
- data/lib/insights_cloud/async/insights_full_sync.rb +24 -32
- data/lib/insights_cloud/async/insights_scheduled_sync.rb +23 -0
- data/lib/inventory_sync/async/host_result.rb +50 -0
- data/lib/inventory_sync/async/inventory_full_sync.rb +80 -0
- data/lib/tasks/insights.rake +15 -0
- data/lib/tasks/rh_cloud_inventory.rake +37 -0
- data/package.json +3 -1
- data/test/controllers/insights_sync/settings_controller_test.rb +30 -0
- data/test/factories/insights_factories.rb +31 -0
- data/test/jobs/insights_full_sync_test.rb +33 -1
- data/test/jobs/inventory_full_sync_test.rb +91 -0
- data/test/jobs/upload_report_job_test.rb +34 -0
- data/test/unit/fact_helpers_test.rb +22 -0
- data/test/unit/insights_facet_test.rb +23 -0
- data/test/unit/metadata_generator_test.rb +2 -0
- data/test/unit/rh_cloud_http_proxy_test.rb +52 -0
- data/test/unit/slice_generator_test.rb +173 -11
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +16 -1
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +22 -17
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListReducer.js +18 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +8 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListActions.test.js +7 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListReducer.test.js +12 -6
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +9 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListActions.test.js.snap +20 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListReducer.test.js.snap +12 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountListSelectors.test.js.snap +6 -0
- data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcher.fixtures.js +2 -0
- data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js +10 -11
- data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherConstants.js +0 -1
- data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/AutoUploadSwitcherActions.test.js +12 -2
- data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/__tests__/__snapshots__/AutoUploadSwitcherActions.test.js.snap +17 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.fixtures.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcher.js +30 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherActions.js +29 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/ExcludePackagesSwitcherConstants.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcher.test.js +13 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/ExcludePackagesSwitcherActions.test.js +21 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcher.test.js.snap +38 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/ExcludePackagesSwitcherActions.test.js.snap +31 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/__snapshots__/integration.test.js.snap +41 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/__tests__/integration.test.js +38 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/excludePackagesSwitcher.scss +3 -0
- data/webpack/ForemanInventoryUpload/Components/ExcludePackagesSwitcher/index.js +20 -0
- data/webpack/ForemanInventoryUpload/Components/FullScreenModal/FullScreenModal.js +5 -1
- data/webpack/ForemanInventoryUpload/Components/FullScreenModal/__tests__/__snapshots__/FullScreenModal.test.js.snap +1 -0
- data/webpack/ForemanInventoryUpload/Components/FullScreenModal/fullScreenModal.scss +15 -13
- data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.fixtures.js +2 -1
- data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcher.scss +3 -0
- data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherActions.js +10 -11
- data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/HostObfuscationSwitcherConstants.js +0 -2
- data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/HostObfuscationSwitcherActions.test.js +12 -2
- data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/__tests__/__snapshots__/HostObfuscationSwitcherActions.test.js.snap +18 -1
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +9 -0
- data/webpack/ForemanInventoryUpload/Components/InventorySettings/InventorySettings.js +4 -0
- data/webpack/ForemanInventoryUpload/Components/InventorySettings/__tests__/__snapshots__/InventorySettings.test.js.snap +2 -0
- data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.fixtures.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcher.js +29 -0
- data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherActions.js +29 -0
- data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/IpsObfuscationSwitcherConstants.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcher.test.js +13 -0
- data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/IpsObfuscationSwitcherActions.test.js +21 -0
- data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcher.test.js.snap +38 -0
- data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/__tests__/__snapshots__/IpsObfuscationSwitcherActions.test.js.snap +31 -0
- data/webpack/ForemanInventoryUpload/Components/IpsObfuscationSwitcher/index.js +20 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageHeader.test.js.snap +3 -3
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/DocsButton.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/DocsButton/__tests__/__snapshots__/DocsButton.test.js.snap +1 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/HistoryButton.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/HistoryButton/__tests__/__snapshots__/HistoryButton.test.js.snap +1 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/PageDescription.js +2 -2
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/PageDescription/__tests__/__snapshots__/PageDescription.test.js.snap +2 -2
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButton.js +58 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonActions.js +57 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonConstants.js +3 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonReducer.js +36 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/SyncButtonSelectors.js +13 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButton.test.js +13 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonActions.test.js +31 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonFixtures.js +9 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonReducer.test.js +26 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/SyncButtonSelectors.test.js +36 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButton.test.js.snap +26 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonActions.test.js.snap +98 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonReducer.test.js.snap +18 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/__tests__/__snapshots__/SyncButtonSelectors.test.js.snap +18 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Modal.js +63 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/Toast.js +41 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/components/modal.scss +20 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/SyncButton/index.js +22 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/ToolbarButtons.js +2 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/__tests__/__snapshots__/ToolbarButtons.test.js.snap +1 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/components/ToolbarButtons/toolbarButtons.scss +6 -1
- data/webpack/ForemanInventoryUpload/Components/StatusChart/StatusChart.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/StatusChart/__tests__/__snapshots__/StatusChart.test.js.snap +1 -1
- data/webpack/ForemanInventoryUpload/Components/TabContainer/tabContainer.scss +1 -1
- data/webpack/ForemanInventoryUpload/Components/TabHeader/TabHeader.js +6 -1
- data/webpack/ForemanInventoryUpload/Components/Terminal/Terminal.js +2 -4
- data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +3 -1
- data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +8 -0
- data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +2 -0
- data/webpack/ForemanRhCloudPages.js +9 -0
- data/webpack/ForemanRhCloudReducers.js +2 -0
- data/webpack/ForemanRhCloudSelectors.js +5 -0
- data/webpack/ForemanRhCloudTestHelpers.js +17 -3
- data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettings.js +33 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsActions.js +57 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsConstants.js +4 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsReducer.js +24 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/InsightsSettingsSelectors.js +6 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettings.test.js +18 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsActions.test.js +62 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsReducer.test.js +33 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/InsightsSettingsSelectors.test.js +21 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettings.test.js.snap +15 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsActions.test.js.snap +65 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsReducer.test.js.snap +19 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/__tests__/__snapshots__/InsightsSettingsSelectors.test.js.snap +9 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/index.js +21 -0
- data/webpack/InsightsCloudSync/Components/InsightsSettings/insightsSettings.scss +16 -0
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.fixtures.js +1 -0
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.js +45 -0
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/InsightsSyncSwitcher.test.js +17 -0
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/__tests__/__snapshots__/InsightsSyncSwitcher.test.js.snap +38 -0
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/index.js +1 -0
- data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/insightsSyncSwitcher.scss +3 -0
- data/webpack/InsightsCloudSync/InsightsCloudSync.js +38 -5
- data/webpack/InsightsCloudSync/InsightsCloudSync.test.js +3 -0
- data/webpack/InsightsCloudSync/InsightsCloudSyncActions.js +10 -11
- data/webpack/InsightsCloudSync/InsightsCloudSyncConstants.js +0 -2
- data/webpack/InsightsCloudSync/InsightsCloudSyncReducers.js +7 -2
- data/webpack/InsightsCloudSync/__snapshots__/InsightsCloudSync.test.js.snap +49 -9
- data/webpack/InsightsCloudSync/index.js +2 -1
- data/webpack/InsightsHostDetailsTab/InsightsTab.js +64 -0
- data/webpack/InsightsHostDetailsTab/InsightsTab.scss +86 -0
- data/webpack/InsightsHostDetailsTab/InsightsTabActions.js +31 -0
- data/webpack/InsightsHostDetailsTab/InsightsTabConstants.js +2 -0
- data/webpack/InsightsHostDetailsTab/InsightsTabReducer.js +19 -0
- data/webpack/InsightsHostDetailsTab/InsightsTabSelectors.js +3 -0
- data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.fixtures.js +25 -0
- data/webpack/InsightsHostDetailsTab/__tests__/InsightsTab.test.js +13 -0
- data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabActions.test.js +19 -0
- data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabIntegration.test.js +17 -0
- data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabReducer.test.js +26 -0
- data/webpack/InsightsHostDetailsTab/__tests__/InsightsTabSelectors.test.js +13 -0
- data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTab.test.js.snap +30 -0
- data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabActions.test.js.snap +58 -0
- data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabReducer.test.js.snap +34 -0
- data/webpack/InsightsHostDetailsTab/__tests__/__snapshots__/InsightsTabSelectors.test.js.snap +20 -0
- data/webpack/InsightsHostDetailsTab/components/ListItem/ListItem.js +69 -0
- data/webpack/InsightsHostDetailsTab/components/ListItem/index.js +1 -0
- data/webpack/InsightsHostDetailsTab/index.js +20 -0
- data/webpack/__mocks__/foremanReact/constants.js +5 -0
- data/webpack/__mocks__/foremanReact/redux/actions/toasts.js +8 -0
- data/webpack/__tests__/ForemanRhCloudSelectors.test.js +4 -1
- data/webpack/__tests__/ForemanRhCloudTestHelpers.test.js +12 -2
- data/webpack/__tests__/__snapshots__/ForemanRhCloudSelectors.test.js.snap +10 -9
- data/webpack/__tests__/__snapshots__/ForemanRhCloudTestHelpers.test.js.snap +27 -2
- data/webpack/index.js +2 -12
- data/webpack/stories/decorators/withCardsDecorator.js +1 -1
- metadata +120 -12
- data/lib/tasks/generator.rake +0 -29
- data/webpack/ForemanInventoryUpload/Components/HostObfuscationSwitcher/hostObfuscationSwitcher.scss +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`InsightsSettings reducer should handle INSIGHTS_SYNC_SETTING_SET 1`] = `
|
|
4
|
+
Object {
|
|
5
|
+
"insightsSyncEnabled": true,
|
|
6
|
+
}
|
|
7
|
+
`;
|
|
8
|
+
|
|
9
|
+
exports[`InsightsSettings reducer should handle INSIGHTS_SYNC_SETTINGS_GET_SUCCESS 1`] = `
|
|
10
|
+
Object {
|
|
11
|
+
"insightsSyncEnabled": true,
|
|
12
|
+
}
|
|
13
|
+
`;
|
|
14
|
+
|
|
15
|
+
exports[`InsightsSettings reducer should return the initial state 1`] = `
|
|
16
|
+
Object {
|
|
17
|
+
"insightsSyncEnabled": false,
|
|
18
|
+
}
|
|
19
|
+
`;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`InsightsSettings selectors should return insights sync settings 1`] = `
|
|
4
|
+
Object {
|
|
5
|
+
"insightsSyncEnabled": true,
|
|
6
|
+
}
|
|
7
|
+
`;
|
|
8
|
+
|
|
9
|
+
exports[`InsightsSettings selectors should return insightsSyncEnabled setting 1`] = `true`;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { bindActionCreators } from 'redux';
|
|
2
|
+
import { connect } from 'react-redux';
|
|
3
|
+
|
|
4
|
+
import InsightsSettings from './InsightsSettings';
|
|
5
|
+
import { selectInsightsSyncEnabled } from './InsightsSettingsSelectors';
|
|
6
|
+
import * as actions from './InsightsSettingsActions';
|
|
7
|
+
import reducer from './InsightsSettingsReducer';
|
|
8
|
+
|
|
9
|
+
// map state to props
|
|
10
|
+
const mapStateToProps = state => ({
|
|
11
|
+
insightsSyncEnabled: selectInsightsSyncEnabled(state),
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
// map action dispatchers to props
|
|
15
|
+
const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);
|
|
16
|
+
|
|
17
|
+
// export connected component
|
|
18
|
+
export default connect(mapStateToProps, mapDispatchToProps)(InsightsSettings);
|
|
19
|
+
|
|
20
|
+
// export reducers
|
|
21
|
+
export const reducers = { settings: reducer };
|
data/webpack/InsightsCloudSync/Components/InsightsSyncSwitcher/InsightsSyncSwitcher.fixtures.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const handleToggleResponse = { data: { insightsSyncEnabled: true } };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { Switch, FieldLevelHelp } from 'patternfly-react';
|
|
4
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
|
5
|
+
import './insightsSyncSwitcher.scss';
|
|
6
|
+
|
|
7
|
+
class InsightsSyncSwitcher extends Component {
|
|
8
|
+
handleToggle = () => {
|
|
9
|
+
const { insightsSyncEnabled, setInsightsSyncEnabled } = this.props;
|
|
10
|
+
|
|
11
|
+
const toggledInsightsSyncEnabled = !insightsSyncEnabled;
|
|
12
|
+
setInsightsSyncEnabled(toggledInsightsSyncEnabled);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
render() {
|
|
16
|
+
const { insightsSyncEnabled } = this.props;
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<div className="insights_sync_switcher">
|
|
20
|
+
<span>Synchronize Automatically</span>
|
|
21
|
+
<FieldLevelHelp
|
|
22
|
+
content={__(
|
|
23
|
+
'Enable automatic synchronization of Insights recommendations from the Red Hat cloud'
|
|
24
|
+
)}
|
|
25
|
+
/>
|
|
26
|
+
<Switch
|
|
27
|
+
size="mini"
|
|
28
|
+
value={insightsSyncEnabled}
|
|
29
|
+
onChange={this.handleToggle}
|
|
30
|
+
/>
|
|
31
|
+
</div>
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
InsightsSyncSwitcher.propTypes = {
|
|
37
|
+
insightsSyncEnabled: PropTypes.bool,
|
|
38
|
+
setInsightsSyncEnabled: PropTypes.func.isRequired,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
InsightsSyncSwitcher.defaultProps = {
|
|
42
|
+
insightsSyncEnabled: true,
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default InsightsSyncSwitcher;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
|
|
2
|
+
import { noop } from 'patternfly-react';
|
|
3
|
+
|
|
4
|
+
import InsightsSyncSwitcher from '../InsightsSyncSwitcher';
|
|
5
|
+
|
|
6
|
+
const fixtures = {
|
|
7
|
+
'render with props': {
|
|
8
|
+
insightsSyncEnabled: true,
|
|
9
|
+
setInsightsSyncEnabled: noop,
|
|
10
|
+
},
|
|
11
|
+
/** fixtures, props for the component */
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
describe('InsightsSyncSwitcher', () => {
|
|
15
|
+
describe('rendering', () =>
|
|
16
|
+
testComponentSnapshotsWithFixtures(InsightsSyncSwitcher, fixtures));
|
|
17
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`InsightsSyncSwitcher rendering render with props 1`] = `
|
|
4
|
+
<div
|
|
5
|
+
className="insights_sync_switcher"
|
|
6
|
+
>
|
|
7
|
+
<span>
|
|
8
|
+
Synchronize Automatically
|
|
9
|
+
</span>
|
|
10
|
+
<FieldLevelHelp
|
|
11
|
+
buttonClass=""
|
|
12
|
+
content="Enable automatic synchronization of Insights recommendations from the Red Hat cloud"
|
|
13
|
+
placement="top"
|
|
14
|
+
rootClose={true}
|
|
15
|
+
/>
|
|
16
|
+
<Switch
|
|
17
|
+
animate={true}
|
|
18
|
+
baseClass="bootstrap-switch"
|
|
19
|
+
bsSize={null}
|
|
20
|
+
defaultValue={true}
|
|
21
|
+
disabled={false}
|
|
22
|
+
handleWidth="auto"
|
|
23
|
+
inverse={false}
|
|
24
|
+
labelText=" "
|
|
25
|
+
labelWidth="auto"
|
|
26
|
+
offColor="default"
|
|
27
|
+
offText="OFF"
|
|
28
|
+
onChange={[Function]}
|
|
29
|
+
onColor="primary"
|
|
30
|
+
onText="ON"
|
|
31
|
+
readonly={false}
|
|
32
|
+
size="mini"
|
|
33
|
+
tristate={false}
|
|
34
|
+
value={true}
|
|
35
|
+
wrapperClass="wrapper"
|
|
36
|
+
/>
|
|
37
|
+
</div>
|
|
38
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './InsightsSyncSwitcher';
|
|
@@ -2,18 +2,48 @@ import React from 'react';
|
|
|
2
2
|
import { IntlProvider } from 'react-intl';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { translate as __ } from 'foremanReact/common/I18n';
|
|
5
|
-
import { Button } from 'patternfly-react';
|
|
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
|
-
const InsightsCloudSync = ({ syncInsights }) => {
|
|
9
|
+
const InsightsCloudSync = ({ data: { settingsUrl }, syncInsights }) => {
|
|
9
10
|
document.title = INSIGHTS_SYNC_PAGE_TITLE;
|
|
10
11
|
return (
|
|
11
12
|
<IntlProvider locale={navigator.language}>
|
|
12
13
|
<div className="insights-cloud-sync">
|
|
13
14
|
<h1>{__('Red Hat Insights Sync')}</h1>
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
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" />
|
|
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" />
|
|
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>
|
|
46
|
+
</div>
|
|
17
47
|
</div>
|
|
18
48
|
</IntlProvider>
|
|
19
49
|
);
|
|
@@ -21,6 +51,9 @@ const InsightsCloudSync = ({ syncInsights }) => {
|
|
|
21
51
|
|
|
22
52
|
InsightsCloudSync.propTypes = {
|
|
23
53
|
syncInsights: PropTypes.func.isRequired,
|
|
54
|
+
data: PropTypes.shape({
|
|
55
|
+
settingsUrl: PropTypes.string.isRequired,
|
|
56
|
+
}).isRequired,
|
|
24
57
|
};
|
|
25
58
|
|
|
26
59
|
export default InsightsCloudSync;
|
|
@@ -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 (
|
|
16
|
-
dispatch(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
1
|
+
import { combineReducers } from 'redux';
|
|
2
|
+
import { reducers as settingsReducers } from './Components/InsightsSettings';
|
|
2
3
|
|
|
3
|
-
export default
|
|
4
|
+
export default {
|
|
5
|
+
InsightsCloudSync: combineReducers({
|
|
6
|
+
...settingsReducers,
|
|
7
|
+
}),
|
|
8
|
+
};
|
|
@@ -10,16 +10,56 @@ exports[`InsightsCloudSync render 1`] = `
|
|
|
10
10
|
<h1>
|
|
11
11
|
Red Hat Insights Sync
|
|
12
12
|
</h1>
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
block={false}
|
|
16
|
-
bsClass="btn"
|
|
17
|
-
bsStyle="primary"
|
|
18
|
-
disabled={false}
|
|
19
|
-
onClick={[Function]}
|
|
13
|
+
<div
|
|
14
|
+
className="insights-cloud-sync-body"
|
|
20
15
|
>
|
|
21
|
-
|
|
22
|
-
|
|
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
|
+
type="fa"
|
|
32
|
+
/>
|
|
33
|
+
</a>
|
|
34
|
+
<br />
|
|
35
|
+
2. Copy the token to 'Red Hat Cloud token' setting:
|
|
36
|
+
<a
|
|
37
|
+
href="www.example.com/settings"
|
|
38
|
+
rel="noopener noreferrer"
|
|
39
|
+
target="_blank"
|
|
40
|
+
>
|
|
41
|
+
Red Hat Cloud token
|
|
42
|
+
<Icon
|
|
43
|
+
name="external-link"
|
|
44
|
+
type="fa"
|
|
45
|
+
/>
|
|
46
|
+
</a>
|
|
47
|
+
<br />
|
|
48
|
+
3. Now you can synchronize recommendations manually using the "Sync now" button.
|
|
49
|
+
</p>
|
|
50
|
+
<div>
|
|
51
|
+
<Button
|
|
52
|
+
active={false}
|
|
53
|
+
block={false}
|
|
54
|
+
bsClass="btn"
|
|
55
|
+
bsStyle="primary"
|
|
56
|
+
disabled={false}
|
|
57
|
+
onClick={[Function]}
|
|
58
|
+
>
|
|
59
|
+
Sync now
|
|
60
|
+
</Button>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
23
63
|
</div>
|
|
24
64
|
</IntlProvider>
|
|
25
65
|
`;
|
|
@@ -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;
|