Skip to content

Commit

Permalink
added support for lake formation S3 connections
Browse files Browse the repository at this point in the history
Signed-off-by: Amardeepsingh Siglani <amardeep7194@gmail.com>
  • Loading branch information
amsiglan committed May 18, 2024
1 parent a8ea52d commit e66ff7e
Show file tree
Hide file tree
Showing 22 changed files with 1,065 additions and 270 deletions.
1 change: 1 addition & 0 deletions common/types/data_connections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export type DatasourceType = 'S3GLUE' | 'PROMETHEUS';
export interface S3GlueProperties {
'glue.indexstore.opensearch.uri': string;
'glue.indexstore.opensearch.region': string;
'glue.lakeformation.enabled': boolean;
}

export interface PrometheusProperties {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import {
EuiLoadingSpinner,
EuiPanel,
EuiSpacer,
EuiTableFieldDataColumnType,
EuiText,
EuiBasicTableColumn,
} from '@elastic/eui';
import React, { useCallback, useEffect, useState } from 'react';
import {
Expand Down Expand Up @@ -45,6 +45,7 @@ import {
interface AccelerationTableProps {
dataSourceName: string;
cacheLoadingHooks: any;
isS3ConnectionWithLakeFormation: boolean;
}

interface ModalState {
Expand All @@ -55,6 +56,7 @@ interface ModalState {
export const AccelerationTable = ({
dataSourceName,
cacheLoadingHooks,
isS3ConnectionWithLakeFormation,
}: AccelerationTableProps) => {
const [accelerations, setAccelerations] = useState<CachedAcceleration[]>([]);
const [updatedTime, setUpdatedTime] = useState<string>();
Expand Down Expand Up @@ -236,8 +238,10 @@ export const AccelerationTable = ({
},
];

const accelerationTableColumns = [
{
const accelerationTableColumnsCollection: {
[columnKey: string]: EuiBasicTableColumn<CachedAcceleration>;
} = {
name: {
field: 'indexName',
name: 'Name',
sortable: true,
Expand All @@ -254,13 +258,13 @@ export const AccelerationTable = ({
);
},
},
{
status: {
field: 'status',
name: 'Status',
sortable: true,
render: (status: string) => <AccelerationStatus status={status} />,
},
{
type: {
field: 'type',
name: 'Type',
sortable: true,
Expand All @@ -282,27 +286,27 @@ export const AccelerationTable = ({
return <EuiText size="s">{label}</EuiText>;
},
},
{
database: {
field: 'database',
name: 'Database',
sortable: true,
render: (database: string) => <EuiText size="s">{database}</EuiText>,
},
{
table: {
field: 'table',
name: 'Table',
sortable: true,
render: (table: string) => <EuiText size="s">{table || '-'}</EuiText>,
},
{
refreshType: {
field: 'refreshType',
name: 'Refresh Type',
sortable: true,
render: (autoRefresh: boolean, acceleration: CachedAcceleration) => {
return <EuiText size="s">{acceleration.autoRefresh ? 'Auto refresh' : 'Manual'}</EuiText>;
},
},
{
flintIndexName: {
field: 'flintIndexName',
name: 'Destination Index',
sortable: true,
Expand All @@ -313,11 +317,17 @@ export const AccelerationTable = ({
return flintIndexName || '-';
},
},
{
actions: {
name: 'Actions',
actions: tableActions,
},
] as Array<EuiTableFieldDataColumnType<any>>;
};

const accelerationTableColumns = !isS3ConnectionWithLakeFormation
? Object.values(accelerationTableColumnsCollection)
: Object.entries(accelerationTableColumnsCollection)
.filter(([key]) => key !== 'database' && key !== 'table')
.map(([_key, val]) => val);

const pagination = {
initialPageSize: 10,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

import {
EuiButton,
EuiButtonEmpty,
EuiDescriptionList,
EuiDescriptionListDescription,
EuiDescriptionListTitle,
Expand All @@ -15,13 +14,14 @@ import {
EuiFlyoutBody,
EuiFlyoutHeader,
EuiHorizontalRule,
EuiIcon,
EuiInMemoryTable,
EuiLink,
EuiSpacer,
EuiTableFieldDataColumnType,
EuiText,
EuiTitle,
EuiButtonIcon,
EuiToolTip,
} from '@elastic/eui';
import { i18n } from '@osd/i18n';
import React, { useEffect, useState } from 'react';
Expand Down Expand Up @@ -56,6 +56,7 @@ export interface AssociatedObjectsFlyoutProps {
resetFlyout: () => void;
handleRefresh?: () => void;
dataSourceMDSId?: string;
isS3ConnectionWithLakeFormation?: boolean;
}

export const AssociatedObjectsDetailsFlyout = ({
Expand All @@ -64,6 +65,7 @@ export const AssociatedObjectsDetailsFlyout = ({
resetFlyout,
handleRefresh,
dataSourceMDSId,
isS3ConnectionWithLakeFormation,
}: AssociatedObjectsFlyoutProps) => {
const { loadStatus, startLoading } = useLoadTableColumnsToCache();
const [tableColumns, setTableColumns] = useState<CachedColumn[] | undefined>([]);
Expand All @@ -72,38 +74,39 @@ export const AssociatedObjectsDetailsFlyout = ({

const DiscoverButton = () => {
return (
<EuiButtonEmpty
onClick={() => {
if (tableDetail.type !== 'table') return;
redirectToExplorerWithDataSrc(
tableDetail.datasource,
DATA_SOURCE_TYPES.S3Glue,
tableDetail.database,
tableDetail.name
);
resetFlyout();
}}
>
<EuiIcon type={'discoverApp'} size="m" />
</EuiButtonEmpty>
<EuiToolTip content="Query in Log Explorer">
<EuiButtonIcon
iconType={'discoverApp'}
size="m"
onClick={() => {
if (tableDetail.type !== 'table') return;
redirectToExplorerWithDataSrc(
tableDetail.datasource,
DATA_SOURCE_TYPES.S3Glue,
tableDetail.database,
tableDetail.name
);
resetFlyout();
}}
/>
</EuiToolTip>
);
};

const onCreateAcceleration = () =>
renderCreateAccelerationFlyout(
datasourceName,
'',
tableDetail.database,
tableDetail.name,
handleRefresh
);

const AccelerateButton = () => {
return (
<EuiButtonEmpty
onClick={() =>
renderCreateAccelerationFlyout(
datasourceName,
'',
tableDetail.database,
tableDetail.name,
handleRefresh
)
}
>
<EuiIcon type={'bolt'} size="m" />
</EuiButtonEmpty>
<EuiToolTip content="Create acceleration">
<EuiButtonIcon iconType="bolt" size="m" onClick={onCreateAcceleration} />
</EuiToolTip>
);
};

Expand All @@ -129,14 +132,19 @@ export const AssociatedObjectsDetailsFlyout = ({
);
};

const TableTitleComponent = (titleProps: { title: string }) => {
const { title } = titleProps;
const TableTitleComponent = (props: {
title: string;
description?: string;
horizontalRuleBottom?: boolean;
}) => {
const { title, description, horizontalRuleBottom } = props;
return (
<>
<EuiTitle size="s">
<h4>{title}</h4>
</EuiTitle>
<EuiHorizontalRule margin="s" />
{description && <EuiText>{description}</EuiText>}
{horizontalRuleBottom && <EuiHorizontalRule margin="s" />}
</>
);
};
Expand Down Expand Up @@ -295,17 +303,34 @@ export const AssociatedObjectsDetailsFlyout = ({
</EuiText>
</EuiFlexItem>
<EuiFlexItem grow={false}>
<DiscoverButton />
<AccelerateButton />
</EuiFlexItem>
<EuiFlexItem grow={false}>
<AccelerateButton />
<DiscoverButton />
</EuiFlexItem>
</EuiFlexGroup>
</EuiFlyoutHeader>
<EuiFlyoutBody>
<ConnectionComponent />
<EuiSpacer />
<TableTitleComponent title="Accelerations" />
<EuiFlexGroup gutterSize="s" justifyContent="spaceBetween" alignItems="center">
<EuiFlexItem>
<TableTitleComponent
title="Accelerations"
description={
isS3ConnectionWithLakeFormation
? 'Security Lake tables include basic acceleration with skipping index.'
: undefined
}
horizontalRuleBottom={!isS3ConnectionWithLakeFormation}
/>
</EuiFlexItem>
{isS3ConnectionWithLakeFormation && (
<EuiFlexItem grow={false}>
<EuiButton onClick={onCreateAcceleration}>Create acceleration</EuiButton>
</EuiFlexItem>
)}
</EuiFlexGroup>
{accelerationData.length > 0 ? (
<>
<EuiInMemoryTable
Expand All @@ -319,7 +344,7 @@ export const AssociatedObjectsDetailsFlyout = ({
noDataMessage
)}
<EuiSpacer />
<TableTitleComponent title="Schema" />
<TableTitleComponent title="Schema" horizontalRuleBottom />
<EuiInMemoryTable
items={schemaData}
columns={schemaColumns}
Expand Down
Loading

0 comments on commit e66ff7e

Please sign in to comment.