From cf178d96bc99e936c673083bedabc4ee32483f57 Mon Sep 17 00:00:00 2001 From: Ajay Gupta Date: Wed, 24 May 2023 14:49:47 +0530 Subject: [PATCH 1/2] Table page should accept data source Signed-off-by: Ajay Gupta --- .../public/components/pit_edit/edit_page.tsx | 5 ++--- .../public/components/pit_table/pit_table.tsx | 10 +++++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/plugins/point_in_time_management/public/components/pit_edit/edit_page.tsx b/src/plugins/point_in_time_management/public/components/pit_edit/edit_page.tsx index 19b76b5e5a89..10025ba71c43 100644 --- a/src/plugins/point_in_time_management/public/components/pit_edit/edit_page.tsx +++ b/src/plugins/point_in_time_management/public/components/pit_edit/edit_page.tsx @@ -45,7 +45,6 @@ export const PITEdit = (props) => { const pit = props.location && props.location.state; console.log(pit); console.log(props.location.state); - debugger; const [pitSavedObject, setPitSavedObject] = useState( defaultPitSavedObject ); @@ -103,7 +102,7 @@ export const PITEdit = (props) => { console.log(attributes.pit_id, new_keep_alive_proposal); await services.addPitTime(attributes.pit_id, new_keep_alive_proposal, pit.dataSourceId); await updatePointInTimeById(savedObjects.client, attributes.id, attributes); - props.history.push('/'); + props.history.push('/', pit.dataSourceId); } else { console.log('This is not saved object', attributes); if (attributes.addtime > 0) { @@ -150,7 +149,7 @@ export const PITEdit = (props) => { // ['opensearch_dashboards_sample_data_ecommerce'], // 'opensearch_dashboards_sample_data_ecommerce', indexPatterns, dataSource, data, // http, keepAlive, makedashboardschecked, pitName, savedObjects, deletepitchecked) - props.history.push('/'); + props.history.push('/', pit.dataSourceId); } }; diff --git a/src/plugins/point_in_time_management/public/components/pit_table/pit_table.tsx b/src/plugins/point_in_time_management/public/components/pit_table/pit_table.tsx index aa3f4eba5026..3d5d193afa74 100644 --- a/src/plugins/point_in_time_management/public/components/pit_table/pit_table.tsx +++ b/src/plugins/point_in_time_management/public/components/pit_table/pit_table.tsx @@ -73,7 +73,7 @@ export interface PitItem { expiry: number; } -const PITTable = ({ history }: RouteComponentProps) => { +const PITTable = (props: RouteComponentProps) => { const { setBreadcrumbs, savedObjects, @@ -81,6 +81,9 @@ const PITTable = ({ history }: RouteComponentProps) => { http, } = useOpenSearchDashboards().services; + const history = props.history; + const dataSourceProp = props.location && props.location.state; + useMount(() => { setBreadcrumbs(getListBreadcrumbs()); }); @@ -121,6 +124,11 @@ const PITTable = ({ history }: RouteComponentProps) => { .concat([defaultDataSource]) .sort((a, b) => a.sort.localeCompare(b.sort)) ); + console.log('dataSourceprop', dataSourceProp); + const ds = dataSourceProp + ? fetchedDataSources.filter((x) => x.id === dataSourceProp)[0].title + : ''; + setDataSource(ds); } }) .catch(() => { From dddc16bc9c97c2e0516177fe791c20d396504f91 Mon Sep 17 00:00:00 2001 From: Ajay Gupta Date: Wed, 24 May 2023 17:06:14 +0530 Subject: [PATCH 2/2] Table page add time Signed-off-by: Ajay Gupta --- .../pit_table/empty_state/empty_state.tsx | 46 ++++--- .../public/components/pit_table/pit_table.tsx | 128 +++++++++++++++++- 2 files changed, 150 insertions(+), 24 deletions(-) diff --git a/src/plugins/point_in_time_management/public/components/pit_table/empty_state/empty_state.tsx b/src/plugins/point_in_time_management/public/components/pit_table/empty_state/empty_state.tsx index 3d8679cd1351..22a4a77d8b7f 100644 --- a/src/plugins/point_in_time_management/public/components/pit_table/empty_state/empty_state.tsx +++ b/src/plugins/point_in_time_management/public/components/pit_table/empty_state/empty_state.tsx @@ -6,27 +6,33 @@ import { EuiButton, EuiEmptyPrompt } from '@elastic/eui'; import { FormattedMessage } from '@osd/i18n/react'; import React from 'react'; +import { History } from 'history'; +import { CreateButton } from '../../create_button'; -export const EmptyState = () => ( - - -

- } - actions={ - - - - } - /> -); +interface Props { + history: History; +} + +export const EmptyState = ({ history }: Props) => { + console.log('history in empty state', history); + const createButton = ( + + ); + + return ( + + +

+ } + actions={createButton} + /> + ); +}; export const NoDataSourceState = () => ( { http, } = useOpenSearchDashboards().services; - const history = props.history; + const history: History = props.history; const dataSourceProp = props.location && props.location.state; useMount(() => { @@ -99,13 +105,15 @@ const PITTable = (props: RouteComponentProps) => { const [loading, setLoading] = useState(false); const [pits, setPits] = useState([]); const [pitsToDelete, setPitsToDelete] = useState([]); + const [pitToAddTime, setPitToAddTime] = useState([]); const [selectedPits, setSelectedPits] = useState([]); // const [dashboardPits, setDashboardPits] = useState([]); - const [message, setMessage] = useState(); + const [message, setMessage] = useState(); const [dataSources, setDataSources] = useState([defaultDataSource]); const [dataSource, setDataSource] = useState(''); const [isModalVisible, setIsModalVisible] = useState(false); + const [isAddTimeModalVisible, setIsAddTimeModalVisible] = useState(false); useEffectOnce(() => { fetchDataSources(); @@ -421,18 +429,129 @@ const PITTable = (props: RouteComponentProps) => { return
{modal}
; }; + const AddTimeModal = ({}) => { + const closeModal = () => { + setIsAddTimeModalVisible(false); + }; + + const [addTimeHr, setAddTimeHr] = useState(0); + const [addTimeMin, setAddTimeMin] = useState(0); + const [addTime, setAddTime] = useState(0); + + const onChangeTimeHr = (e) => { + setAddTimeHr(parseInt(e.target.value)); + setAddTime(60 * parseInt(e.target.value) + addTimeMin); + }; + + const onChangeTimeMin = (e) => { + setAddTimeMin(parseInt(e.target.value)); + setAddTime(60 * addTimeHr + parseInt(e.target.value)); + }; + + const addTimeToPit = (pit) => { + console.log(addTime); + console.log('add time pit', pit); + const new_keep_alive_proposal = addTime.toString() + 'm'; + const ds = + pit.dataSource == '' + ? undefined + : dataSources.filter((x) => x.title === pit.dataSource)[0].id; + services + .addPitTime(pit.pit_id, new_keep_alive_proposal, ds) + .then(() => getPits(pit.dataSource)) + .catch(() => { + toasts.addDanger( + i18n.translate('pitManagement.pitTable.addTimeError', { + defaultMessage: 'Error while updating PIT object.', + }) + ); + }); + }; + + let modal; + + if (isAddTimeModalVisible) { + const maxTime = moment(pitToAddTime[0].expiry).diff( + moment(pitToAddTime[0].creation_time), + 'hours' + ); + console.log('maxTime', maxTime); + const maxTimeExceeded = maxTime >= 24; + if (maxTimeExceeded) { + modal = ( + + + Maximum time reached + + + + A PIT can be kept for a maximum of 24 hours. You cannot add more time to this PIT. + To extend the time, configure point_in_time.max_keep_alive or contact your + administrator. + + + + + + Cancel + + + + ); + } else { + modal = ( + { + closeModal(); + addTimeToPit(pitToAddTime[0]); + setPitToAddTime([]); + }} + confirmButtonText="Add time to PIT" + cancelButtonText="Cancel" + > + + Add an amount of time to a PIT. This amount must be greater than the keep_alive time + (x) and cannot exceed the max_keep_alive time (y). You can configure keep_alive on the + PIT object details page. + + + + + + + + + + + + + + ); + } + } + + return
{modal}
; + }; + const displayDelete = (pit) => { setPitsToDelete([pit]); setIsModalVisible(true); }; + const displayAddTime = (pit) => { + setPitToAddTime([pit]); + setIsAddTimeModalVisible(true); + }; + const actions = [ { name: 'Add Time', description: 'Add Time', icon: 'clock', type: 'icon', - onClick: fetchDataSources, + onClick: displayAddTime, }, { name: 'Configure PIT', @@ -733,6 +852,7 @@ const PITTable = (props: RouteComponentProps) => { selection={selection} /> + {/* Create PIT