feat: Add Piece Length configuration to preheat and clear tasks (#476)

* feat: Add Piece Length configuration to preheat and clear tasks

Signed-off-by: zhaoxinxin <1186037180@qq.com>

* feat: Add Piece Length configuration to preheat and clear tasks

Signed-off-by: zhaoxinxin <1186037180@qq.com>

* feat: Add Piece Length configuration to preheat and clear tasks

Signed-off-by: zhaoxinxin <1186037180@qq.com>

* feat: Add Piece Length configuration to preheat and clear tasks

Signed-off-by: zhaoxinxin <1186037180@qq.com>

* feat: Change piece length display

Signed-off-by: zhaoxinxin <1186037180@qq.com>

* feat: Change piece length display

Signed-off-by: zhaoxinxin <1186037180@qq.com>

* feat: Change piece length display

Signed-off-by: zhaoxinxin <1186037180@qq.com>

* feat: Change piece length display

Signed-off-by: zhaoxinxin <1186037180@qq.com>

* feat: Change piece length display

Signed-off-by: zhaoxinxin <1186037180@qq.com>

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
This commit is contained in:
Zhaoxinxin 2025-03-26 11:38:22 +08:00 committed by GitHub
parent 80c5e14b1a
commit 29df7c96b2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
29 changed files with 624 additions and 1035 deletions

View File

@ -59,6 +59,8 @@ describe('Create preheat', () => {
cy.get('#cluster-1').check();
cy.get('body').click('topLeft');
cy.get('#pieceLength').type('4');
// Select a scope.
cy.get('#select-scope').click();
@ -75,22 +77,20 @@ describe('Create preheat', () => {
(req) => {
req.reply({
statusCode: 200,
body: [],
body: createPreheat,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&type=preheat',
url: '/api/v1/jobs/12',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/jobs?page=1&per_page=10&state=FAILURE>;rel=prev,</api/v1/jobs?page=2&per_page=10&state=FAILURE>;rel=next,</api/v1/jobs?page=1&per_page=10&state=FAILURE>;rel=first,</api/v1/jobs?page=2&per_page=10&state=FAILURE>;rel=last',
};
res.send(200, createPreheat, responseHeaders);
req.reply({
statusCode: 200,
body: createPreheat,
});
},
);
@ -98,14 +98,13 @@ describe('Create preheat', () => {
cy.get('#save').click();
// Then I see that the current page is the preheats page!
cy.url().should('include', '/jobs/preheats');
cy.url().should('include', '/jobs/preheats/12');
// Displays successfully added preheat task.
cy.get('#PENDING-12').should('exist');
cy.get('#id-12').should('have.text', 12);
cy.get('#created_at-12').should('have.text', '2023-03-23 16:29:18');
cy.get('#description-12').should('have.text', 'create preheat');
cy.get('#description').should('have.text', 'create preheat');
cy.get('#status').should('have.text', 'PENDING');
cy.get('#id').should('have.text', 12);
cy.get('#piece-length').should('have.text', '4 MiB');
});
it('cannot to use cluster without scheduler for preheat', () => {
@ -177,39 +176,34 @@ describe('Create preheat', () => {
(req) => {
req.reply({
statusCode: 200,
body: [],
body: createPreheat,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&type=preheat',
url: '/api/v1/jobs/12',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/jobs?page=1&per_page=10&state=FAILURE>;rel=prev,</api/v1/jobs?page=2&per_page=10&state=FAILURE>;rel=next,</api/v1/jobs?page=1&per_page=10&state=FAILURE>;rel=first,</api/v1/jobs?page=2&per_page=10&state=FAILURE>;rel=last',
};
res.send(200, createPreheat, responseHeaders);
req.reply({
statusCode: 200,
body: createPreheat,
});
},
);
cy.get('#save').click();
cy.get('.MuiAlert-message').should('not.exist');
// Then I see that the current page is the preheats page!
cy.url().should('include', '/jobs/preheats');
cy.url().should('include', '/jobs/preheats/12');
// Displays successfully added preheat task.
cy.get('#PENDING-12').should('exist');
cy.get('#id-12').should('have.text', 12);
cy.get('#created_at-12').should('have.text', '2023-03-23 16:29:18');
cy.get('#description-12').should('have.text', 'create preheat');
cy.get('#description').should('have.text', 'create preheat');
cy.get('#status').should('have.text', 'PENDING');
cy.get('#id').should('have.text', 12);
cy.get('#piece-length').should('have.text', '4 MiB');
});
it('should handle API error response', () => {
@ -284,6 +278,22 @@ describe('Create preheat', () => {
cy.get('#url').clear();
cy.get('#url').type('https://docs');
// Should display message Piece Length the validation error.
cy.get('#pieceLength').type('0');
// Show verification error message.
cy.get('#pieceLength-helper-text').should('have.text', 'Please enter a value between 4 and 1024 MiB.');
cy.get('#pieceLength').clear();
cy.get('#pieceLength-helper-text').should('not.eq');
cy.get('#pieceLength').type('1025');
cy.get('#save').click();
// Preheat creation failed, the page is still in preheat/new!
cy.url().should('include', '/jobs/preheats/new');
cy.get('#pieceLength-helper-text').should('exist');
// Should display message tag the validation error.
cy.get('#tag').type(url);

View File

@ -101,8 +101,11 @@ describe('Preheat', () => {
.and('have.css', 'background-color', 'rgb(212, 37, 54)')
.find('#error-log-icon')
.and('exist');
cy.get('#url').should('have.text', 'http://dock.io/preheat/test');
cy.get('#piece-length').should('have.text', '4 MiB');
// Show preheat tag.
cy.get('#tag').should('have.text', 'prheat tag');
@ -150,6 +153,9 @@ describe('Preheat', () => {
// Show preheat headers.
cy.get('#headers').children().should('have.length', 2);
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '4 MiB');
});
it('should display detailed preheat pending information', () => {
@ -190,6 +196,9 @@ describe('Preheat', () => {
// Show preheat scope.
cy.get('#scope').should('have.text', 'All Seed Peers');
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '-');
// Show preheat headers.
cy.get('#headers').children().should('have.length', 1);
cy.wait(120000);
@ -265,6 +274,9 @@ describe('Preheat', () => {
// Show preheat tag.
cy.get('#tag').should('have.text', '-');
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '-');
// Show preheat headers.
cy.get('#headers').should('have.text', '-');
@ -321,6 +333,9 @@ describe('Preheat', () => {
// Show preheat url.
cy.get('#url').should('have.text', '-');
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '-');
// Show preheat tag.
cy.get('#tag').should('have.text', '-').should('have.text', '-');
@ -372,6 +387,9 @@ describe('Preheat', () => {
// Show preheat headers.
cy.get('#headers').children().should('have.length', 1);
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '-');
cy.wait(120000);
// Check how many times the API should be executed after six seconds.

View File

@ -69,12 +69,22 @@ describe('Clear', () => {
it('click the `CANCEL button', () => {
cy.get('#url').click();
// Show tag input.
// Add tag input.
cy.get('#tag').should('exist');
// Add url.
cy.get('#url').type('https://example.com/path/to/file');
// Add piece length.
cy.get('#pieceLength').type('4');
cy.get('#cancelSearchByURL').click();
// not show tag input.
cy.get('#tag').should('not.exist');
cy.get('#url').click();
cy.get('#tag').should('have.value', '');
cy.get('#url').should('have.value', '');
cy.get('#pieceLength').should('have.value', '');
});
it('can search by url', () => {
@ -85,13 +95,16 @@ describe('Clear', () => {
// Add url.
cy.get('#url').type('https://example.com/path/to/file');
// Show tag input.
// Add piece length.
cy.get('#pieceLength').type('4');
// Add tag input.
cy.get('#tag').type('tag');
// Show tag input.
// Add tag input.
cy.get('#application').type('application');
// Show tag input.
// Add filtered query params input.
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('filteredQueryParams{enter}');
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('X-Amz-Algorithm{enter}');

View File

@ -61,7 +61,6 @@ describe('Executions', () => {
describe('when data is loaded', () => {
it('should display detailed execution failure information', () => {
// Click the execution details button.
cy.intercept(
{
method: 'GET',
@ -86,30 +85,29 @@ describe('Executions', () => {
cy.get('.MuiBreadcrumbs-ol').should('exist').and('contain', 10);
// Show execution id.
cy.get('.MuiPaper-root > :nth-child(1)').should('contain', 10);
cy.get('#id').should('contain', 10);
cy.get('[data-testid="execution-isloading"]').should('not.exist');
// Show execution piece length.
cy.get('#piece-length').should('have.text', '4 MiB');
// Show execution status.
cy.get('#status')
.should('have.text', 'FAILURE')
.and('have.css', 'background-color', 'rgb(212, 37, 54)')
.find('#error-log-icon')
.and('exist');
cy.get('.MuiPaper-root > :nth-child(3)').should(
'contain',
'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916',
);
cy.get('#task-id').should('contain', 'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916');
// Show execution tag.
cy.get('.MuiPaper-root > :nth-child(5)').should('contain', 'execution-tag');
cy.get('#tag').should('contain', 'execution-tag');
// Show execution tag.
cy.get('.MuiPaper-root > :nth-child(6)').should('contain', 'execution-application');
// Show execution application.
cy.get('#application').should('contain', 'execution-application');
// Show execution scheduler clusters ID.
cy.get(':nth-child(7) > :nth-child(2)').should('have.text', 1);
cy.get('#scheduler-clusters-id').should('have.text', 1);
// Click the show error log button.
cy.get('#status > .MuiButtonBase-root').click();
@ -129,8 +127,7 @@ describe('Executions', () => {
cy.get('.MuiBreadcrumbs-ol').should('exist').and('contain', 9);
// Show execution id.
cy.get('.MuiPaper-root > :nth-child(1)').should('contain', 9);
cy.get('#id').should('contain', 9);
cy.get('[data-testid="execution-isloading"]').should('not.exist');
// Show execution status.
@ -143,9 +140,11 @@ describe('Executions', () => {
// Show execution URL.
cy.get('.MuiPaper-root > :nth-child(4)').should('contain', 'https://example.com/path/to/file');
// Show execution piece length.
cy.get('#piece-length').should('have.text', '-');
// Show failure task.
cy.get('#failure-tasks').should('exist');
cy.get('#failure-tasks-list > :nth-child(1) > :nth-child(1)').should('contain', 'kind-worker');
// Go to next page.
@ -153,9 +152,7 @@ describe('Executions', () => {
// Check the current page number.
cy.get('#failure-tasks-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('#failure-tasks-list').children().should('have.length', 1);
cy.get('#failure-tasks-list > .MuiTableRow-root > :nth-child(1)').should('have.text', 'dragonfly-seed-client-5');
// Refresh page.
@ -165,16 +162,12 @@ describe('Executions', () => {
// Check the current page number.
cy.get('#failure-tasks-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('#failure-tasks-list').children().should('have.length', 1);
cy.get('#failure-tasks-list > .MuiTableRow-root > :nth-child(1)').should('have.text', 'dragonfly-seed-client-5');
// Show error log.
cy.get('#error-log-icon').click();
cy.get('#panel1d-header').click();
cy.get('.MuiAccordionDetails-root').should(
'contain',
'task a1e21fceseba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused"',
@ -183,7 +176,6 @@ describe('Executions', () => {
it('should display detailed execution pending information', () => {
let interceptCount = 0;
cy.intercept(
{
method: 'GET',
@ -197,14 +189,13 @@ describe('Executions', () => {
interceptCount++;
},
).as('execution');
cy.get('#execution-11').click();
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol').should('exist').and('contain', 11);
// Show execution id.
cy.get('.MuiPaper-root > :nth-child(1)').should('contain', 11);
cy.get('#id').should('contain', 11);
// Show execution status.
cy.get('#status')
@ -214,7 +205,6 @@ describe('Executions', () => {
.and('exist')
.find('#error-log-icon')
.and('not.exist');
cy.wait(120000);
// Check how many times the API should be executed after six seconds.
@ -245,6 +235,9 @@ describe('Executions', () => {
.and('have.css', 'background-color', 'rgb(212, 37, 54)')
.find('#error-log-icon')
.and('exist');
// Show execution piece length.
cy.get('#piece-length').should('have.text', '4 MiB');
});
});
@ -268,28 +261,28 @@ describe('Executions', () => {
it('execution information should appear empty', () => {
// Show execution id.
cy.get(':nth-child(1) > .show_informationContent__KJR0m').should('have.text', 0);
cy.get('#id').should('have.text', 0);
// Show execution status.
cy.get('#status').should('not.exist');
// Show execution task id.
cy.get(':nth-child(3) > .show_informationContent__KJR0m').should('have.text', '-');
cy.get('#task-id').should('have.text', '-');
// Show execution url.
cy.get('.show_urlContent__GX54w').should('have.text', '-');
cy.get('#url').should('have.text', '-');
// Show execution piece length.
cy.get('#piece-length').should('have.text', '-');
// Show execution tag.
cy.get(':nth-child(5) > .show_informationContent__KJR0m.MuiBox-root > .MuiTypography-root').should(
'have.text',
'-',
);
cy.get('#tag').should('have.text', '-');
// Show execution scheduler clusters ID.
cy.get(':nth-child(7) > :nth-child(2)').should('have.text', '-');
cy.get('#scheduler-clusters-id').should('have.text', '-');
// Show execution Created At.
cy.get(':nth-child(8) > :nth-child(2) > .MuiTypography-root').should('have.text', '-');
cy.get('#created-at').should('have.text', '-');
// Don't show failure tasks.
cy.get('#failure-tasks').should('not.exist');
@ -324,22 +317,29 @@ describe('Executions', () => {
it('execution information should appear empty', () => {
// Show execution id.
cy.get(':nth-child(1) > .show_informationContent__KJR0m').should('have.text', 0);
cy.get('#id').should('have.text', 0);
// Show execution status.
cy.get('#status').should('not.exist');
// Show execution task id.
cy.get(':nth-child(3) > .show_informationContent__KJR0m').should('have.text', '-');
cy.get('#task-id').should('have.text', '-');
// Show execution url.
cy.get('.show_urlContent__GX54w').should('have.text', '-');
cy.get('#url').should('have.text', '-');
// Show execution piece length.
cy.get('#piece-length').should('have.text', '-');
// Show execution tag.
cy.get(':nth-child(5) > .show_informationContent__KJR0m.MuiBox-root > .MuiTypography-root').should(
'have.text',
'-',
);
cy.get('#tag').should('have.text', '-');
// Show execution scheduler clusters ID.
cy.get(':nth-child(7) > :nth-child(2)').should('have.text', '-');
cy.get('#scheduler-clusters-id').should('have.text', '-');
// Show execution Created At.
cy.get(':nth-child(8) > :nth-child(2) > .MuiTypography-root').should('have.text', '-');
cy.get('#created-at').should('have.text', '-');
// Don't show failure tasks.
cy.get('#failure-tasks').should('not.exist');
});
@ -367,7 +367,7 @@ describe('Executions', () => {
cy.get('.MuiBreadcrumbs-ol').should('exist').and('contain', 11);
// Show execution id.
cy.get(':nth-child(1) > .show_informationContent__KJR0m').should('contain', 11);
cy.get('#id').should('contain', 11);
// Show execution status.
cy.get('#status')

View File

@ -1,5 +1,4 @@
[
{
{
"id": 12,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
@ -21,7 +20,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -57,654 +57,4 @@
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 11,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status pending",
"type": "preheat",
"state": "PENDING",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "PENDING",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "PENDING",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 10,
"created_at": "2023-03-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"is_del": 0,
"task_id": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "FAILURE",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "FAILURE",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 9,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "FAILURE",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "FAILURE",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 8,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "SUCCESS",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 7,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "FAILURE",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "FAILURE",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 6,
"created_at": "2023-03-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "SUCCESS",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 5,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "SUCCESS",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 4,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "SUCCESS",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 3,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "FAILURE",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "FAILURE",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 2,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "SUCCESS",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 1,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "",
"results": null,
"state": "SUCCESS",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"user_id": 0,
"user": {
"id": 0,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"email": "",
"name": "",
"avatar": "",
"phone": "",
"state": "",
"location": "",
"bio": "",
"configs": null
},
"seed_peer_clusters": null,
"scheduler_clusters": null
}
]
}

View File

@ -20,7 +20,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "http://dock.io/preheat/test",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",

View File

@ -20,7 +20,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": null
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",

View File

@ -21,7 +21,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": null
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -80,7 +81,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "http://dock.io/preheat/test",
"username": ""
"username": "",
"piece_length": null
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -139,7 +141,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -198,7 +201,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -257,7 +261,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -316,7 +321,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -375,7 +381,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -434,7 +441,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": null
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -493,7 +501,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -552,7 +561,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",
@ -611,7 +621,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": null
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",

View File

@ -21,7 +21,8 @@
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"created_at": "2023-03-23T08:29:18.204923418Z",

View File

@ -12,7 +12,8 @@
"filtered_query_params": "X-Amz-Algorithm\u0026X-Amz-Credential\u0026X-Amz-Date\u0026X-Amz-Expires\u0026X-Amz-SignedHeaders\u0026X-Amz-Signature\u0026X-Amz-Security-Token\u0026X-Amz-User-Agent\u0026X-Goog-Algorithm\u0026X-Goog-Credential\u0026X-Goog-Date\u0026X-Goog-Expires\u0026X-Goog-SignedHeaders\u0026X-Goog-Signature\u0026OSSAccessKeyId\u0026Expires\u0026Signature\u0026SecurityToken\u0026AccessKeyId\u0026Signature\u0026Expires\u0026X-Obs-Date\u0026X-Obs-Security-Token\u0026q-sign-algorithm\u0026q-ak\u0026q-sign-time\u0026q-key-time\u0026q-header-list\u0026q-url-param-list\u0026q-signature\u0026x-cos-security-token\u0026ns",
"tag": "",
"task_id": "",
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": 4194304
},
"result": null,
"user_id": 0,

View File

@ -13,7 +13,8 @@
"tag": "",
"task_id": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:02:44.836338419Z",

View File

@ -14,7 +14,8 @@
"tag": "",
"task_id": "fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916",
"timeout": 1800000000000,
"url": ""
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",

View File

@ -13,7 +13,8 @@
"tag": "execution-tag",
"task_id": "fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916",
"timeout": 1800000000000,
"url": ""
"url": "",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",

View File

@ -14,7 +14,8 @@
"tag": "",
"task_id": "fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916",
"timeout": 1800000000000,
"url": ""
"url": "",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",

View File

@ -12,7 +12,8 @@
"filtered_query_params": "X-Amz-Algorithm&X-Amz-Credential&X-Amz-Date&X-Amz-Expires&X-Amz-SignedHeaders&X-Amz-Signature&X-Amz-Security-Token&X-Amz-User-Agent&X-Goog-Algorithm&X-Goog-Credential&X-Goog-Date&X-Goog-Expires&X-Goog-SignedHeaders&X-Goog-Signature&OSSAccessKeyId&Expires&Signature&SecurityToken&AccessKeyId&Signature&Expires&X-Obs-Date&X-Obs-Security-Token&q-sign-algorithm&q-ak&q-sign-time&q-key-time&q-header-list&q-url-param-list&q-signature&x-cos-security-token&ns",
"tag": "",
"task_id": "",
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-05T03:10:31.965787257Z",

View File

@ -14,7 +14,8 @@
"tag": "",
"task_id": "fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916",
"timeout": 1800000000000,
"url": ""
"url": "",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:25:05.260432054Z",

View File

@ -13,7 +13,8 @@
"tag": "",
"task_id": "fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916",
"timeout": 1800000000000,
"url": ""
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",

View File

@ -14,7 +14,8 @@
"tag": "",
"task_id": "fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916",
"timeout": 1800000000000,
"url": ""
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",

View File

@ -12,7 +12,8 @@
"filtered_query_params": "X-Amz-Algorithm\u0026X-Amz-Credential\u0026X-Amz-Date\u0026X-Amz-Expires\u0026X-Amz-SignedHeaders\u0026X-Amz-Signature\u0026X-Amz-Security-Token\u0026X-Amz-User-Agent\u0026X-Goog-Algorithm\u0026X-Goog-Credential\u0026X-Goog-Date\u0026X-Goog-Expires\u0026X-Goog-SignedHeaders\u0026X-Goog-Signature\u0026OSSAccessKeyId\u0026Expires\u0026Signature\u0026SecurityToken\u0026AccessKeyId\u0026Signature\u0026Expires\u0026X-Obs-Date\u0026X-Obs-Security-Token\u0026q-sign-algorithm\u0026q-ak\u0026q-sign-time\u0026q-key-time\u0026q-header-list\u0026q-url-param-list\u0026q-signature\u0026x-cos-security-token\u0026ns",
"tag": "",
"task_id": "",
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-02T10:39:33.32490896Z",

View File

@ -14,7 +14,8 @@
"tag": "",
"task_id": "aea9af454bc33e61dd24647b0dd6d023195360a6b67c7c3e0feda4713819cc38",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:02:44.836338419Z",
@ -123,7 +124,8 @@
"tag": "",
"task_id": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:59:49.07231163Z",
@ -232,7 +234,8 @@
"tag": "",
"task_id": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:56:31.537420427Z",
@ -341,7 +344,8 @@
"tag": "",
"task_id": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:54:04.883390304Z",
@ -444,7 +448,8 @@
"tag": "",
"task_id": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:34:14.312378294Z",
@ -547,7 +552,8 @@
"tag": "",
"task_id": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:32:30.001617594Z",
@ -650,7 +656,8 @@
"tag": "",
"task_id": "8c3dbd38fc7f4b3637d4e8ad8490ce107ac4cf2df81d45e7d33224f29ab4cf3d",
"timeout": 1800000000000,
"url": ""
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T09:28:11.774771335Z",
@ -753,7 +760,8 @@
"tag": "",
"task_id": "8c3dbd38fc7f4b3637d4e8ad8490ce107ac4cf2df81d45e7d33224f29ab4cf3d",
"timeout": 1800000000000,
"url": ""
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T09:25:05.260432054Z",
@ -856,7 +864,8 @@
"tag": "",
"task_id": "8c3dbd38fc7f4b3637d4e8ad8490ce107ac4cf2df81d45e7d33224f29ab4cf3d",
"timeout": 1800000000000,
"url": ""
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T09:25:05.260432054Z",

View File

@ -12,7 +12,8 @@
"filtered_query_params": "X-Amz-Algorithm\u0026X-Amz-Credential\u0026X-Amz-Date\u0026X-Amz-Expires\u0026X-Amz-SignedHeaders\u0026X-Amz-Signature\u0026X-Amz-Security-Token\u0026X-Amz-User-Agent\u0026X-Goog-Algorithm\u0026X-Goog-Credential\u0026X-Goog-Date\u0026X-Goog-Expires\u0026X-Goog-SignedHeaders\u0026X-Goog-Signature\u0026OSSAccessKeyId\u0026Expires\u0026Signature\u0026SecurityToken\u0026AccessKeyId\u0026Signature\u0026Expires\u0026X-Obs-Date\u0026X-Obs-Security-Token\u0026q-sign-algorithm\u0026q-ak\u0026q-sign-time\u0026q-key-time\u0026q-header-list\u0026q-url-param-list\u0026q-signature\u0026x-cos-security-token\u0026ns",
"tag": "",
"task_id": "fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916",
"url": ""
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-02T10:39:33.32490896Z",

View File

@ -12,7 +12,8 @@
"filtered_query_params": "X-Amz-Algorithm\u0026X-Amz-Credential\u0026X-Amz-Date\u0026X-Amz-Expires\u0026X-Amz-SignedHeaders\u0026X-Amz-Signature\u0026X-Amz-Security-Token\u0026X-Amz-User-Agent\u0026X-Goog-Algorithm\u0026X-Goog-Credential\u0026X-Goog-Date\u0026X-Goog-Expires\u0026X-Goog-SignedHeaders\u0026X-Goog-Signature\u0026OSSAccessKeyId\u0026Expires\u0026Signature\u0026SecurityToken\u0026AccessKeyId\u0026Signature\u0026Expires\u0026X-Obs-Date\u0026X-Obs-Security-Token\u0026q-sign-algorithm\u0026q-ak\u0026q-sign-time\u0026q-key-time\u0026q-header-list\u0026q-url-param-list\u0026q-signature\u0026x-cos-security-token\u0026ns",
"tag": "",
"task_id": "",
"url": "https://example.com/path/to/file"
"url": "https://example.com/path/to/file",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-02T10:39:33.32490896Z",

View File

@ -0,0 +1,6 @@
<svg t="1713358915325" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7190"
width="200" height="200">
<path
d="M832 896H256c-35.2 0-64-28.8-64-64v-128.8c-8.8 0.8-18 1.2-26.8 0.4-79.2-6-138.8-75.2-133.2-154.4 2.8-38.4 20.4-73.2 49.6-98.4s66.4-37.6 104.8-34.8c2 0 3.6 0.4 5.6 0.4V288c0-35.2 28.8-64 64-64h144.8c-0.8-8.8-1.2-18-0.4-26.8 2.8-38 20.4-73.2 49.6-98.4 29.2-25.2 66.4-37.6 104.8-34.8 38.4 2.8 73.2 20.4 98.4 49.6s37.6 66.4 34.8 104.8c0 2-0.4 3.6-0.4 5.6H832c35.2 0 64 28.8 64 64v170.8c0 10.8-5.6 21.2-14.8 27.2-9.2 6-20.8 6.4-30.8 2-12.4-6-26.4-8.4-40-7.2-21.6 1.6-40.8 11.2-54.8 27.6-14 16-20.8 36.8-19.2 58 1.6 21.2 11.2 40.8 27.6 54.8 16 14 36.8 20.8 58 19.2 10-0.8 19.6-3.2 28.4-7.6 10-4.8 21.6-4 30.8 2s14.8 16 14.8 27.2V832c0 35.2-28.8 64-64 64zM224 629.2c6 0 12 1.6 17.2 4.8 9.2 6 14.8 16 14.8 27.2V832h576v-128.8c-2 0.4-3.6 0.4-5.6 0.4-38.4 2.8-75.6-9.6-104.8-34.8s-46.8-60-49.6-98.4c-2.8-38.4 9.6-75.6 34.8-104.8 25.2-29.2 60-46.8 98.4-49.6 8.8-0.8 18-0.4 26.8 0.4V288h-186.8c-10.8 0-21.2-5.6-27.2-14.8-6-9.2-6.4-20.8-2-30.8 4.4-9.2 6.8-18.8 7.6-28.4 1.6-21.2-5.2-42-19.2-58s-33.2-26-54.8-27.6c-21.2-1.6-42 5.2-58 19.2s-26 33.2-27.6 54.8c-1.2 14 1.6 28 7.2 40.4 4.8 10 4 21.6-2 30.8s-16 14.8-27.2 14.8H256v170.8c0 10.8-5.6 21.2-14.8 27.2-9.2 6-20.8 6.4-30.8 2-8.8-4.4-18.8-6.8-28.4-7.6-21.2-1.6-42 5.2-58 19.2s-26 33.2-27.6 54.8c-3.2 44 30 82.4 74 85.6 14 1.2 28-1.6 40.4-7.2 3.6-2.8 8.4-4 13.2-4z"
p-id="7191" fill="currentColor"></path>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -23,6 +23,7 @@ import {
Paper,
SelectChangeEvent,
Breadcrumbs,
InputAdornment,
} from '@mui/material';
import { useEffect, useState } from 'react';
import HelpIcon from '@mui/icons-material/Help';
@ -44,6 +45,7 @@ export default function NewPreheat() {
const [urlError, setURLError] = useState(false);
const [tagError, setTagError] = useState(false);
const [filterError, setFilterError] = useState(false);
const [pieceLengthError, setPieceLengthError] = useState(false);
const [loadingButton, setLoadingButton] = useState(false);
const [headers, setheaders] = useState<Array<{ key: string; value: string }>>([]);
const [cluster, setCluster] = useState([{ id: 0, name: '' }]);
@ -111,6 +113,54 @@ export default function NewPreheat() {
];
const argsForm = [
{
formProps: {
id: 'pieceLength',
label: 'Piece Length',
name: 'pieceLength',
autoComplete: 'family-name',
placeholder: 'Piece Length',
helperText: pieceLengthError ? 'Please enter a value between 4 and 1024 MiB.' : '',
error: pieceLengthError,
InputProps: {
endAdornment: (
<>
<InputAdornment position="start">
<Typography sx={{ fontFamily: 'mabry-bold', color: 'var(--palette-sidebar-menu-color)' }}>
MiB
</Typography>
</InputAdornment>
<Tooltip
title={
'By setting the piece length, you can define the size of each piece downloaded during preheating. If unspecified, its calculated based on content length, defaulting to 4-16 MiB.'
}
placement="top"
>
<HelpIcon
sx={{
color: 'var(--palette-grey-300Channel)',
width: '0.8rem',
height: '0.8rem',
':hover': { color: 'var(--palette-description-color)' },
}}
/>
</Tooltip>
</>
),
},
onChange: (e: any) => {
changeValidate(e.target.value, argsForm[0]);
},
},
syncError: false,
setError: setPieceLengthError,
validate: (value: string) => {
const reg = /^(?:|[4-9]|[1-9]\d{1,2}|10[0-1]\d|102[0-4])$/;
return reg.test(value);
},
},
{
formProps: {
id: 'tag',
@ -142,7 +192,7 @@ export default function NewPreheat() {
),
},
onChange: (e: any) => {
changeValidate(e.target.value, argsForm[0]);
changeValidate(e.target.value, argsForm[1]);
},
},
syncError: false,
@ -178,7 +228,7 @@ export default function NewPreheat() {
),
},
onChange: (e: any) => {
changeValidate(e.target.value, argsForm[1]);
changeValidate(e.target.value, argsForm[2]);
},
},
syncError: false,
@ -196,13 +246,13 @@ export default function NewPreheat() {
value: filter,
options: [],
onChange: (_e: any, newValue: any) => {
if (!argsForm[2].formProps.error) {
if (!argsForm[3].formProps.error) {
setFilter(newValue);
}
},
onInputChange: (e: any) => {
setFilterHelperText('Fill in the characters, the length is 0-100.');
changeValidate(e.target.value, argsForm[2]);
changeValidate(e.target.value, argsForm[3]);
},
renderTags: (value: any, getTagProps: any) =>
@ -280,6 +330,7 @@ export default function NewPreheat() {
const url = event.currentTarget.elements.url.value;
const tag = event.currentTarget.elements.tag.value;
const filterText = event.currentTarget.elements.filteredQueryParams.value;
const pieceLength = event.currentTarget.elements.pieceLength.value;
const filters = filter.join('&');
const data = new FormData(event.currentTarget);
@ -345,15 +396,16 @@ export default function NewPreheat() {
filtered_query_params: filters,
headers: headerList,
scope: scope,
...(pieceLength && pieceLength !== 0 && { piece_length: pieceLength * 1024 * 1024 }),
},
scheduler_cluster_ids: clusterID,
};
if (canSubmit) {
try {
await createJob({ ...formDate });
const job = await createJob({ ...formDate });
setLoadingButton(false);
navigate('/jobs/preheats');
navigate(`/jobs/preheats/${job.id}`);
} catch (error) {
if (error instanceof Error) {
setLoadingButton(false);
@ -515,29 +567,6 @@ export default function NewPreheat() {
</Tooltip>
</Box>
<Box sx={{ display: 'flex', flexWrap: 'wrap' }}>
<FormControl className={styles.textField} margin="normal" color="success" required size="small">
<InputLabel id="scope">Scope</InputLabel>
<Select
id="select-scope"
label="scope"
value={scope}
onChange={handleSelectScope}
MenuProps={{
PaperProps: {
style: {
maxHeight: '14rem',
width: '18rem',
},
},
}}
>
{scopeList.map((item: any) => (
<MenuItem id={item.name} key={item.name} value={item.name} sx={{ height: '2.6rem' }}>
{item.label}
</MenuItem>
))}
</Select>
</FormControl>
{argsForm.map((item) => {
return item.id === 'filteredQueryParams' ? (
<Box key={item.formProps.id} sx={{ width: '100%' }}>
@ -582,16 +611,40 @@ export default function NewPreheat() {
)}
/>
</Box>
) : item.formProps.id === 'tag' ? (
) : item.formProps.id === 'pieceLength' ? (
<Box>
<TextField
key={item.formProps.id}
color="success"
margin="normal"
size="small"
{...item.formProps}
sx={{ marginLeft: '1rem' }}
sx={{ width: '11rem', mr: '1rem' }}
className={styles.textField}
/>
<FormControl sx={{ width: '25rem' }} margin="normal" color="success" required size="small">
<InputLabel id="scope">Scope</InputLabel>
<Select
id="select-scope"
label="scope"
value={scope}
onChange={handleSelectScope}
MenuProps={{
PaperProps: {
style: {
maxHeight: '14rem',
width: '18rem',
},
},
}}
>
{scopeList.map((item: any) => (
<MenuItem id={item.name} key={item.name} value={item.name} sx={{ height: '2.6rem' }}>
{item.label}
</MenuItem>
))}
</Select>
</FormControl>
</Box>
) : (
<Box key={item.formProps.id} sx={{ width: '100%' }}>
<TextField

View File

@ -39,6 +39,7 @@ import { ReactComponent as Failure } from '../../../assets/images/job/preheat/fa
import { ReactComponent as Pending } from '../../../assets/images/job/preheat/pending.svg';
import { ReactComponent as ErrorLog } from '../../../assets/images/job/preheat/error-log.svg';
import { ReactComponent as TagScope } from '../../../assets/images/job/preheat/tag-scope.svg';
import { ReactComponent as PieceLength } from '../../../assets/images/job/preheat/piece-length.svg';
const CustomWidthTooltip = styled(({ className, ...props }: TooltipProps) => (
<Tooltip {...props} classes={{ popper: className }} />
@ -301,6 +302,28 @@ export default function ShowPreheat() {
</Typography>
</CustomWidthTooltip>
</Box>
<Box className={styles.informationContainer}>
<Box className={styles.informationTitle}>
<PieceLength className={styles.informationTitleIcon} />
<Typography
variant="body1"
fontFamily="mabry-bold"
component="div"
className={styles.informationTitleText}
>
Piece Length
</Typography>
</Box>
<Typography id="piece-length" variant="body1" className={styles.informationContent}>
{isLoading ? (
<Skeleton sx={{ width: '4rem' }} />
) : preheat?.args?.piece_length ? (
`${Number(preheat?.args?.piece_length) / 1024 / 1024} MiB`
) : (
'-'
)}
</Typography>
</Box>
<Box className={styles.informationContainer}>
<Box className={styles.informationTitle}>
<Scope className={styles.informationTitleIcon} />
@ -318,8 +341,7 @@ export default function ShowPreheat() {
<Skeleton data-testid="preheat-isloading" sx={{ width: '2rem' }} />
) : scope ? (
<Box className={styles.scopeContent}>
<TagScope className={styles.informationTitleIcon} />
<Typography variant="body2" component="div" fontFamily="mabry-bold" pl="0.2rem">
<Typography variant="body2" component="div" fontFamily="mabry-bold">
{scope.label || '-'}
</Typography>
</Box>
@ -414,11 +436,9 @@ export default function ShowPreheat() {
<Box id="scheduler-lusters-id" className={styles.schedulerClustersID}>
{preheat?.scheduler_clusters?.map((item, index) => {
return (
<Box className={styles.schedulerClustersIDContent}>
<Typography key={index} variant="body2" component="div" fontFamily="mabry-bold">
<Typography key={index} variant="body1" component="div" fontFamily="mabry-bold" ml="0.5rem">
{isLoading ? <Skeleton data-testid="preheat-isloading" sx={{ width: '4rem' }} /> : item.id || '-'}
</Typography>
</Box>
);
}) || '-'}
</Box>

View File

@ -29,6 +29,7 @@
.filterInput {
display: flex;
align-items: center;
width: 100%;
}
.textField {

View File

@ -19,6 +19,7 @@ import {
toggleButtonGroupClasses,
Pagination,
useTheme,
InputAdornment,
} from '@mui/material';
import styles from './index.module.css';
import { useEffect, useState } from 'react';
@ -79,12 +80,19 @@ export default function Clear() {
const [taskIDError, setTaskIDError] = useState(false);
const [applicationError, setApplicationError] = useState(false);
const [tagError, setTagError] = useState(false);
const [pieceLengthError, setPieceLengthError] = useState(false);
const [filterError, setFilterError] = useState(false);
const [filterHelperText, setFilterHelperText] = useState('Fill in the characters, the length is 0-100.');
const [search, setSearch] = useState<string | null>('url');
const [searchID, setSearchID] = useState(0);
const [taskPages, setTaskPages] = useState<any>({});
const [searchData, setSearchDada] = useState({ url: '', tag: '', application: '', filtered_query_params: '' });
const [searchData, setSearchDada] = useState({
url: '',
tag: '',
application: '',
filtered_query_params: '',
piece_length: 0,
});
const { url, tag, application, filtered_query_params } = searchData;
const navigate = useNavigate();
@ -201,6 +209,45 @@ export default function Clear() {
};
const formList = [
{
formProps: {
id: 'pieceLength',
labels: 'Piece Length',
name: 'pieceLength',
autoComplete: 'family-name',
placeholder: 'Piece Length',
helperText: pieceLengthError ? 'Please enter a value between 4 and 1024 MiB.' : '',
error: pieceLengthError,
InputProps: (
<Tooltip
title={
'When the task URLs are the same but the Piece Length is different, they will be distinguished based on the Piece Length, and the queried tasks will also be different.'
}
placement="top"
>
<HelpIcon
sx={{
color: 'var(--palette-grey-300Channel)',
width: '0.8rem',
height: '0.8rem',
':hover': { color: 'var(--palette-description-color)' },
}}
/>
</Tooltip>
),
onChange: (e: any) => {
changeValidate(e.target.value, formList[0]);
setSearchDada({ ...searchData, piece_length: e.target.value });
},
},
syncError: false,
setError: setPieceLengthError,
validate: (value: string) => {
const reg = /^(?:|[4-9]|[1-9]\d{1,2}|10[0-1]\d|102[0-4])$/;
return reg.test(value);
},
},
{
formProps: {
id: 'tag',
@ -230,7 +277,7 @@ export default function Clear() {
),
onChange: (e: any) => {
changeValidate(e.target.value, formList[0]);
changeValidate(e.target.value, formList[1]);
setSearchDada({ ...searchData, tag: e.target.value });
},
},
@ -266,7 +313,7 @@ export default function Clear() {
),
onChange: (e: any) => {
changeValidate(e.target.value, formList[1]);
changeValidate(e.target.value, formList[2]);
setSearchDada({ ...searchData, application: e.target.value });
},
},
@ -287,14 +334,14 @@ export default function Clear() {
options: [],
onChange: (_e: any, newValue: any) => {
if (!formList[2].formProps.error) {
if (!formList[3].formProps.error) {
setSearchDada({ ...searchData, filtered_query_params: newValue.join('&') });
}
},
onInputChange: (e: any) => {
setFilterHelperText('Fill in the characters, the length is 0-100.');
changeValidate(e.target.value, formList[2]);
changeValidate(e.target.value, formList[3]);
},
renderTags: (value: any, getTagProps: any) =>
@ -407,6 +454,8 @@ export default function Clear() {
tag: task?.args?.tag,
application: task?.args?.application,
filtered_query_params: task?.args?.filtered_query_params,
...(searchData.piece_length &&
searchData.piece_length !== 0 && { piece_length: searchData.piece_length * 1024 * 1024 }),
},
scheduler_cluster_ids: [schedulerClusterID],
type: 'delete_task',
@ -503,6 +552,7 @@ export default function Clear() {
const data = new FormData(event.currentTarget);
const filterText = event.currentTarget.elements.filteredQueryParams?.value;
formList.forEach((item) => {
const value = data.get(item.formProps.name);
item.setError(!item.validate(value as string));
@ -541,6 +591,8 @@ export default function Clear() {
tag: searchData.tag,
application: searchData.application,
filtered_query_params: searchData.filtered_query_params,
...(searchData.piece_length &&
searchData.piece_length !== 0 && { piece_length: searchData.piece_length * 1024 * 1024 }),
},
type: 'get_task',
};
@ -580,7 +632,9 @@ export default function Clear() {
const handleCloseSearch = () => {
setOptional(false);
setSearchDada({ url: '', tag: '', application: '', filtered_query_params: '' });
setSearchDada({ url: '', tag: '', application: '', filtered_query_params: '', piece_length: 0 });
setPieceLengthError(false);
setUrlError(false);
};
const handleChangeSearch = (event: React.MouseEvent<HTMLElement>, newAlignment: string | null) => {
@ -589,7 +643,7 @@ export default function Clear() {
}
setOptional(false);
setSearchTask('');
setSearchDada({ url: '', tag: '', application: '', filtered_query_params: '' });
setSearchDada({ url: '', tag: '', application: '', filtered_query_params: '', piece_length: 0 });
};
const handlePageChange = (peerId: any, newPage: any) => {
@ -644,9 +698,7 @@ export default function Clear() {
'&:hover': {
backgroundColor: 'transparent',
},
// textTransform: 'none',
p: '0.3rem 0.5rem',
// width: '11.5rem',
color: 'var(--palette-dark-400Channel)',
}}
>
@ -669,9 +721,7 @@ export default function Clear() {
'&:hover': {
backgroundColor: 'transparent',
},
// textTransform: 'none',
p: '0.3rem 0.5rem',
// width: '11.5rem',
color: 'var(--palette-dark-400Channel)',
}}
>
@ -681,11 +731,10 @@ export default function Clear() {
</StyledToggleButtonGroup>
</Paper>
{search === 'task-id' ? (
<Box component="form" onSubmit={handleSearchByTaskID} sx={{ width: '38rem', height: '3rem' }}>
<Box key="task-id" component="form" onSubmit={handleSearchByTaskID} sx={{ width: '38rem', height: '3rem' }}>
<TextField fullWidth variant="outlined" size="small" {...taskIDList.formProps} sx={{ p: 0 }} />
</Box>
) : (
<>
<Box sx={{ position: 'relative', height: '3rem' }}>
<Paper
component="form"
@ -706,6 +755,7 @@ export default function Clear() {
onFocus={(e) => {
setOptional(true);
}}
key="url"
/>
{optional ? (
@ -754,13 +804,26 @@ export default function Clear() {
size="small"
renderInput={(params) => <TextField {...params} margin="normal" {...item.formProps} />}
/>
) : (
) : item.formProps.id === 'pieceLength' ? (
<TextField
sx={{ width: '10.8rem' }}
margin="normal"
size="small"
{...item.formProps}
className={styles.textField}
InputProps={{
endAdornment: (
<InputAdornment position="start">
<Typography
sx={{ fontFamily: 'mabry-bold', color: 'var(--palette-sidebar-menu-color)' }}
>
MiB
</Typography>
</InputAdornment>
),
}}
/>
) : (
<TextField margin="normal" size="small" {...item.formProps} className={styles.textField} />
)}
</Box>
);
@ -783,7 +846,6 @@ export default function Clear() {
)}
</Paper>
</Box>
</>
)}
{isLoading ? (
<Box id="isLoading" sx={{ mt: '4rem' }}>
@ -896,8 +958,7 @@ export default function Clear() {
<Box id={`cache-${index}`}>
{currentPageData?.map((item: any, index: number) => {
return index !== currentPageData.length - 1 ? (
<>
<Box sx={{ p: '1rem', display: 'flex', alignItems: 'center' }}>
<Box key={index} sx={{ p: '1rem', display: 'flex', alignItems: 'center' }}>
<Box width="20%" sx={{ display: 'flex', alignItems: 'center', pb: '0.4rem' }}>
<Box>
<Tooltip title={item?.hostname || '-'} placement="top">
@ -949,9 +1010,8 @@ export default function Clear() {
</Box>
<Divider />
</Box>
</>
) : (
<Box sx={{ p: '1rem', display: 'flex', alignItems: 'center' }}>
<Box key={index} sx={{ p: '1rem', display: 'flex', alignItems: 'center' }}>
<Box width="20%" sx={{ display: 'flex', alignItems: 'center', pb: '0.4rem' }}>
<Box>
<Tooltip title={item?.hostname || '-'} placement="top">

View File

@ -46,6 +46,7 @@ import { ReactComponent as TaskID } from '../../../../assets/images/job/task/tas
import { ReactComponent as Application } from '../../../../assets/images/job/task/type.svg';
import { ReactComponent as IP } from '../../../../assets/images/job/task/ip.svg';
import { ReactComponent as CheckLog } from '../../../../assets/images/job/task/error-log.svg';
import { ReactComponent as PieceLength } from '../../../../assets/images/job/preheat/piece-length.svg';
const CustomWidthTooltip = styled(({ className, ...props }: TooltipProps) => (
<Tooltip {...props} classes={{ popper: className }} />
@ -257,7 +258,7 @@ export default function ShowExecutions() {
ID
</Typography>
</Box>
<Typography variant="body1" className={styles.informationContent}>
<Typography id="id" variant="body1" className={styles.informationContent}>
{isLoading ? <Skeleton data-testid="execution-isloading" sx={{ width: '2rem' }} /> : executions?.id || 0}
</Typography>
</Box>
@ -350,7 +351,7 @@ export default function ShowExecutions() {
Task ID
</Typography>
</Box>
<Typography variant="body1" className={styles.informationContent}>
<Typography id="task-id" variant="body1" className={styles.informationContent}>
{isLoading ? (
<Skeleton data-testid="execution-isloading" sx={{ width: '2rem' }} />
) : (
@ -369,12 +370,29 @@ export default function ShowExecutions() {
<Skeleton data-testid="execution-isloading" sx={{ width: '4rem' }} />
) : (
<CustomWidthTooltip title={executions?.args?.url || '-'} placement="bottom">
<Typography variant="body1" component="div" className={styles.urlContent}>
<Typography id="url" variant="body1" component="div" className={styles.urlContent}>
{executions?.args?.url || '-'}
</Typography>
</CustomWidthTooltip>
)}
</Box>
<Box className={styles.informationContainer}>
<Box className={styles.informationTitle}>
<PieceLength className={styles.informationTitleIcon} />
<Typography variant="body1" fontFamily="mabry-bold" component="div" className={styles.informationTitleText}>
Piece Length
</Typography>
</Box>
<Typography id="piece-length" variant="body1" className={styles.informationContent}>
{isLoading ? (
<Skeleton sx={{ width: '4rem' }} />
) : executions?.args?.piece_length ? (
`${Number(executions?.args?.piece_length) / 1024 / 1024} MiB`
) : (
'-'
)}
</Typography>
</Box>
<Box className={styles.informationContainer}>
<Box className={styles.informationTitle}>
<Tag className={styles.informationTitleIcon} />
@ -387,6 +405,7 @@ export default function ShowExecutions() {
<Skeleton data-testid="execution-isloading" sx={{ width: '4rem' }} />
) : executions?.args?.tag ? (
<Chip
id="tag"
label={executions?.args?.tag}
size="small"
variant="outlined"
@ -400,7 +419,7 @@ export default function ShowExecutions() {
}}
/>
) : (
<Typography variant="body1" className={styles.informationContent}>
<Typography id="tag" variant="body1" className={styles.informationContent}>
-
</Typography>
)}
@ -414,7 +433,7 @@ export default function ShowExecutions() {
</Typography>
</Box>
<Box className={styles.informationContent} sx={{ display: 'flex', flexWrap: 'wrap' }}>
<Typography variant="body1" className={styles.informationContent}>
<Typography id="application" variant="body1" className={styles.informationContent}>
{isLoading ? (
<Skeleton data-testid="execution-isloading" sx={{ width: '4rem' }} />
) : (
@ -430,17 +449,15 @@ export default function ShowExecutions() {
Scheduler Clusters ID
</Typography>
</Box>
<Box className={styles.schedulerClustersID}>
<Box id="scheduler-clusters-id" className={styles.schedulerClustersID}>
{isLoading ? (
<Skeleton data-testid="execution-isloading" sx={{ width: '4rem' }} />
) : (
executions?.scheduler_clusters?.map((item: any, index: number) => {
return (
<Box className={styles.schedulerClustersIDContent}>
<Typography key={index} variant="body2" component="div" fontFamily="mabry-bold">
<Typography key={index} variant="body2" component="div" fontFamily="mabry-bold" ml="0.5rem">
{item.id || '-'}
</Typography>
</Box>
);
}) || '-'
)}
@ -458,13 +475,14 @@ export default function ShowExecutions() {
<Skeleton data-testid="execution-isloading" sx={{ width: '2rem' }} />
) : executions?.created_at ? (
<Chip
id="created-at"
avatar={<MoreTimeIcon />}
label={getBJTDatetime(executions?.created_at || '0')}
variant="outlined"
size="small"
/>
) : (
<Typography variant="body1" className={styles.informationContent}>
<Typography id="created-at" variant="body1" className={styles.informationContent}>
-
</Typography>
)}

View File

@ -781,6 +781,7 @@ export interface JobsResponse {
timeout: number;
type: string;
url: string;
piece_length: number;
username: string;
};
result: {
@ -846,6 +847,7 @@ export interface getJobResponse {
timeout: number;
type: string;
url: string;
piece_length: number;
username: string;
};
result: {
@ -889,6 +891,7 @@ interface createJobRequest {
tag: string;
filtered_query_params: string;
headers?: { [key: string]: string } | null;
piece_length?: number;
};
scheduler_cluster_ids: Array<number>;
}
@ -908,6 +911,7 @@ interface cerateJobResponse {
tag: string;
type: string;
url: string;
piece_length: number;
};
result: string;
}
@ -1111,6 +1115,7 @@ export interface getTaskJobResponse {
task_id: string;
timeout?: number;
url?: string;
piece_length?: number;
};
result: {
created_at: string;