Fix #5230: Remove IngestionPipeline source from UI code (#5274)

Co-authored-by: Pere Miquel Brull <peremiquelbrull@gmail.com>
This commit is contained in:
darth-coder00 2022-06-03 01:54:41 +05:30 committed by GitHub
parent 7d98e7c652
commit bbd15ea9c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 67 additions and 78 deletions

View File

@ -29,9 +29,9 @@ import {
} from '../../generated/api/services/ingestionPipelines/createIngestionPipeline'; } from '../../generated/api/services/ingestionPipelines/createIngestionPipeline';
import { import {
ConfigClass, ConfigClass,
ConfigType,
FilterPattern, FilterPattern,
IngestionPipeline, IngestionPipeline,
TypeEnum,
} from '../../generated/entity/services/ingestionPipelines/ingestionPipeline'; } from '../../generated/entity/services/ingestionPipelines/ingestionPipeline';
import { import {
DatabaseServiceMetadataPipelineClass, DatabaseServiceMetadataPipelineClass,
@ -100,42 +100,34 @@ const AddIngestion = ({
const [showDashboardFilter, setShowDashboardFilter] = useState( const [showDashboardFilter, setShowDashboardFilter] = useState(
!isUndefined( !isUndefined(
(data?.source.sourceConfig.config as ConfigClass)?.dashboardFilterPattern (data?.sourceConfig.config as ConfigClass)?.dashboardFilterPattern
) )
); );
const [showDatabaseFilter, setShowDatabaseFilter] = useState( const [showDatabaseFilter, setShowDatabaseFilter] = useState(
!isUndefined( !isUndefined(
(data?.source.sourceConfig.config as ConfigClass)?.databaseFilterPattern (data?.sourceConfig.config as ConfigClass)?.databaseFilterPattern
) )
); );
const [showSchemaFilter, setShowSchemaFilter] = useState( const [showSchemaFilter, setShowSchemaFilter] = useState(
!isUndefined( !isUndefined(
(data?.source.sourceConfig.config as ConfigClass)?.schemaFilterPattern (data?.sourceConfig.config as ConfigClass)?.schemaFilterPattern
) )
); );
const [showTableFilter, setShowTableFilter] = useState( const [showTableFilter, setShowTableFilter] = useState(
!isUndefined( !isUndefined((data?.sourceConfig.config as ConfigClass)?.tableFilterPattern)
(data?.source.sourceConfig.config as ConfigClass)?.tableFilterPattern
)
); );
const [showTopicFilter, setShowTopicFilter] = useState( const [showTopicFilter, setShowTopicFilter] = useState(
!isUndefined( !isUndefined((data?.sourceConfig.config as ConfigClass)?.topicFilterPattern)
(data?.source.sourceConfig.config as ConfigClass)?.topicFilterPattern
)
); );
const [showChartFilter, setShowChartFilter] = useState( const [showChartFilter, setShowChartFilter] = useState(
!isUndefined( !isUndefined((data?.sourceConfig.config as ConfigClass)?.chartFilterPattern)
(data?.source.sourceConfig.config as ConfigClass)?.chartFilterPattern
)
); );
const [showFqnFilter, setShowFqnFilter] = useState( const [showFqnFilter, setShowFqnFilter] = useState(
!isUndefined( !isUndefined((data?.sourceConfig.config as ConfigClass)?.fqnFilterPattern)
(data?.source.sourceConfig.config as ConfigClass)?.fqnFilterPattern
)
); );
const configData = useMemo( const configData = useMemo(
() => () =>
(data?.source.sourceConfig.config as DatabaseServiceMetadataPipelineClass) (data?.sourceConfig.config as DatabaseServiceMetadataPipelineClass)
?.dbtConfigSource, ?.dbtConfigSource,
[data] [data]
); );
@ -156,76 +148,72 @@ const AddIngestion = ({
const [markDeletedTables, setMarkDeletedTables] = useState( const [markDeletedTables, setMarkDeletedTables] = useState(
isDatabaseService isDatabaseService
? Boolean( ? Boolean(
(data?.source.sourceConfig.config as ConfigClass) (data?.sourceConfig.config as ConfigClass)?.markDeletedTables ?? true
?.markDeletedTables ?? true
) )
: undefined : undefined
); );
const [includeView, setIncludeView] = useState( const [includeView, setIncludeView] = useState(
Boolean((data?.source.sourceConfig.config as ConfigClass)?.includeViews) Boolean((data?.sourceConfig.config as ConfigClass)?.includeViews)
); );
const [enableDataProfiler, setEnableDataProfiler] = useState( const [enableDataProfiler, setEnableDataProfiler] = useState(
(data?.source.sourceConfig.config as ConfigClass)?.enableDataProfiler ?? (data?.sourceConfig.config as ConfigClass)?.enableDataProfiler ?? true
true
); );
const [ingestSampleData, setIngestSampleData] = useState( const [ingestSampleData, setIngestSampleData] = useState(
(data?.source.sourceConfig.config as ConfigClass)?.generateSampleData ?? (data?.sourceConfig.config as ConfigClass)?.generateSampleData ?? true
true
); );
const [enableDebugLog, setEnableDebugLog] = useState( const [enableDebugLog, setEnableDebugLog] = useState(
data?.loggerLevel === LogLevels.Debug data?.loggerLevel === LogLevels.Debug
); );
const [dashboardFilterPattern, setDashboardFilterPattern] = const [dashboardFilterPattern, setDashboardFilterPattern] =
useState<FilterPattern>( useState<FilterPattern>(
(data?.source.sourceConfig.config as ConfigClass) (data?.sourceConfig.config as ConfigClass)?.dashboardFilterPattern ??
?.dashboardFilterPattern ?? INITIAL_FILTER_PATTERN INITIAL_FILTER_PATTERN
); );
const [databaseFilterPattern, setDatabaseFilterPattern] = const [databaseFilterPattern, setDatabaseFilterPattern] =
useState<FilterPattern>( useState<FilterPattern>(
(data?.source.sourceConfig.config as ConfigClass) (data?.sourceConfig.config as ConfigClass)?.databaseFilterPattern ??
?.databaseFilterPattern ?? INITIAL_FILTER_PATTERN INITIAL_FILTER_PATTERN
); );
const [schemaFilterPattern, setSchemaFilterPattern] = useState<FilterPattern>( const [schemaFilterPattern, setSchemaFilterPattern] = useState<FilterPattern>(
(data?.source.sourceConfig.config as ConfigClass)?.schemaFilterPattern ?? (data?.sourceConfig.config as ConfigClass)?.schemaFilterPattern ??
INITIAL_FILTER_PATTERN INITIAL_FILTER_PATTERN
); );
const [tableFilterPattern, setTableFilterPattern] = useState<FilterPattern>( const [tableFilterPattern, setTableFilterPattern] = useState<FilterPattern>(
(data?.source.sourceConfig.config as ConfigClass)?.tableFilterPattern ?? (data?.sourceConfig.config as ConfigClass)?.tableFilterPattern ??
INITIAL_FILTER_PATTERN INITIAL_FILTER_PATTERN
); );
const [topicFilterPattern, setTopicFilterPattern] = useState<FilterPattern>( const [topicFilterPattern, setTopicFilterPattern] = useState<FilterPattern>(
(data?.source.sourceConfig.config as ConfigClass)?.topicFilterPattern ?? (data?.sourceConfig.config as ConfigClass)?.topicFilterPattern ??
INITIAL_FILTER_PATTERN INITIAL_FILTER_PATTERN
); );
const [chartFilterPattern, setChartFilterPattern] = useState<FilterPattern>( const [chartFilterPattern, setChartFilterPattern] = useState<FilterPattern>(
(data?.source.sourceConfig.config as ConfigClass)?.chartFilterPattern ?? (data?.sourceConfig.config as ConfigClass)?.chartFilterPattern ??
INITIAL_FILTER_PATTERN INITIAL_FILTER_PATTERN
); );
const [fqnFilterPattern, setFqnFilterPattern] = useState<FilterPattern>( const [fqnFilterPattern, setFqnFilterPattern] = useState<FilterPattern>(
(data?.source.sourceConfig.config as ConfigClass)?.fqnFilterPattern ?? (data?.sourceConfig.config as ConfigClass)?.fqnFilterPattern ??
INITIAL_FILTER_PATTERN INITIAL_FILTER_PATTERN
); );
const [queryLogDuration, setQueryLogDuration] = useState<number>( const [queryLogDuration, setQueryLogDuration] = useState<number>(
(data?.source.sourceConfig.config as ConfigClass)?.queryLogDuration ?? 1 (data?.sourceConfig.config as ConfigClass)?.queryLogDuration ?? 1
); );
const [stageFileLocation, setStageFileLocation] = useState<string>( const [stageFileLocation, setStageFileLocation] = useState<string>(
(data?.source.sourceConfig.config as ConfigClass)?.stageFileLocation ?? (data?.sourceConfig.config as ConfigClass)?.stageFileLocation ??
'/tmp/query_log' '/tmp/query_log'
); );
const [resultLimit, setResultLimit] = useState<number>( const [resultLimit, setResultLimit] = useState<number>(
(data?.source.sourceConfig.config as ConfigClass)?.resultLimit ?? 100 (data?.sourceConfig.config as ConfigClass)?.resultLimit ?? 100
); );
const usageIngestionType = useMemo(() => { const usageIngestionType = useMemo(() => {
return ( return (
(data?.source.sourceConfig.config as ConfigClass)?.type ?? (data?.sourceConfig.config as ConfigClass)?.type ??
TypeEnum.DatabaseUsage ConfigType.DatabaseUsage
); );
}, [data]); }, [data]);
const profilerIngestionType = useMemo(() => { const profilerIngestionType = useMemo(() => {
return ( return (
(data?.source.sourceConfig.config as ConfigClass)?.type ?? (data?.sourceConfig.config as ConfigClass)?.type ?? ConfigType.Profiler
TypeEnum.Profiler
); );
}, [data]); }, [data]);
@ -399,7 +387,7 @@ const AddIngestion = ({
), ),
markDeletedTables, markDeletedTables,
...DatabaseConfigData, ...DatabaseConfigData,
type: TypeEnum.DatabaseMetadata, type: ConfigType.DatabaseMetadata,
}; };
} }
case ServiceCategory.MESSAGING_SERVICES: { case ServiceCategory.MESSAGING_SERVICES: {
@ -408,7 +396,7 @@ const AddIngestion = ({
topicFilterPattern, topicFilterPattern,
showTopicFilter showTopicFilter
), ),
type: TypeEnum.MessagingMetadata, type: ConfigType.MessagingMetadata,
}; };
} }
case ServiceCategory.DASHBOARD_SERVICES: { case ServiceCategory.DASHBOARD_SERVICES: {
@ -421,7 +409,7 @@ const AddIngestion = ({
dashboardFilterPattern, dashboardFilterPattern,
showDashboardFilter showDashboardFilter
), ),
type: TypeEnum.DashboardMetadata, type: ConfigType.DashboardMetadata,
}; };
} }
default: { default: {
@ -512,13 +500,10 @@ const AddIngestion = ({
scheduleInterval: repeatFrequency, scheduleInterval: repeatFrequency,
}, },
loggerLevel: enableDebugLog ? LogLevels.Debug : LogLevels.Info, loggerLevel: enableDebugLog ? LogLevels.Debug : LogLevels.Info,
source: { sourceConfig: {
...data.source, config: {
sourceConfig: { ...(data.sourceConfig.config as ConfigClass),
config: { ...getConfigData(pipelineType),
...(data.source.sourceConfig.config as ConfigClass),
...getConfigData(pipelineType),
},
}, },
}, },
}; };

View File

@ -43,12 +43,13 @@ import Searchbar from '../common/searchbar/Searchbar';
import DropDownList from '../dropdown/DropDownList'; import DropDownList from '../dropdown/DropDownList';
import Loader from '../Loader/Loader'; import Loader from '../Loader/Loader';
import EntityDeleteModal from '../Modals/EntityDeleteModal/EntityDeleteModal'; import EntityDeleteModal from '../Modals/EntityDeleteModal/EntityDeleteModal';
import { IngestionProps, ModifiedConfig } from './ingestion.interface'; import { IngestionProps } from './ingestion.interface';
const Ingestion: React.FC<IngestionProps> = ({ const Ingestion: React.FC<IngestionProps> = ({
airflowEndpoint, airflowEndpoint,
serviceName, serviceName,
serviceCategory, serviceCategory,
serviceDetails,
ingestionList, ingestionList,
isRequiredDetailsAvailable, isRequiredDetailsAvailable,
deleteIngestion, deleteIngestion,
@ -77,17 +78,28 @@ const Ingestion: React.FC<IngestionProps> = ({
setSearchText(searchValue); setSearchText(searchValue);
}; };
const getIngestionPipelineTypeOption = (): PipelineType[] => { const getSupportedPipelineTypes = () => {
if (ingestionList.length > 0) { let pipelineType = [];
const ingestion = ingestionList[0]?.source?.serviceConnection const config = serviceDetails.connection?.config;
?.config as ModifiedConfig; if (config) {
const pipelineType = []; config.supportsMetadataExtraction &&
ingestion?.supportsMetadataExtraction &&
pipelineType.push(PipelineType.Metadata); pipelineType.push(PipelineType.Metadata);
ingestion?.supportsUsageExtraction && config.supportsUsageExtraction && pipelineType.push(PipelineType.Usage);
pipelineType.push(PipelineType.Usage); config.supportsProfiler && pipelineType.push(PipelineType.Profiler);
ingestion?.supportsProfiler && pipelineType.push(PipelineType.Profiler); } else {
pipelineType = [
PipelineType.Metadata,
PipelineType.Usage,
PipelineType.Profiler,
];
}
return pipelineType;
};
const getIngestionPipelineTypeOption = (): PipelineType[] => {
const pipelineType = getSupportedPipelineTypes();
if (ingestionList.length > 0) {
return pipelineType.reduce((prev, curr) => { return pipelineType.reduce((prev, curr) => {
if ( if (
curr !== PipelineType.Profiler && curr !== PipelineType.Profiler &&

View File

@ -11,6 +11,8 @@
* limitations under the License. * limitations under the License.
*/ */
import { ServiceDataObj } from '../../interface/service.interface';
export const mockIngestionWorkFlow = { export const mockIngestionWorkFlow = {
data: { data: {
data: [ data: [
@ -62,7 +64,6 @@ export const mockIngestionWorkFlow = {
apiVersion: 'v1', apiVersion: 'v1',
}, },
airflowConfig: { airflowConfig: {
forceDeploy: true,
pausePipeline: false, pausePipeline: false,
concurrency: 1, concurrency: 1,
startDate: '2022-04-14', startDate: '2022-04-14',
@ -134,4 +135,4 @@ export const mockService = {
}, },
href: 'http://localhost:8585/api/v1/services/databaseServices/c68e904a-4262-4b58-84c1-8a986b4aa47d', href: 'http://localhost:8585/api/v1/services/databaseServices/c68e904a-4262-4b58-84c1-8a986b4aa47d',
deleted: false, deleted: false,
}; } as ServiceDataObj;

View File

@ -13,13 +13,10 @@
import { IngestionType, ServiceCategory } from '../../enums/service.enum'; import { IngestionType, ServiceCategory } from '../../enums/service.enum';
import { DatabaseService } from '../../generated/entity/services/databaseService'; import { DatabaseService } from '../../generated/entity/services/databaseService';
import { import { IngestionPipeline } from '../../generated/entity/services/ingestionPipelines/ingestionPipeline';
Connection,
IngestionPipeline,
} from '../../generated/entity/services/ingestionPipelines/ingestionPipeline';
import { EntityReference } from '../../generated/type/entityReference'; import { EntityReference } from '../../generated/type/entityReference';
import { Paging } from '../../generated/type/paging'; import { Paging } from '../../generated/type/paging';
import { DataObj } from '../../interface/service.interface'; import { ServiceDataObj } from '../../interface/service.interface';
export interface ConnectorConfig { export interface ConnectorConfig {
username: string; username: string;
@ -46,7 +43,6 @@ export interface IngestionData {
}>; }>;
nextExecutionDate?: string; nextExecutionDate?: string;
connectorConfig?: ConnectorConfig; connectorConfig?: ConnectorConfig;
forceDeploy?: boolean;
owner?: { id: string; name?: string; type: string }; owner?: { id: string; name?: string; type: string };
startDate?: string; startDate?: string;
endDate?: string; endDate?: string;
@ -54,7 +50,7 @@ export interface IngestionData {
export interface IngestionProps { export interface IngestionProps {
airflowEndpoint: string; airflowEndpoint: string;
serviceDetails: DataObj; serviceDetails: ServiceDataObj;
serviceName: string; serviceName: string;
serviceCategory: ServiceCategory; serviceCategory: ServiceCategory;
isRequiredDetailsAvailable: boolean; isRequiredDetailsAvailable: boolean;
@ -67,8 +63,3 @@ export interface IngestionProps {
deployIngestion: (id: string) => Promise<void>; deployIngestion: (id: string) => Promise<void>;
triggerIngestion: (id: string, displayName: string) => Promise<void>; triggerIngestion: (id: string, displayName: string) => Promise<void>;
} }
export interface ModifiedConfig extends Connection {
supportsMetadataExtraction: boolean;
supportsUsageExtraction: boolean;
}

View File

@ -171,7 +171,7 @@ const EditIngestionPage = () => {
owner, owner,
pipelineType, pipelineType,
service, service,
source, sourceConfig,
} = data; } = data;
const updateData = { const updateData = {
airflowConfig, airflowConfig,
@ -182,7 +182,7 @@ const EditIngestionPage = () => {
owner, owner,
pipelineType, pipelineType,
service, service,
sourceConfig: source.sourceConfig, sourceConfig,
}; };
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve, reject) => {

View File

@ -62,7 +62,7 @@ import { DatabaseService } from '../../generated/entity/services/databaseService
import { IngestionPipeline } from '../../generated/entity/services/ingestionPipelines/ingestionPipeline'; import { IngestionPipeline } from '../../generated/entity/services/ingestionPipelines/ingestionPipeline';
import { Paging } from '../../generated/type/paging'; import { Paging } from '../../generated/type/paging';
import { useAuth } from '../../hooks/authHooks'; import { useAuth } from '../../hooks/authHooks';
import { DataObj, ServiceDataObj } from '../../interface/service.interface'; import { ServiceDataObj } from '../../interface/service.interface';
import jsonData from '../../jsons/en'; import jsonData from '../../jsons/en';
import { import {
getEntityDeleteMessage, getEntityDeleteMessage,
@ -858,7 +858,7 @@ const ServicePage: FunctionComponent = () => {
paging={ingestionPaging} paging={ingestionPaging}
pagingHandler={ingestionPagingHandler} pagingHandler={ingestionPagingHandler}
serviceCategory={serviceName as ServiceCategory} serviceCategory={serviceName as ServiceCategory}
serviceDetails={serviceDetails as DataObj} serviceDetails={serviceDetails as ServiceDataObj}
serviceList={serviceList} serviceList={serviceList}
serviceName={serviceFQN} serviceName={serviceFQN}
triggerIngestion={triggerIngestionById} triggerIngestion={triggerIngestionById}