mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-05 04:56:54 +00:00
parent
1a0a9dfed3
commit
b496a2bca8
@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright ownership.
|
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
* (the "License"); you may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { AxiosResponse } from 'axios';
|
||||||
|
import { Pipeline } from '../generated/entity/data/pipeline';
|
||||||
|
import { getURLWithQueryFields } from '../utils/APIUtils';
|
||||||
|
import APIClient from './index';
|
||||||
|
|
||||||
|
export const getPipelines: Function = (
|
||||||
|
serviceName: string,
|
||||||
|
paging: string,
|
||||||
|
arrQueryFields: string
|
||||||
|
): Promise<AxiosResponse> => {
|
||||||
|
const url = `${getURLWithQueryFields(
|
||||||
|
`/pipelines`,
|
||||||
|
arrQueryFields
|
||||||
|
)}&service=${serviceName}${paging ? paging : ''}`;
|
||||||
|
|
||||||
|
return APIClient.get(url);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getPipelineDetails: Function = (
|
||||||
|
id: string,
|
||||||
|
arrQueryFields: string
|
||||||
|
): Promise<AxiosResponse> => {
|
||||||
|
const url = getURLWithQueryFields(`/pipelines/${id}`, arrQueryFields);
|
||||||
|
|
||||||
|
return APIClient.get(url);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getPipelineByFqn: Function = (
|
||||||
|
fqn: string,
|
||||||
|
arrQueryFields: string
|
||||||
|
): Promise<AxiosResponse> => {
|
||||||
|
const url = getURLWithQueryFields(`/pipelines/name/${fqn}`, arrQueryFields);
|
||||||
|
|
||||||
|
return APIClient.get(url);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const addFollower: Function = (
|
||||||
|
pipelineID: string,
|
||||||
|
userId: string
|
||||||
|
): Promise<AxiosResponse> => {
|
||||||
|
const configOptions = {
|
||||||
|
headers: { 'Content-type': 'application/json' },
|
||||||
|
};
|
||||||
|
|
||||||
|
return APIClient.put(
|
||||||
|
`/pipelines/${pipelineID}/followers`,
|
||||||
|
userId,
|
||||||
|
configOptions
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const removeFollower: Function = (
|
||||||
|
pipelineID: string,
|
||||||
|
userId: string
|
||||||
|
): Promise<AxiosResponse> => {
|
||||||
|
const configOptions = {
|
||||||
|
headers: { 'Content-type': 'application/json' },
|
||||||
|
};
|
||||||
|
|
||||||
|
return APIClient.delete(
|
||||||
|
`/pipelines/${pipelineID}/followers/${userId}`,
|
||||||
|
configOptions
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const patchPipelineDetails: Function = (
|
||||||
|
id: string,
|
||||||
|
data: Pipeline
|
||||||
|
): Promise<AxiosResponse> => {
|
||||||
|
const configOptions = {
|
||||||
|
headers: { 'Content-type': 'application/json-patch+json' },
|
||||||
|
};
|
||||||
|
|
||||||
|
return APIClient.patch(`/pipelines/${id}`, data, configOptions);
|
||||||
|
};
|
||||||
@ -23,6 +23,7 @@ import React, { Fragment, FunctionComponent, useEffect, useState } from 'react';
|
|||||||
import { Link, useParams } from 'react-router-dom';
|
import { Link, useParams } from 'react-router-dom';
|
||||||
import { getDashboards } from '../../axiosAPIs/dashboardAPI';
|
import { getDashboards } from '../../axiosAPIs/dashboardAPI';
|
||||||
import { getDatabases } from '../../axiosAPIs/databaseAPI';
|
import { getDatabases } from '../../axiosAPIs/databaseAPI';
|
||||||
|
import { getPipelines } from '../../axiosAPIs/pipelineAPI';
|
||||||
import { getServiceByFQN, updateService } from '../../axiosAPIs/serviceAPI';
|
import { getServiceByFQN, updateService } from '../../axiosAPIs/serviceAPI';
|
||||||
import { getTopics } from '../../axiosAPIs/topicsAPI';
|
import { getTopics } from '../../axiosAPIs/topicsAPI';
|
||||||
import NextPrevious from '../../components/common/next-previous/NextPrevious';
|
import NextPrevious from '../../components/common/next-previous/NextPrevious';
|
||||||
@ -42,10 +43,12 @@ import {
|
|||||||
} from '../../enums/service.enum';
|
} from '../../enums/service.enum';
|
||||||
import { Dashboard } from '../../generated/entity/data/dashboard';
|
import { Dashboard } from '../../generated/entity/data/dashboard';
|
||||||
import { Database } from '../../generated/entity/data/database';
|
import { Database } from '../../generated/entity/data/database';
|
||||||
|
import { Pipeline } from '../../generated/entity/data/pipeline';
|
||||||
import { Topic } from '../../generated/entity/data/topic';
|
import { Topic } from '../../generated/entity/data/topic';
|
||||||
import { DashboardService } from '../../generated/entity/services/dashboardService';
|
import { DashboardService } from '../../generated/entity/services/dashboardService';
|
||||||
import { DatabaseService } from '../../generated/entity/services/databaseService';
|
import { DatabaseService } from '../../generated/entity/services/databaseService';
|
||||||
import { MessagingService } from '../../generated/entity/services/messagingService';
|
import { MessagingService } from '../../generated/entity/services/messagingService';
|
||||||
|
import { PipelineService } from '../../generated/entity/services/pipelineService';
|
||||||
import useToastContext from '../../hooks/useToastContext';
|
import useToastContext from '../../hooks/useToastContext';
|
||||||
import { isEven } from '../../utils/CommonUtils';
|
import { isEven } from '../../utils/CommonUtils';
|
||||||
import {
|
import {
|
||||||
@ -59,7 +62,8 @@ import { getEntityLink, getUsagePercentile } from '../../utils/TableUtils';
|
|||||||
type Data = Database | Topic | Dashboard;
|
type Data = Database | Topic | Dashboard;
|
||||||
type ServiceDataObj = { name: string } & Partial<DatabaseService> &
|
type ServiceDataObj = { name: string } & Partial<DatabaseService> &
|
||||||
Partial<MessagingService> &
|
Partial<MessagingService> &
|
||||||
Partial<DashboardService>;
|
Partial<DashboardService> &
|
||||||
|
Partial<PipelineService>;
|
||||||
|
|
||||||
const ServicePage: FunctionComponent = () => {
|
const ServicePage: FunctionComponent = () => {
|
||||||
const { serviceFQN, serviceType } = useParams() as Record<string, string>;
|
const { serviceFQN, serviceType } = useParams() as Record<string, string>;
|
||||||
@ -143,6 +147,31 @@ const ServicePage: FunctionComponent = () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const fetchPipeLines = (paging?: string) => {
|
||||||
|
setIsloading(true);
|
||||||
|
getPipelines(serviceFQN, paging, [
|
||||||
|
'owner',
|
||||||
|
'service',
|
||||||
|
'usageSummary',
|
||||||
|
'tags',
|
||||||
|
])
|
||||||
|
.then((res: AxiosResponse) => {
|
||||||
|
if (res.data.data) {
|
||||||
|
setData(res.data.data);
|
||||||
|
setPaging(res.data.paging);
|
||||||
|
setInstanceCount(res.data.paging.total);
|
||||||
|
setIsloading(false);
|
||||||
|
} else {
|
||||||
|
setData([]);
|
||||||
|
setPaging(pagingObject);
|
||||||
|
setIsloading(false);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
setIsloading(false);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const getOtherDetails = (paging?: string) => {
|
const getOtherDetails = (paging?: string) => {
|
||||||
switch (serviceName) {
|
switch (serviceName) {
|
||||||
case ServiceCategory.DATABASE_SERVICES: {
|
case ServiceCategory.DATABASE_SERVICES: {
|
||||||
@ -160,6 +189,11 @@ const ServicePage: FunctionComponent = () => {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ServiceCategory.PIPELINE_SERVICES: {
|
||||||
|
fetchPipeLines(paging);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -349,6 +383,39 @@ const ServicePage: FunctionComponent = () => {
|
|||||||
|
|
||||||
return elemFields;
|
return elemFields;
|
||||||
}
|
}
|
||||||
|
case ServiceCategory.PIPELINE_SERVICES:
|
||||||
|
return (
|
||||||
|
<span>
|
||||||
|
<span className="tw-text-grey-muted tw-font-normal">
|
||||||
|
Pipeline Url :
|
||||||
|
</span>{' '}
|
||||||
|
<span className="tw-pl-1tw-font-normal ">
|
||||||
|
{serviceDetails?.pipelineUrl ? (
|
||||||
|
<a
|
||||||
|
className="link-text"
|
||||||
|
href={serviceDetails.pipelineUrl}
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
target="_blank">
|
||||||
|
<>
|
||||||
|
<span className="tw-mr-1">
|
||||||
|
{serviceDetails.pipelineUrl}
|
||||||
|
</span>
|
||||||
|
<SVGIcons
|
||||||
|
alt="external-link"
|
||||||
|
className="tw-align-middle"
|
||||||
|
icon="external-link"
|
||||||
|
width="12px"
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
</a>
|
||||||
|
) : (
|
||||||
|
'--'
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
|
<span className="tw-mx-3 tw-text-grey-muted">•</span>
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
return <></>;
|
return <></>;
|
||||||
}
|
}
|
||||||
@ -387,6 +454,16 @@ const ServicePage: FunctionComponent = () => {
|
|||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
case ServiceCategory.PIPELINE_SERVICES: {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<th className="tableHead-cell">Pipeline Name</th>
|
||||||
|
<th className="tableHead-cell">Description</th>
|
||||||
|
<th className="tableHead-cell">Owner</th>
|
||||||
|
<th className="tableHead-cell">Tags</th>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return <></>;
|
return <></>;
|
||||||
}
|
}
|
||||||
@ -461,6 +538,33 @@ const ServicePage: FunctionComponent = () => {
|
|||||||
</td>
|
</td>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
case ServiceCategory.PIPELINE_SERVICES: {
|
||||||
|
const pipeline = data as Pipeline;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<td className="tableBody-cell">
|
||||||
|
{pipeline.tags && pipeline.tags?.length > 0
|
||||||
|
? pipeline.tags.map((tag, tagIndex) => (
|
||||||
|
<PopOver
|
||||||
|
key={tagIndex}
|
||||||
|
position="top"
|
||||||
|
size="small"
|
||||||
|
title={tag.labelType}
|
||||||
|
trigger="mouseenter">
|
||||||
|
<Tags
|
||||||
|
className="tw-bg-gray-200"
|
||||||
|
tag={`#${
|
||||||
|
tag.tagFQN?.startsWith('Tier.Tier')
|
||||||
|
? tag.tagFQN.split('.')[1]
|
||||||
|
: tag.tagFQN
|
||||||
|
}`}
|
||||||
|
/>
|
||||||
|
</PopOver>
|
||||||
|
))
|
||||||
|
: '--'}
|
||||||
|
</td>
|
||||||
|
);
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return <></>;
|
return <></>;
|
||||||
}
|
}
|
||||||
@ -515,6 +619,8 @@ const ServicePage: FunctionComponent = () => {
|
|||||||
body: errMsg,
|
body: errMsg,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
setIsEdit(false);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -535,6 +641,8 @@ const ServicePage: FunctionComponent = () => {
|
|||||||
return 'Dashboards';
|
return 'Dashboards';
|
||||||
case ServiceCategory.MESSAGING_SERVICES:
|
case ServiceCategory.MESSAGING_SERVICES:
|
||||||
return 'Topics';
|
return 'Topics';
|
||||||
|
case ServiceCategory.PIPELINE_SERVICES:
|
||||||
|
return 'Pipelines';
|
||||||
case ServiceCategory.DATABASE_SERVICES:
|
case ServiceCategory.DATABASE_SERVICES:
|
||||||
default:
|
default:
|
||||||
return 'Databases';
|
return 'Databases';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user