Skip to content

Commit 12315b2

Browse files
authored
Merge branch 'main' into scrollToActiveItemV2
2 parents e0dbda1 + 4a4102f commit 12315b2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+2218
-364
lines changed

README.md

+7-6
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ $ minikube start --addons=dashboard --addons=ingress
7171

7272
Note: We need to enable the dashboard and ingress addons. The dashboard addon installs the dashboard service that exposes the Kubernetes objects in a user interface. The ingress addon allows us to create Ingress CRs to expose the Tackle UI and Tackle Hub API.
7373

74-
Since the olm addon is disabled until OLM issue [2534](https://github.com/operator-framework/operator-lifecycle-manager/issues/2534) is resolved we need to install the [OLM manually](https://github.com/operator-framework/operator-lifecycle-manager/releases) i.e. for version `v0.27.0` we can use:
74+
Since the olm addon is disabled until OLM issue [2534](https://github.com/operator-framework/operator-lifecycle-manager/issues/2534) is resolved we need to install the [OLM manually](https://github.com/operator-framework/operator-lifecycle-manager/releases) i.e. for version `v0.28.0` we can use:
7575

7676
```sh
77-
curl -L https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.27.0/install.sh -o install.sh
77+
curl -L https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.28.0/install.sh -o install.sh
7878
chmod +x install.sh
79-
./install.sh v0.27.0
79+
./install.sh v0.28.0
8080
```
8181

8282
See also official Konveyor instructions for [Provisioning Minikube](https://konveyor.github.io/konveyor/installation/#provisioning-minikube).
@@ -109,7 +109,9 @@ You will need `kubectl` on your PATH and configured to control minikube in order
109109
110110
Follow the official instructions for [Installing Konveyor Operator](https://konveyor.github.io/konveyor/installation/#installing-konveyor-operator)
111111
112-
Alternatively, the [konveyor/operator git repository](https://github.com/konveyor/operator) provides a script to install Tackle locally using `kubectl`. You can [inspect its source here](https://github.com/konveyor/operator/blob/main/hack/install-tackle.sh). This script creates the `konveyor-tackle` namespace, CatalogSource, OperatorGroup, Subscription and Tackle CR, then waits for deployments to be ready.
112+
Alternative 1, use the script [`hack/setup-operator.sh`](./hack/setup-operator.sh). It is a local variation of the script from the operator that still allows overriding portions of the Tackle CR with environment variables.
113+
114+
Alternative 2, the [konveyor/operator git repository](https://github.com/konveyor/operator) provides a script to install Tackle locally using `kubectl`. You can [inspect its source here](https://github.com/konveyor/operator/blob/main/hack/install-tackle.sh). This script creates the `konveyor-tackle` namespace, CatalogSource, OperatorGroup, Subscription and Tackle CR, then waits for deployments to be ready.
113115
114116
#### Customizing the install script (optional)
115117
@@ -152,8 +154,7 @@ $ npm run start:dev
152154
153155
## Understanding the local development environment
154156
155-
Tackle2 runs in a Kubernetes compatible environment (i.e. Openshift, Kubernetes or minikube) and is usually deployed with Tackle2 Operator (OLM).
156-
Although the UI pod has access to tackle2 APIs from within the cluster, the UI can also be executed outside the cluster and access Tackle APIs endpoints by proxy.
157+
Tackle2 runs in a Kubernetes compatible environment (i.e. Openshift, Kubernetes or minikube) and is usually deployed with Tackle2 Operator (OLM). Although the UI pod has access to tackle2 APIs from within the cluster, the UI can also be executed outside the cluster and access Tackle APIs endpoints by proxy.
157158
158159
The React and Patternfly based UI is composed of web pages served by an http server with proxy capabilities.
159160

client/public/locales/en/translation.json

+19-3
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@
2929
"createTags": "Create tags",
3030
"cancelAnalysis": "Cancel analysis",
3131
"delete": "Delete",
32+
"disablePreemption": "Disable preemption",
3233
"discardAssessment": "Discard assessment(s)",
3334
"discardReview": "Discard review",
3435
"downloadCsvTemplate": "Download CSV template",
3536
"download": "Download {{what}}",
3637
"duplicate": "Duplicate",
3738
"edit": "Edit",
39+
"enablePreemption": "Enable preemption",
3840
"export": "Export",
3941
"filterBy": "Filter by {{what}}",
4042
"import": "Import",
@@ -224,7 +226,12 @@
224226
"noAnswers": "Are you sure you want to close the assessment? There are no answers to save.",
225227
"unlinkTicket": "Unlink from Jira",
226228
"noTagsAvailable": "No tags available",
227-
"noAssociatedTags": "This tag category has no associated tags."
229+
"noAssociatedTags": "This tag category has no associated tags.",
230+
"cannotRemoveBusinessServiceAssociatedWithApplication": "Cannot remove a business service associated with application(s)",
231+
"updateFailed": "Update failed.",
232+
"updateRequestSubmitted": "Update request submitted.",
233+
"cancelationFailed": "Cancelation failed.",
234+
"cancelationRequestSubmitted": "Cancelation request submitted"
228235
},
229236
"proposedActions": {
230237
"refactor": "Refactor",
@@ -249,7 +256,8 @@
249256
"reports": "Reports",
250257
"migrationWaves": "Migration waves",
251258
"issues": "Issues",
252-
"dependencies": "Dependencies"
259+
"dependencies": "Dependencies",
260+
"tasks": "Task Manager"
253261
},
254262
"terms": {
255263
"accepted": "Accepted",
@@ -285,6 +293,7 @@
285293
"assessmentQuestionnaires": "Assessment questionnaires",
286294
"assessmentNotes": "Assessment notes",
287295
"assessmentSummary": "Assessment summary",
296+
"attachments": "Attachments",
288297
"autoTagging": "Automated Tagging",
289298
"binary": "Binary",
290299
"branch": "Branch",
@@ -366,6 +375,7 @@
366375
"jobFunction": "Job function",
367376
"jobFunctionDeleted": "Job function deleted",
368377
"jobFunctions": "Job functions",
378+
"kind": "Kind",
369379
"language": "Language",
370380
"label": "Label",
371381
"loading": "Loading",
@@ -390,6 +400,8 @@
390400
"notYetReviewed": "Not yet reviewed",
391401
"other": "Other",
392402
"owner": "Owner",
403+
"pod": "Pod",
404+
"preemption": "Preemption",
393405
"priority": "Priority",
394406
"proposedAction": "Proposed action",
395407
"proxyConfig": "Proxy configuration",
@@ -433,6 +445,7 @@
433445
"stakeholderGroups": "Stakeholder groups",
434446
"stakeholders": "Stakeholders",
435447
"startDate": "Start date",
448+
"started": "Started",
436449
"status": "Status",
437450
"suggestedAdoptionPlan": "Suggested adoption plan",
438451
"svnConfig": "Subversion configuration",
@@ -451,6 +464,7 @@
451464
"tagCategoryDeleted": "Tag category deleted",
452465
"tagCategories": "Tag categories",
453466
"teamMember": "team member",
467+
"terminated": "Terminated",
454468
"ticket": "Ticket",
455469
"trivialButMigratable": "Trivial but migratable",
456470
"type": "Type",
@@ -467,7 +481,9 @@
467481
"YAMLTemplate": "YAML template"
468482
},
469483
"titles": {
470-
"archetypeDrawer": "Archetype details"
484+
"archetypeDrawer": "Archetype details",
485+
"taskManager": "Task Manager",
486+
"task": "Task"
471487
},
472488
"toastr": {
473489
"success": {

client/src/app/App.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,19 @@ import { BrowserRouter } from "react-router-dom";
44
import { AppRoutes } from "./Routes";
55
import { DefaultLayout } from "./layout";
66
import { NotificationsProvider } from "./components/NotificationsContext";
7+
import { TaskManagerProvider } from "./components/task-manager/TaskManagerContext";
78

89
import "./app.css";
910

1011
const App: React.FC = () => {
1112
return (
1213
<BrowserRouter>
1314
<NotificationsProvider>
14-
<DefaultLayout>
15-
<AppRoutes />
16-
</DefaultLayout>
15+
<TaskManagerProvider>
16+
<DefaultLayout>
17+
<AppRoutes />
18+
</DefaultLayout>
19+
</TaskManagerProvider>
1720
</NotificationsProvider>
1821
</BrowserRouter>
1922
);

client/src/app/Constants.ts

+1
Original file line numberDiff line numberDiff line change
@@ -244,4 +244,5 @@ export enum TablePersistenceKeyPrefix {
244244
issuesRemainingIncidents = "ii",
245245
dependencyApplications = "da",
246246
archetypes = "ar",
247+
tasks = "t",
247248
}

client/src/app/Paths.ts

+9
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ export const DevPaths = {
33
applications: "/applications",
44
applicationsAnalysisDetails:
55
"/applications/:applicationId/analysis-details/:taskId",
6+
applicationsAnalysisDetailsAttachment:
7+
"/applications/:applicationId/analysis-details/:taskId/attachments/:attachmentId",
68
applicationsAnalysisTab: "/applications/analysis-tab",
79
applicationsAssessmentTab: "/applications/assessment-tab",
810
applicationsImports: "/applications/application-imports",
@@ -38,6 +40,7 @@ export const DevPaths = {
3840
issuesSingleAppSelected: "/issues/single-app/:applicationId",
3941

4042
dependencies: "/dependencies",
43+
tasks: "/tasks",
4144
} as const;
4245

4346
export type DevPathValues = (typeof DevPaths)[keyof typeof DevPaths];
@@ -93,3 +96,9 @@ export interface AnalysisDetailsRoute {
9396
applicationId: string;
9497
taskId: string;
9598
}
99+
100+
export interface AnalysisDetailsAttachmentRoute {
101+
applicationId: string;
102+
taskId: string;
103+
attachmentId: string;
104+
}

client/src/app/Routes.tsx

+13
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ const AssessmentSummary = lazy(
6363
"./pages/assessment/components/assessment-summary/assessment-summary-page"
6464
)
6565
);
66+
67+
const TaskManager = lazy(() => import("./pages/tasks/tasks-page"));
68+
6669
export interface IRoute<T> {
6770
path: T;
6871
comp: React.ComponentType<any>;
@@ -79,6 +82,11 @@ export const devRoutes: IRoute<DevPathValues>[] = [
7982
{
8083
path: Paths.applicationsAnalysisDetails,
8184
comp: AnalysisDetails,
85+
exact: true,
86+
},
87+
{
88+
path: Paths.applicationsAnalysisDetailsAttachment,
89+
comp: AnalysisDetails,
8290
exact: false,
8391
},
8492
{
@@ -184,6 +192,11 @@ export const devRoutes: IRoute<DevPathValues>[] = [
184192
comp: Archetypes,
185193
exact: false,
186194
},
195+
{
196+
path: Paths.tasks,
197+
comp: TaskManager,
198+
exact: false,
199+
},
187200
];
188201

189202
export const adminRoutes: IRoute<AdminPathValues>[] = [

client/src/app/api/models.ts

+25-10
Original file line numberDiff line numberDiff line change
@@ -301,26 +301,27 @@ export type TaskState =
301301
| "Failed"
302302
| "Running"
303303
| "No task"
304+
| "QuotaBlocked"
304305
| "Ready"
305306
| "Pending"
306307
| "Postponed";
307308

308309
export interface Task {
309-
id?: number;
310+
id: number;
310311
createUser?: string;
311312
updateUser?: string;
312313
createTime?: string;
313314

314-
name: string;
315-
kind: string;
316-
addon: string;
317-
extensions: string[];
315+
name?: string;
316+
kind?: string;
317+
addon?: string;
318+
extensions?: string[];
318319
state?: TaskState;
319320
locator?: string;
320321
priority?: number;
321-
policy: TaskPolicy;
322-
ttl: TTL;
323-
data: TaskData;
322+
policy?: TaskPolicy;
323+
ttl?: TTL;
324+
data?: TaskData;
324325
application: Ref;
325326
bucket?: Ref;
326327
pod?: string;
@@ -406,13 +407,27 @@ export interface TaskgroupTask {
406407
}
407408

408409
export interface Taskgroup {
409-
id?: number;
410+
id: number;
410411
name: string;
411-
addon: string;
412+
kind?: string;
413+
addon?: string;
412414
data: TaskData;
413415
tasks: TaskgroupTask[];
414416
}
415417

418+
export interface TaskQueue {
419+
/** Total number of tasks scheduled */
420+
total: number;
421+
/** number of tasks ready to run */
422+
ready: number;
423+
/** number of postponed tasks */
424+
postponed: number;
425+
/** number of tasks with pods created awaiting node scheduler */
426+
pending: number;
427+
/** number of tasks with running pods */
428+
running: number;
429+
}
430+
416431
export interface Cache {
417432
path: string;
418433
capacity: string;

0 commit comments

Comments
 (0)