|
1 | 1 | <script> |
2 | 2 | import { onMount } from 'svelte' |
3 | 3 | import { page } from '$app/stores' |
4 | | - import { DataHandler } from '@vincjo/datatables' |
| 4 | + import { DataHandler, check } from '@vincjo/datatables' |
5 | 5 | import { loadProjectContext } from '$lib/components/projects/controller' |
6 | 6 | import { contextProject } from '$lib/stores/projectStores' |
7 | 7 | import { getJobs } from '$lib/api/v1/project/project_api' |
| 8 | + import { downloadWorkflowJobLog } from '$lib/api/v1/workflow/workflow_api' |
8 | 9 | import StatusBadge from '$lib/components/jobs/StatusBadge.svelte' |
9 | 10 | import TimestampBadge from '$lib/components/jobs/TimestampBadge.svelte' |
10 | 11 | import JobInfoModal from '$lib/components/jobs/JobInfoModal.svelte' |
|
45 | 46 | // Set filters |
46 | 47 | const idFilter = $page.url.searchParams.get('id') |
47 | 48 | if (idFilter) { |
48 | | - tableHandler.filter(idFilter, 'id') |
| 49 | + tableHandler.filter(idFilter, 'id', check.isEqualTo) |
49 | 50 | } |
50 | 51 |
|
51 | 52 | let workflowQueryFilter = $page.url.searchParams.get('workflow') |
52 | 53 | if (workflowQueryFilter) { |
53 | | - workflowFilter = workflowQueryFilter |
| 54 | + tableHandler.filter(workflowQueryFilter, 'workflow_id', check.isEqualTo) |
54 | 55 | } |
55 | 56 |
|
56 | 57 | let inputDatasetQueryFilter = $page.url.searchParams.get('input_dataset') |
57 | 58 | if (inputDatasetQueryFilter) { |
58 | | - inputDatasetFilter = inputDatasetQueryFilter |
| 59 | + tableHandler.filter(inputDatasetQueryFilter, 'input_dataset_id', check.isEqualTo) |
59 | 60 | } |
60 | 61 |
|
61 | 62 | let outputDatasetQueryFilter = $page.url.searchParams.get('output_dataset') |
62 | 63 | if (outputDatasetQueryFilter) { |
63 | | - outputDatasetFilter = outputDatasetQueryFilter |
| 64 | + tableHandler.filter(outputDatasetQueryFilter, 'output_dataset_id', check.isEqualTo) |
64 | 65 | } |
65 | 66 |
|
66 | 67 | let statusQueryFilter = $page.url.searchParams.get('status') |
67 | 68 | if (statusQueryFilter) { |
68 | | - statusFilter = statusQueryFilter |
| 69 | + tableHandler.filter(statusQueryFilter, 'status', check.isEqualTo) |
69 | 70 | } |
70 | 71 |
|
71 | 72 | }) |
72 | 73 |
|
73 | 74 | setupTableHandler() |
74 | 75 |
|
75 | 76 | // Filters |
76 | | - $: tableHandler.filter(workflowFilter, 'workflow_id') |
77 | | - $: tableHandler.filter(inputDatasetFilter, 'input_dataset_id') |
78 | | - $: tableHandler.filter(outputDatasetFilter, 'output_dataset_id') |
| 77 | + $: tableHandler.filter(workflowFilter, 'workflow_id', check.isEqualTo) |
| 78 | + $: tableHandler.filter(inputDatasetFilter, 'input_dataset_id', check.isEqualTo) |
| 79 | + $: tableHandler.filter(outputDatasetFilter, 'output_dataset_id', check.isEqualTo) |
79 | 80 | $: tableHandler.filter(statusFilter, 'status') |
80 | 81 |
|
81 | 82 | async function loadProjectJobs() { |
|
99 | 100 | rows = tableHandler.getRows() |
100 | 101 | } |
101 | 102 |
|
| 103 | + async function handleJobLogsDownload(jobId) { |
| 104 | + console.log('Download job') |
| 105 | +
|
| 106 | + const downloadUrl = await downloadWorkflowJobLog(jobId) |
| 107 | + .then(blob => { |
| 108 | + // Create a download URL for the file |
| 109 | + return URL.createObjectURL(blob) |
| 110 | + }) |
| 111 | + .catch(error => { |
| 112 | + console.error(error) |
| 113 | + }) |
| 114 | +
|
| 115 | + // Create a hidden link within the page to trigger the download of the file |
| 116 | + const link = document.createElement('a') |
| 117 | + // Append the link to the body |
| 118 | + document.body.appendChild(link) |
| 119 | + // Set the href of the link to the download URL |
| 120 | + link.href = downloadUrl |
| 121 | + link.download = `${jobId}_logs.zip` |
| 122 | + // Trigger the download |
| 123 | + link.click() |
| 124 | + document.body.removeChild(link) |
| 125 | + } |
| 126 | +
|
102 | 127 | </script> |
103 | 128 |
|
104 | 129 | <div class="d-flex justify-content-between align-items-center"> |
|
246 | 271 | <i class="bi-list-columns-reverse"></i> |
247 | 272 | Logs |
248 | 273 | </button> |
| 274 | + <button class="btn btn-light" on:click={handleJobLogsDownload.bind(this, row.id)}><i class="bi-arrow-down-circle"></i></button> |
249 | 275 | {/if} |
250 | 276 | </td> |
251 | 277 | </tr> |
|
0 commit comments