diff --git a/plugins/argo-workflows/package.json b/plugins/argo-workflows/package.json
index 6383de5..411fe12 100644
--- a/plugins/argo-workflows/package.json
+++ b/plugins/argo-workflows/package.json
@@ -49,6 +49,8 @@
"msw": "^1.0.0"
},
"files": [
- "dist"
- ]
+ "dist",
+ "config.d.ts"
+ ],
+ "configSchema": "config.d.ts"
}
diff --git a/plugins/argo-workflows/src/api/indext.ts b/plugins/argo-workflows/src/api/indext.ts
index 8273ca6..7706cd2 100644
--- a/plugins/argo-workflows/src/api/indext.ts
+++ b/plugins/argo-workflows/src/api/indext.ts
@@ -96,7 +96,7 @@ export class ArgoWorkflows implements ArgoWorkflowsApi {
const proxyUrl = await this.discoveryApi.getBaseUrl('proxy')
const ns = namespace !== undefined ? namespace : 'default'
- const url = `${proxyUrl}/${DEFAULT_WORKFLOW_PROXY}/api/v1/workflows/${ns}`
+ const url = `${proxyUrl}${DEFAULT_WORKFLOW_PROXY}/api/v1/workflows/${ns}`
const query = new URLSearchParams(
{[API_TIMEOUT]: "30"}
@@ -114,7 +114,7 @@ export class ArgoWorkflows implements ArgoWorkflowsApi {
}
)
- const resp = await fetch(`${url}/${query.toString()}`, {
+ const resp = await fetch(`${url}?${query.toString()}`, {
headers: headers
})
diff --git a/plugins/argo-workflows/src/components/WorkflowOverview/WorkflowOverview.tsx b/plugins/argo-workflows/src/components/WorkflowOverview/WorkflowOverview.tsx
index 4d9c0a9..f67b998 100644
--- a/plugins/argo-workflows/src/components/WorkflowOverview/WorkflowOverview.tsx
+++ b/plugins/argo-workflows/src/components/WorkflowOverview/WorkflowOverview.tsx
@@ -1,7 +1,7 @@
-import {useApi} from "@backstage/core-plugin-api";
+import {configApiRef, useApi} from "@backstage/core-plugin-api";
import {argoWorkflowsApiRef} from "../../api/indext";
import useAsync from "react-use/lib/useAsync";
-import {Progress, Table, TableColumn} from '@backstage/core-components'
+import {Link, Progress, Table, TableColumn} from '@backstage/core-components'
import React from "react";
import Alert from "@material-ui/lab/Alert";
import { useEntity } from '@backstage/plugin-catalog-react';
@@ -10,43 +10,54 @@ import {IoArgoprojWorkflowV1alpha1WorkflowList} from "../../api/generated";
type TableData = {
name: string
+ namespace: string
phase?: string
progress?: string
startedAt?: string
finishedAt?: string
}
-
-const columns: TableColumn[] = [
- {title: "Name", field: "name"},
- {title: "Phase", field: "phase", cellStyle: (data, _) => {
- if (data === "Succeeded") {
- return {
- color: '#6CD75F',
- }
- }
- if (data === "Error" || data === "Failed") {
- return {
- color: '#DC3D5A'
- }
- }
- return {}
- }},
- {title: "Progress", field: "progress"},
- {title: "StartTime", field: "startedAt", type: "datetime"},
- {title: "EndTime", field: "finishedAt", type: "datetime"}
-]
-
export const WorkflowOverviewComponent = () => {
const {entity} = useEntity()
const apiClient = useApi(argoWorkflowsApiRef)
+ const configApi = useApi(configApiRef)
+ let argoWorkflowsBaseUrl = configApi.getOptionalString("argoWorkflows.baseUrl")
+ if (argoWorkflowsBaseUrl && argoWorkflowsBaseUrl.endsWith("/")) {
+ argoWorkflowsBaseUrl = argoWorkflowsBaseUrl.substring(0, argoWorkflowsBaseUrl.length - 1)
+ }
+
const ln = entity.metadata.annotations?.['backstage.io/kubernetes-namespace']
const ns = ln !== undefined ? ln : 'default'
const clusterName = entity.metadata.annotations?.['argo-workflows/cluster-name']
-
const k8sLabelSelector = entity.metadata.annotations?.['backstage.io/kubernetes-label-selector']
+ const columns: TableColumn[] = [
+ {title: "Name", field: "name", render: (data: any | TableData, _): any => {
+ if (data && argoWorkflowsBaseUrl) {
+ return ({data.name})
+ }
+ return data.name
+ }},
+ {title: "Phase", field: "phase", cellStyle: (data, _) => {
+ if (data === "Succeeded") {
+ return {
+ color: '#6CD75F',
+ }
+ }
+ if (data === "Error" || data === "Failed") {
+ return {
+ color: '#DC3D5A'
+ }
+ }
+ return {}
+ }},
+ {title: "Progress", field: "progress"},
+ {title: "StartTime", field: "startedAt", type: "datetime", defaultSort: 'desc'},
+ {title: "EndTime", field: "finishedAt", type: "datetime"},
+ {title: "Namespace", field: "namespace", type: "string"}
+ ]
+
const {value, loading, error} = useAsync(
async (): Promise => {
return await apiClient.getWorkflows(clusterName, ns, k8sLabelSelector)
@@ -59,9 +70,10 @@ export const WorkflowOverviewComponent = () => {
return {error.message};
}
- const data = value?.items.map( val => {
+ const data = value?.items?.map( val => {
return {
name: val.metadata.name,
+ namespace: val.metadata.namespace,
phase: val.status?.phase,
progress: val.status?.progress,
startedAt: val.status?.startedAt,
@@ -71,12 +83,17 @@ export const WorkflowOverviewComponent = () => {
if (data) {
return (
-
)
}
- return Oh no
+
+ return No Workflows found with given filter. Check your entity's annotations.
}