Compare commits

...

92 Commits

Author SHA1 Message Date
Jonny zhang 9cbec06edb
chore: Modify get_image_distribution job parameters (#579)
Signed-off-by: yingxuan <zhanglujia.zlj@digital-engine.com>
Co-authored-by: yingxuan <zhanglujia.zlj@digital-engine.com>
2025-08-29 16:29:18 +08:00
Jonny zhang 8d8130d3bb
chore: Modify the persistent cache task API definition (#577)
Signed-off-by: yingxuan <zhanglujia.zlj@digital-engine.com>
Co-authored-by: yingxuan <zhanglujia.zlj@digital-engine.com>
2025-08-28 16:01:43 +08:00
dependabot[bot] 5022ca0e4e
chore(deps): bump actions/checkout from 4 to 5 (#568)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 14:22:35 +08:00
Jonny zhang 8b27240b0c
chore: remove typography in select menu (#567)
Signed-off-by: 瑛玄 <yingxuan@B-74K9LGQN-2326.local>
Co-authored-by: 瑛玄 <yingxuan@B-74K9LGQN-2326.local>
2025-07-30 16:26:06 +08:00
Zhaoxinxin 49a3f9a6f2
feat: modify form validation and E2E (#560)
* feat: modify form validation and E2E

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

* feat: modify form validation and E2E

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

* feat: modify form validation and E2E

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

* feat: modify form validation and E2E

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

* feat: modify form validation and E2E

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-07-22 13:53:15 +08:00
jjzhang332 ff94450c6e
chore: first commit test (#562)
chore: yx first commit test

Signed-off-by: 瑛玄 <zhanglujia.zlj@digital-engine.com>
Co-authored-by: 瑛玄 <zhanglujia.zlj@digital-engine.com>
2025-07-22 09:57:14 +08:00
Zhaoxinxin 849cdb77b7
chore: optimize E2E testing and images (#559)
* chore: optimize E2E testing and images

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

* chore: optimize E2E testing and images

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

* chore: optimize E2E testing and images

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-07-16 15:50:27 +08:00
dependabot[bot] ffeb700ac8
chore(deps): bump filesize from 10.1.6 to 11.0.1 (#558)
Bumps [filesize](https://github.com/avoidwork/filesize.js) from 10.1.6 to 11.0.1.
- [Changelog](https://github.com/avoidwork/filesize.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/avoidwork/filesize.js/compare/10.1.6...11.0.1)

---
updated-dependencies:
- dependency-name: filesize
  dependency-version: 11.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-15 14:26:22 +08:00
Zhaoxinxin a527be2547
fix: create preheat parameter ips (#557)
* fix: create preheat parameter ips

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

* fix: create preheat parameter ips

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-07-10 14:39:24 +08:00
Zhaoxinxin 353a8cd778
chore: perfect create preheat and perfect preheat E2E (#556) 2025-07-09 11:52:05 +08:00
Zhaoxinxin d1cc68c3f9
feat: create preheat remove Content For Calculating Task ID (#555)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-07-08 23:06:40 +08:00
Zhaoxinxin 365b638f64
flx: gc history ttl display error (#554)
* GC history TTL display error

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

* GC history TTL display error

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-07-03 20:18:02 +08:00
Zhaoxinxin 9e08366b9b
chore: change search by url search box (#553)
* chore: change  search by url search box

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

* chore: change  search by url search box

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-07-03 17:34:50 +08:00
Zhaoxinxin 36678fbf10
feat: resource task add Image Manifest Url (#551)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-07-02 23:38:47 +08:00
Zhaoxinxin 5d943d8aea
feat: The minimum value of a numeric input box is 0 (#550)
* feat: The minimum value of number type input is 0

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

* feat: The minimum value of number type input is 0

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-07-01 13:49:18 +08:00
Zhaoxinxin 70e822652b
feat: change package (#548) 2025-06-27 14:49:30 +08:00
Zhaoxinxin 499ef7f82d
Feat add gc (#545)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-06-25 22:26:05 +08:00
dependabot[bot] 192567e803
chore(deps): bump @types/node from 22.15.32 to 24.0.3 (#543)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.32 to 24.0.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.3
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-18 14:21:30 +08:00
Zhaoxinxin 4e1e795811
Chore change preheat (#540)
* chore: change preheat

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

* chore: change preheat

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

* chore: change preheat

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

* chore: change preheat

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

* chore: change preheat

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-06-13 14:48:00 +08:00
dependabot[bot] a6802f8c78
chore(deps-dev): bump eslint-plugin-cypress from 4.3.0 to 5.1.0 (#537)
Bumps [eslint-plugin-cypress](https://github.com/cypress-io/eslint-plugin-cypress) from 4.3.0 to 5.1.0.
- [Release notes](https://github.com/cypress-io/eslint-plugin-cypress/releases)
- [Commits](https://github.com/cypress-io/eslint-plugin-cypress/compare/v4.3.0...v5.1.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-cypress
  dependency-version: 5.1.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-11 10:49:46 +08:00
Zhaoxinxin aa4b9ca70f
feat: create preheat scope add percentage and count (#535) 2025-06-05 19:59:24 +08:00
Zhaoxinxin b3769f312f
feat: search task add content for calculating task id (#536)
* feat: search task add content for calculating task id

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

* feat: search task add content for calculating task id

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

* feat: search task add content for calculating task id

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

* feat: search task add content for calculating task id

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

* feat: search task add content for calculating task id

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-06-05 17:15:45 +08:00
Zhaoxinxin 9d852018d6
Feat: preheat add batch preheat (#531)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-05-30 12:01:01 +08:00
Zhaoxinxin b71c1ee7a4
feat: preheat add search (#530)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-05-27 20:13:14 +08:00
Zhaoxinxin 93e2bff377
feat: add audit page (#527)
* feat: add audit page

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

* feat: add audit page

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

* feat: add audit page

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

* feat: add audit page

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

* feat: add audit page

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

* feat: add audit page

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-05-26 21:06:13 +08:00
Gaius f160a3ace9
chore(README.md): add maintainer google groups for communication channels and remove discussion group (#526)
* chore(README.md): add maintainer google groups for communication channels and remove discussion group

Signed-off-by: Gaius <gaius.qi@gmail.com>

* Update README.md

---------

Signed-off-by: Gaius <gaius.qi@gmail.com>
2025-05-23 10:36:41 +08:00
Zhaoxinxin d49f8ad080
feat: click on the cluster name to view the cluster details (#525)
* feat: click on the cluster name to view the cluster details

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

* feat: click on the cluster name to view the cluster details

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

* feat: click on the cluster name to view the cluster details

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-05-19 17:52:54 +08:00
Zhaoxinxin 1c704b8b98
chore: change preheat error log width (#524)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-05-19 10:07:32 +08:00
Zhaoxinxin 6a05d43483
feat: add resource persistent cache task (#522)
* chore: resource Persistent Cache Tasks

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

* chore: change seed peer e2e test

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

* feat: add resource persistent cache task

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

* feat: add resource persistent cache task

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

* feat: add resource persistent cache task

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

* feat: add resource persistent cache task

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

* feat: add resource persistent cache task

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

* feat: add resource persistent cache task

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

* feat: add resource persistent cache task

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

* feat: add resource persistent cache task

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

* feat: add resource persistent cache task

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

* feat: add resource persistent cache task

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-05-16 16:27:23 +08:00
Zhaoxinxin e95c7e70e6
feat: Create preheating and add search cluster function (#521)
* feat: Create preheating and add search cluster function

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

* feat: Create preheating and add search cluster function

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-05-14 15:24:09 +08:00
dependabot[bot] d5a6609c72
chore(deps): bump web-vitals from 4.2.4 to 5.0.0 (#519)
Bumps [web-vitals](https://github.com/GoogleChrome/web-vitals) from 4.2.4 to 5.0.0.
- [Changelog](https://github.com/GoogleChrome/web-vitals/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GoogleChrome/web-vitals/compare/v4.2.4...v5.0.0)

---
updated-dependencies:
- dependency-name: web-vitals
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-13 21:10:01 +08:00
Zhaoxinxin 6f4393c60a
fix: Cluster scopes title style is not effective (#516)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-05-09 10:20:46 +08:00
Zhaoxinxin 1b301b6999
fix: change CI error (#515)
fix: change ci error

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-30 00:46:33 +08:00
dependabot[bot] fc31a5f649
chore(deps): bump react-router-dom from 6.30.0 to 7.5.3 (#513)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.30.0 to 7.5.3.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.5.3/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.5.3
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-29 11:30:21 +08:00
Zhaoxinxin 25fb9a53be
feat: add search user E2E test (#514)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-29 11:01:48 +08:00
Zhaoxinxin fd4fbcba41
chore: change users (#512)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-29 09:40:39 +08:00
Zhaoxinxin 6a3f9bf315
Chore change 404 e2e test (#511)
* chore: change 404 e2e test

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

* chore: change 404 e2e test

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-29 09:40:25 +08:00
Zhaoxinxin f14da7dbcd
chore: optimizing create cluster and create clusters test (#509)
* chore: optimizing create cluster and create clusters test

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

* chore: optimizing create cluster and create clusters test

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-28 14:56:15 +08:00
Zhaoxinxin 7f436a839b
chore: optimizing update cluster and update clusters test (#510)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-28 14:55:55 +08:00
Zhaoxinxin 4657ffe359
chore: optimizing clusters and clusters test (#508)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-27 20:28:27 +08:00
Zhaoxinxin 6c856920c3
chore: change seed peer e2e test (#507)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-25 09:51:58 +08:00
Zhaoxinxin 45b6a1673d
chore: change scheduler e2e test (#506)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-24 09:43:00 +08:00
Zhaoxinxin 9fa12d4e0d
chore: bump query-string version to v9.1.1 (#505)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-24 09:42:40 +08:00
Zhaoxinxin 1399d609da
chore: bump jsonwebtoken version to v9.0.9 (#504)
chore: bump jsonwebtoken version to v9.09

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-24 09:42:26 +08:00
Zhaoxinxin a29359fbf8
chore: change tokens (#503)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-22 20:29:04 +08:00
Zhaoxinxin 4c623e56b9
chore: change signup (#501)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-21 19:41:06 +08:00
Zhaoxinxin 05113777c9
chore: change signin (#500)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-21 19:40:54 +08:00
Zhaoxinxin ecb5c28df1
chore: change dark layout (#499)
* chore: change dark layout

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

* chore: change dark layout

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-21 19:40:41 +08:00
Zhaoxinxin 4c967d29fc
chore: delete unused image (#498)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-21 16:55:44 +08:00
Zhaoxinxin a48eafaf68
chore: optimizing schedulers (#497)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-18 17:11:42 +08:00
Zhaoxinxin af2733fa49
chore: optimizing cluster information (#496)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-18 15:25:44 +08:00
Zhaoxinxin 57ca2c268e
chore: optimizing cluster CSS (#495)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-18 10:01:25 +08:00
Zhaoxinxin 4f695cee03
chore: bump cypress version to v14.3.0 (#494)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-18 10:01:15 +08:00
Zhaoxinxin 21e69ed180
chore: Change cluster e2e test annotation (#493)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-18 10:01:01 +08:00
Zhaoxinxin 68592d2f8e
feat: Changed to dark mode by default (#492)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-16 16:41:03 +08:00
Zhaoxinxin 6e0a60c753
fix: peer e2e error (#491)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-15 13:37:57 +08:00
dependabot[bot] 22311d8918
chore(deps): bump mui-tel-input from 8.0.1 to 9.0.0 (#489)
Bumps [mui-tel-input](https://github.com/viclafouch/mui-tel-input) from 8.0.1 to 9.0.0.
- [Release notes](https://github.com/viclafouch/mui-tel-input/releases)
- [Commits](https://github.com/viclafouch/mui-tel-input/compare/v8.0.1...v9.0.0)

---
updated-dependencies:
- dependency-name: mui-tel-input
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-15 12:09:51 +08:00
Gaius 0724e7d0d2
chore: optimize browserslist for production (#487)
Signed-off-by: Gaius <gaius.qi@gmail.com>
2025-04-11 16:43:04 +08:00
Zhaoxinxin f898f98337
feat: mui upgraded to v7 (#484)
* feat: mui upgraded to v7

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

* feat: mui upgraded to v7

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-02 18:47:51 +08:00
Zhaoxinxin b22d574e7a
feat: Display based on local time zone (#483)
* feat: Display based on local time zone

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

* feat: Display based on local time zone

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

* feat: Display based on local time zone

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

---------

Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-04-02 18:47:00 +08:00
Zhaoxinxin 29df7c96b2
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>
2025-03-26 11:38:22 +08:00
dependabot[bot] 80c5e14b1a
chore(deps): bump mui-tel-input from 6.0.1 to 8.0.1 (#475)
Bumps [mui-tel-input](https://github.com/viclafouch/mui-tel-input) from 6.0.1 to 8.0.1.
- [Release notes](https://github.com/viclafouch/mui-tel-input/releases)
- [Commits](https://github.com/viclafouch/mui-tel-input/compare/v6.0.1...v8.0.1)

---
updated-dependencies:
- dependency-name: mui-tel-input
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 21:01:17 +08:00
Zhaoxinxin 90cf6d206a
feat: change personal access token scopes (#477)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-03-25 21:00:56 +08:00
Zhaoxinxin 7dd9df2572
Feat add dark module (#448)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-03-24 15:27:03 +08:00
dependabot[bot] 9c96aaace4
chore(deps): bump babel-loader from 9.2.1 to 10.0.0 (#458) 2025-03-04 10:02:13 +08:00
dependabot[bot] 715adcd26c
chore(deps): bump @mui/icons-material from 5.16.14 to 6.4.3 (#443)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 5.16.14 to 6.4.3.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.3/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.3/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-11 13:45:36 +08:00
Zhaoxinxin 7818c33dea
feat: change preheat page (#437)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2025-02-10 11:03:21 +08:00
dependabot[bot] 9698119d87
chore(deps-dev): bump eslint-config-prettier from 9.1.0 to 10.0.1 (#436)
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 9.1.0 to 10.0.1.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v9.1.0...v10.0.1)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-23 20:49:39 +08:00
Zhaoxinxin 4252f20ef4
fix: page bug (#432)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-12-30 18:44:59 +08:00
Zhaoxinxin 57803a54c0
feat: change page UI (#431)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-12-30 10:50:32 +08:00
Zhaoxinxin 0870a8630b
feat: Fix page bugs (#430)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-12-30 10:34:22 +08:00
Zhaoxinxin dde2699bc4
feat: Fix page bugs (#428) 2024-12-27 19:03:25 +08:00
Zhaoxinxin 21db3353d1
feat: console v2.2.0 (#427)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-12-27 10:19:18 +08:00
Zhaoxinxin eb41763f30
feat: preheat add scope (#421)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-12-11 23:31:50 +08:00
dependabot[bot] bd54f92456
chore(deps): bump @types/react-dom from 18.3.3 to 19.0.1 (#418)
Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.3.3 to 19.0.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: "@types/react-dom"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-10 11:03:42 +08:00
Zhaoxinxin af05f56a47
feat: change e2e ci (#416)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-12-06 13:48:53 +08:00
Zhaoxinxin b34c2da5ae
fix: Paging bug (#415)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-12-04 11:26:37 +08:00
dependabot[bot] 686b051305
chore(deps): bump codecov/codecov-action from 4 to 5 (#410)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4 to 5.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-03 10:29:24 +08:00
Zhaoxinxin dded1e4c11
fix: job rate limit (#409)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-11-11 13:48:18 +08:00
Zhaoxinxin 3b99678fee
feat: add cluster parameter Job Rate Limit (#407)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-11-08 17:06:14 +08:00
Zhaoxinxin 137a2333d7
feat: change menu style (#408)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-11-08 15:20:33 +08:00
Zhaoxinxin 741b3a0476
Feat add clear cache page (#405)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-11-05 11:18:30 +08:00
Zhaoxinxin 1a5d0c88b8
fix: Change delete button text (#403)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-10-23 16:47:08 +08:00
dependabot[bot] e8674a4ef9
chore(deps-dev): bump eslint-plugin-cypress from 3.6.0 to 4.0.0 (#400)
Bumps [eslint-plugin-cypress](https://github.com/cypress-io/eslint-plugin-cypress) from 3.6.0 to 4.0.0.
- [Release notes](https://github.com/cypress-io/eslint-plugin-cypress/releases)
- [Commits](https://github.com/cypress-io/eslint-plugin-cypress/compare/v3.6.0...v4.0.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-cypress
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-17 00:01:04 +08:00
Zhaoxinxin e868d5cb2e
fix: number of active schedulers misspell (#398)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-09-25 22:15:15 +08:00
Zhaoxinxin b8e77ff88b
feat: Change preheat field (#394)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-09-18 10:52:56 +08:00
Zhaoxinxin feda25f78c
fix: preheat page switching state to initiate multiple requests (#392)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-09-12 21:29:21 +08:00
Zhaoxinxin 402e683b2b
feat: add changes to scheduler features (#391)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-09-12 17:15:31 +08:00
Zhaoxinxin 10300ba767
feat: change edit cluster (#388)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-09-10 17:02:55 +08:00
dependabot[bot] c4fbb7a01d
chore(deps): bump @mui/styled-engine-sc from 5.14.12 to 6.0.1 (#386)
Bumps [@mui/styled-engine-sc](https://github.com/mui/material-ui/tree/HEAD/packages/mui-styled-engine-sc) from 5.14.12 to 6.0.1.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.0.1/packages/mui-styled-engine-sc)

---
updated-dependencies:
- dependency-name: "@mui/styled-engine-sc"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-06 11:13:01 +08:00
Zhaoxinxin dec1ab4ba2
feat: Change all search templates (#384)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-09-03 11:18:51 +08:00
Zhaoxinxin 85ef84998a
Feat change cluster card layout (#382)
Signed-off-by: zhaoxinxin <1186037180@qq.com>
2024-08-27 17:28:01 +08:00
482 changed files with 53763 additions and 14603 deletions

View File

@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Check large files
uses: actionsDesk/lfs-warning@v3.3

View File

@ -15,7 +15,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Setup node
uses: actions/setup-node@v4

View File

@ -20,7 +20,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Initialize CodeQL
uses: github/codeql-action/init@v3

View File

@ -7,7 +7,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Setup node
uses: actions/setup-node@v4
@ -26,6 +26,6 @@ jobs:
wait-on-timeout: 120
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v4
uses: codecov/codecov-action@v5
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

View File

@ -13,7 +13,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Setup node
uses: actions/setup-node@v4

View File

@ -12,7 +12,7 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Set node version
uses: actions/setup-node@v4

View File

@ -33,8 +33,9 @@ You can find the full documentation on the [d7y.io][d7y.io].
Join the conversation and help the community.
- **Slack Channel**: [#dragonfly](https://cloud-native.slack.com/messages/dragonfly/) on [CNCF Slack](https://slack.cncf.io/)
- **Discussion Group**: <dragonfly-discuss@googlegroups.com>
- **Github Discussions**: [Dragonfly Discussion Forum](https://github.com/dragonflyoss/dragonfly/discussions)
- **Developer Group**: <dragonfly-developers@googlegroups.com>
- **Maintainer Group**: <dragonfly-maintainers@googlegroups.com>
- **Twitter**: [@dragonfly_oss](https://twitter.com/dragonfly_oss)
- **DingTalk**: [22880028764](https://qr.dingtalk.com/action/joingroup?code=v1,k1,pkV9IbsSyDusFQdByPSK3HfCG61ZCLeb8b/lpQ3uUqI=&_dt_no_comment=1&origin=11)

View File

@ -7,13 +7,19 @@ describe('404', () => {
it('show 404 page', () => {
cy.visit('/root');
cy.get('.MuiTypography-h4').should('have.text', 'Something gone wrong!');
cy.get('#404-help-text').should('have.text', `The page you were looking for doesn't exist.`);
});
it('click the `go back cluster` button', () => {
cy.visit('/root');
cy.get('.MuiTypography-h4').should('have.text', 'Something gone wrong!');
cy.get('.MuiButtonBase-root').click();
// Display 404 help text.
cy.get('#something-went-wrong').should('have.text', 'Something gone wrong!');
cy.get('#404-help-text').should('have.text', `The page you were looking for doesn't exist.`);
// Click go back cluster button.
cy.get('#go-back').click();
// Then I see that the current page is the clusters.
cy.url().should('include', '/clusters');

View File

@ -0,0 +1,422 @@
import audit from '../../fixtures/audit/audits.json';
import paginationAudit from '../../fixtures/audit/pagination-audits.json';
import users from '../../fixtures/users/users.json';
import userAudit from '../../fixtures/audit/user.audits.json';
import operationGetAudit from '../../fixtures/audit/operation-get-audits.json';
import operationPostAudit from '../../fixtures/audit/operation-post-audits.json';
import operationPutAudit from '../../fixtures/audit/operation-put-audits.json';
import operationDeleteAudit from '../../fixtures/audit/operation-delete-audits.json';
import operationPatchAudit from '../../fixtures/audit/operation-patch-audits.json';
import actorTypeUserAudit from '../../fixtures/audit/actor-type-user-audits.json';
import actorTypeUnknownAudit from '../../fixtures/audit/actor-type-unknown-audits.json';
import actorTypePatAudit from '../../fixtures/audit/actor-type-pat-audits.json';
import failureAudit from '../../fixtures/audit/failure-audits.json';
describe('audit', () => {
beforeEach(() => {
cy.signin();
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?page=1&per_page=10>;rel=prev,</api/v1/audits?page=2&per_page=10>;rel=next,</api/v1/audits?page=1&per_page=10>;rel=first,</api/v1/audits?page=2&per_page=10>;rel=last',
};
res.send(200, audit, responseHeaders);
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?page=2&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?page=1&per_page=10>;rel=prev,</api/v1/audits?page=3&per_page=10>;rel=next,</api/v1/audits?page=1&per_page=10>;rel=first,</api/v1/audits?page=2&per_page=10>;rel=last',
};
res.send(200, paginationAudit, responseHeaders);
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/users?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: users,
});
},
);
cy.visit('/audit');
cy.viewport(1440, 1080);
});
it('when data is loaded', () => {
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(4)').click();
// Can display user name.
cy.get('#user-11').should('have.text', 'unknown');
// Can display path.
cy.get('#path-11').should('have.text', '/api/v1/users/signin');
// Can display operation.
cy.get('#operation-11').should('have.text', 'POST');
// Can display actor type.
cy.get('#actor-type-11').should('have.text', 'UNKNOWN');
// Can display status code.
cy.get('#status-code-11').should('have.text', '401');
// Can display status.
cy.get('#status-11').should('have.text', 'FAILURE');
cy.get('#user-13').should('have.text', 'jack');
// Can display different operation.
cy.get('#operation-13').should('have.text', 'GET');
cy.get('#operation-14').should('have.text', 'PATCH');
cy.get('#operation-15').should('have.text', 'DELETE');
cy.get('#operation-16').should('have.text', 'PUT');
});
describe('search', () => {
it('should search user name', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?actor_name=jack&page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?actor_name=jack&page=1&per_page=10>;rel=prev,</api/v1/audits?actor_name=jack&page=2&per_page=10>;rel=next,</api/v1/audits?actor_name=jack&page=1&per_page=10>;rel=first,</api/v1/audits?actor_name=jack&page=1&per_page=10>;rel=last',
};
res.send(200, userAudit, responseHeaders);
});
},
);
cy.get('#actor-name').type('jack');
cy.get('#audit-table-body').children().and('have.length', 3);
cy.get('#user-5').should('have.text', 'jack');
});
it('should filter by operation', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?operation=GET&page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?operation=GET&page=1&per_page=10>;rel=prev,</api/v1/audits?operation=GET&page=2&per_page=10>;rel=next,</api/v1/audits?operation=GET&page=1&per_page=10>;rel=first,</api/v1/audits?operation=GET&page=1&per_page=10>;rel=last',
};
res.send(200, operationGetAudit, responseHeaders);
});
},
);
cy.get('#operation-select').click();
// Select Get.
cy.get('#GET').click();
cy.get('#operation-13').should('have.text', 'GET');
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?operation=POST&page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?operation=POST&page=1&per_page=10>;rel=prev,</api/v1/audits?operation=POST&page=2&per_page=10>;rel=next,</api/v1/audits?operation=POST&page=1&per_page=10>;rel=first,</api/v1/audits?operation=POST&page=1&per_page=10>;rel=last',
};
res.send(200, operationPostAudit, responseHeaders);
});
},
);
cy.get('#operation-select').click();
// Select Post.
cy.get('#POST').click();
cy.get('#audit-table-body').children().and('have.length', 3);
cy.get('#operation-10').should('have.text', 'POST');
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?operation=PATCH&page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?operation=PATCH&page=1&per_page=10>;rel=prev,</api/v1/audits?operation=PATCH&page=2&per_page=10>;rel=next,</api/v1/audits?operation=PATCH&page=1&per_page=10>;rel=first,</api/v1/audits?operation=PATCH&page=1&per_page=10>;rel=last',
};
res.send(200, operationPatchAudit, responseHeaders);
});
},
);
cy.get('#operation-select').click();
// Select Patch.
cy.get('#PATCH').click();
cy.get('#audit-table-body').children().and('have.length', 1);
cy.get('#operation-14').should('have.text', 'PATCH');
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?operation=DELETE&page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?operation=DELETE&page=1&per_page=10>;rel=prev,</api/v1/audits?operation=DELETE&page=2&per_page=10>;rel=next,</api/v1/audits?operation=DELETE&page=1&per_page=10>;rel=first,</api/v1/audits?operation=DELETE&page=1&per_page=10>;rel=last',
};
res.send(200, operationDeleteAudit, responseHeaders);
});
},
);
cy.get('#operation-select').click();
// Select Delete.
cy.get('#DELETE').click();
cy.get('#audit-table-body').children().and('have.length', 1);
cy.get('#operation-15').should('have.text', 'DELETE');
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?operation=PUT&page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?operation=PUT&page=1&per_page=10>;rel=prev,</api/v1/audits?operation=PUT&page=2&per_page=10>;rel=next,</api/v1/audits?operation=PUT&page=1&per_page=10>;rel=first,</api/v1/audits?operation=PUT&page=1&per_page=10>;rel=last',
};
res.send(200, operationPutAudit, responseHeaders);
});
},
);
cy.get('#operation-select').click();
// Select Put.
cy.get('#PUT').click();
cy.get('#audit-table-body').children().and('have.length', 1);
cy.get('#operation-16').should('have.text', 'PUT');
});
it('should filter by actor type', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?actor_type=USER&page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?actor_type=USER&page=1&per_page=10>;rel=prev,</api/v1/audits?actor_type=USER&page=2&per_page=10>;rel=next,</api/v1/audits?actor_type=USER&page=1&per_page=10>;rel=first,</api/v1/audits?actor_type=USER&page=1&per_page=10>;rel=last',
};
res.send(200, actorTypeUserAudit, responseHeaders);
});
},
);
cy.get('#actor-type-select').click();
// Select User for Actor Type.
cy.get('#USER').click();
cy.get('#audit-table-body').children().and('have.length', 9);
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?actor_type=PAT&page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?actor_type=PAT&page=1&per_page=10>;rel=prev,</api/v1/audits?actor_type=PAT&page=2&per_page=10>;rel=next,</api/v1/audits?actor_type=PAT&page=1&per_page=10>;rel=first,</api/v1/audits?actor_type=PAT&page=1&per_page=10>;rel=last',
};
res.send(200, actorTypePatAudit, responseHeaders);
});
},
);
cy.get('#actor-type-select').click();
// Select Pat for Actor Type.
cy.get('#PAT').click();
cy.get('#actor-type-12').should('have.text', 'PAT');
cy.get('#audit-table-body').children().and('have.length', 1);
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?actor_type=UNKNOWN&page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?actor_type=UNKNOWN&page=1&per_page=10>;rel=prev,</api/v1/audits?actor_type=UNKNOWN&page=2&per_page=10>;rel=next,</api/v1/audits?actor_type=UNKNOWN&page=1&per_page=10>;rel=first,</api/v1/audits?actor_type=UNKNOWN&page=1&per_page=10>;rel=last',
};
res.send(200, actorTypeUnknownAudit, responseHeaders);
});
},
);
cy.get('#actor-type-select').click();
// Select Pat for Actor Type.
cy.get('#UNKNOWN').click();
cy.get('#actor-type-7').should('have.text', 'UNKNOWN');
cy.get('#audit-table-body').children().and('have.length', 3);
});
it('should filter by status', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?page=1&per_page=10&state=FAILURE',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?page=1&per_page=10&state=FAILURE>;rel=prev,</api/v1/audits?page=2&per_page=10&state=FAILURE>;rel=next,</api/v1/audits?page=1&per_page=10&state=FAILURE>;rel=first,</api/v1/audits?page=1&per_page=10&state=FAILURE>;rel=last',
};
res.send(200, failureAudit, responseHeaders);
});
},
);
cy.get('#states-select').click();
cy.get('#FAILURE').click();
cy.get('#audit-table-body').children().and('have.length', 2);
});
it('should filter by path', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?page=1&path=%2Fapi%2Fv1%2Fclusters%2F1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?page=1&path=%2Fapi%2Fv1%2Fclusters%2F1&per_page=10>;rel=prev,</api/v1/audits?page=1&path=%2Fapi%2Fv1%2Fclusters%2F1&per_page=10>;rel=next,</api/v1/audits?page=1&path=%2Fapi%2Fv1%2Fclusters%2F1&per_page=10>;rel=first,</api/v1/audits?page=1&path=%2Fapi%2Fv1%2Fclusters%2F1&per_page=10>;rel=last',
};
res.send(200, operationPatchAudit, responseHeaders);
});
},
);
cy.get('#search').type('/api/v1/clusters/1');
});
});
it('when no data is loaded', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?page=1&per_page=10',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/audits?page=1&per_page=10>;rel=prev,</api/v1/audits?page=3&per_page=10>;rel=next,</api/v1/audits?page=1&per_page=10>;rel=first,</api/v1/audits?page=2&per_page=10>;rel=last',
};
res.send(200, [], responseHeaders);
});
},
);
cy.get('#no-audit-table').should('have.text', `You don't have audit logs.`);
});
describe('should handle API error response', () => {
it('should handle user API error response', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/users?page=1&per_page=10000000',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.get('.MuiAlert-message').should('have.text', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('should handle audit API error response', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/audits?page=1&per_page=10',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.get('.MuiAlert-message').should('have.text', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
});
});

View File

@ -2,8 +2,6 @@ import clusters from '../../fixtures/clusters/clusters.json';
import seedPeers from '../../fixtures/seed-peers/seed-peers.json';
import schedulers from '../../fixtures/schedulers/schedulers.json';
import cluster from '../../fixtures/clusters/cluster/cluster.json';
import seedPeer from '../../fixtures/clusters/cluster/seed-peer.json';
import scheduler from '../../fixtures/clusters/cluster/scheduler.json';
import deleteCluster from '../../fixtures/clusters/cluster/delete-cluster.json';
import deleteClusters from '../../fixtures/clusters/cluster/delete-clusters.json';
@ -58,30 +56,6 @@ describe('Cluster', () => {
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/seed-peers?page=1&per_page=10000000&seed_peer_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: seedPeer,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/schedulers?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: scheduler,
});
},
);
cy.visit('clusters/1');
cy.viewport(1440, 1080);
@ -89,161 +63,98 @@ describe('Cluster', () => {
describe('when data is loaded', () => {
it('can display breadcrumb', () => {
// Display is loading.
cy.get('[data-testid="cluster-loading"]').should('be.exist');
cy.url().should('include', '/clusters/1');
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'cluster-1');
cy.get('.MuiBreadcrumbs-ol > :nth-child(1) > .MuiTypography-root').click();
// Load does not exist.
cy.get('[data-testid="cluster-loading"]').should('not.exist');
cy.url().should('include', '/clusters');
});
it('can display information', () => {
// Show cluster name.
cy.get('.information_clusterContainer__l8H8p > :nth-child(1) > .MuiTypography-subtitle1')
.should('be.visible')
.and('contain', 'cluster-1');
// Display the cluster name
cy.get('#name').should('be.visible').and('contain', 'cluster-1');
// Show cluster description.
cy.get('.information_clusterContainer__l8H8p > :nth-child(3) > .MuiTypography-subtitle1')
// Display the cluster description.
cy.get('#description')
.should('be.visible')
.and(
'contain',
'Cluster-1 is a high-performance computing cluster located in China, specifically in Hangzhou and Beijing data centers.',
);
// Show whether it is the default cluster.
cy.get('.information_clusterContainer__l8H8p > :nth-child(5) > .MuiTypography-subtitle1')
.should('be.visible')
.and('contain', 'Yes');
// Displays whether it is the default cluster.
cy.get('#default').should('be.visible').and('contain', 'Yes');
// Show scheduler cluster id.
cy.get('.information_clusterContainer__l8H8p > :nth-child(7) > .css-70qvj9 > .MuiTypography-root')
.should('be.visible')
.and('contain', '1');
// Displays the scheduler cluster ID.
cy.get('#scheduler-cluster-id').should('be.visible').and('contain', '1');
// Show seed peer cluster id.
cy.get('.information_clusterContainer__l8H8p > :nth-child(9) > .css-70qvj9 > .MuiTypography-root')
.should('be.visible')
.and('contain', '1');
// Displays the seed peer cluster ID.
cy.get('#seed-peer-cluster-id').should('be.visible').and('contain', '1');
});
it('can display scopes', () => {
// Show location.
cy.get('.information_locationTextContainer__ZdjKa > .MuiTypography-root')
.should('be.visible')
.and('contain', 'China|Hang|Zhou');
// Displays the location.
cy.get('#location').should('be.visible').and('contain', 'China|Hang|Zhou');
// Show idc.
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .MuiBox-root > :nth-child(1)',
)
.should('be.visible')
.and('contain', 'Hangzhou');
// Displays the idc.
cy.get('#idc-1').should('be.visible').and('contain', 'Hangzhou');
cy.get('#idc-2').should('be.visible').and('contain', 'Shanghai');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .MuiBox-root > :nth-child(2)',
)
.should('be.visible')
.and('contain', 'Shanghai');
// IDC does not exist.
cy.get('#idc-3').should('not.be.visible', 'Beijing');
// The number of idc is 2 and the button is no longer displayed.
// The number of IDC is 2 and the More button is no longer displayed.
cy.get('#idc').should('exist').click();
// Click the button to show more idc.
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(1)',
)
.should('be.visible')
.and('have.text', 'Hangzhou');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(2)',
)
.should('be.visible')
.and('have.text', 'Shanghai');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(3)',
).should('not.be.visible');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(4)',
).should('not.be.visible');
cy.get('.MuiDialogContent-root > :nth-child(1)').should('be.visible').and('have.text', 'Hangzhou');
cy.get('.MuiDialogContent-root > :nth-child(2)').should('be.visible').and('have.text', 'Shanghai');
cy.get('.MuiDialogContent-root > :nth-child(3)').should('be.visible').and('have.text', 'Beijing');
cy.get('.MuiDialogContent-root > :nth-child(4)').should('be.visible').and('have.text', 'Xiamen');
cy.get('.MuiDialogContent-root').should('exist');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .css-gg4vpm > .MuiChip-root > .MuiChip-label',
).should('contain', 'Total: 4');
cy.get('#idc-total').should('contain', 'Total: 5');
cy.get('body').click('topLeft');
// Show CIDRs
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .MuiBox-root > :nth-child(2) > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '192.168.0.0/16');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .css-gg4vpm > .MuiChip-root > .MuiChip-label',
).should('contain', 'Total: 4');
// Displays the CIDRs
cy.get('#cidrs-2').should('be.visible').and('contain', '192.168.0.0/16');
cy.get('#cidrs-total').should('contain', 'Total: 5');
// Click the button to show more cidrs.
cy.get('#cidrs').should('exist').click();
// Show idc dialog module.
cy.get('.MuiDialogContent-root').should('exist');
cy.get('.MuiDialogContent-root').should('be.visible').and('contain', '10.0.0.0/8');
cy.get('body').click('topLeft');
// The number of CIDRs displayed is 2.
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(1)',
).should('have.text', '10.0.0.0/8');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(2)',
).should('have.text', '192.168.0.0/16');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(3)',
).should('not.be.visible');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(4)',
).should('not.be.visible');
// The CIDR number should be 3.
cy.get('.MuiDialogContent-root > :nth-child(1)').should('have.text', '10.0.0.0/8');
cy.get('.MuiDialogContent-root > :nth-child(2)').should('have.text', '192.168.0.0/16');
// The number of hostnames displayed is 2.
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(1)',
).should('have.text', 'cluster-1');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(2)',
).should('have.text', 'cluster-2');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(3)',
).should('not.be.visible');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(4)',
).should('not.be.visible');
// CIDRs is not visible.
cy.get('.MuiDialogContent-root > :nth-child(3)').should('not.be.visible', '172.16.0.0/12');
cy.get(':nth-child(4) > .MuiPaper-root > .information_cidrsTags__4sKxa')
.should('be.visible')
.and('contain', 'cluster-1');
// The number of hostnames should be 3.
cy.get('#hostname-1').should('have.text', 'cluster-1');
cy.get('#hostname-2').should('have.text', 'cluster-2');
cy.get(':nth-child(4) > .information_cidrsContainer__joiB7 > .css-gg4vpm > .MuiChip-root').should(
'contain',
'Total: 4',
);
// Hostname is not visible.
cy.get('#hostname-3').should('not.be.visible', 'cluster-3');
cy.get('#hostname-4').and('not.be.visible', 'cluster-4');
cy.get('#hostnames-total').should('contain', 'Total: 5');
// Click the button to show more cidrs.
cy.get('#hostnames').should('exist').click();
// Show hostnames dialog module.
cy.get('.MuiDialogContent-root').children().should('have.length', 4);
cy.get('body').click('topLeft');
cy.get('.MuiDialogContent-root').should('not.be.visible');
});
@ -251,125 +162,63 @@ describe('Cluster', () => {
cy.viewport(1920, 1080);
// The number of idc displayed is 3.
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(1)',
)
.should('be.visible')
.and('have.text', 'Hangzhou');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(2)',
)
.should('be.visible')
.and('have.text', 'Shanghai');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(3)',
)
.should('be.visible')
.and('have.text', 'Beijing');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(4)',
).should('not.be.visible');
cy.get('#idc-1').should('be.visible').and('have.text', 'Hangzhou');
cy.get('#idc-2').should('be.visible').and('have.text', 'Shanghai');
cy.get('#idc-3').should('be.visible').and('have.text', 'Beijing');
cy.get('#idc-4').should('not.be.visible');
// The number of CIDRs displayed is 3.
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(1)',
).should('have.text', '10.0.0.0/8');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(2)',
).should('have.text', '192.168.0.0/16');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(3)',
).should('have.text', '172.16.0.0/12');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(4)',
).should('not.be.visible');
cy.get('#cidrs-1').should('be.visible').should('have.text', '10.0.0.0/8');
cy.get('#cidrs-2').should('be.visible').should('have.text', '192.168.0.0/16');
cy.get('#cidrs-3').should('be.visible').should('have.text', '172.16.0.0/12');
cy.get('#cidrs-4').should('not.be.visible');
// The number of hostnames displayed is 3.
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(1)',
).should('have.text', 'cluster-1');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(2)',
).should('have.text', 'cluster-2');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(3)',
).should('have.text', 'cluster-3');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(4)',
).should('not.be.visible');
cy.get('#hostname-1').should('be.visible').should('have.text', 'cluster-1');
cy.get('#hostname-2').should('be.visible').should('have.text', 'cluster-2');
cy.get('#hostname-3').should('be.visible').should('have.text', 'cluster-3');
cy.get('#hostname-4').should('not.be.visible');
});
it('the visible width of the screen is 1920px. Display scopes', () => {
cy.viewport(2560, 1080);
// The number of idc displayed is 4.
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(1)',
)
.should('be.visible')
.and('have.text', 'Hangzhou');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(2)',
)
.should('be.visible')
.and('have.text', 'Shanghai');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(3)',
)
.should('be.visible')
.and('have.text', 'Beijing');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(4)',
)
.should('be.visible')
.and('have.text', 'Xiamen');
// The number of idc displayed is 3.
cy.get('#idc-1').should('be.visible').and('have.text', 'Hangzhou');
cy.get('#idc-2').should('be.visible').and('have.text', 'Shanghai');
cy.get('#idc-3').should('be.visible').and('have.text', 'Beijing');
cy.get('#idc-4').should('be.visible').and('have.text', 'Xiamen');
// The number of CIDRs displayed is 4.
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(1)',
).should('have.text', '10.0.0.0/8');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(2)',
).should('have.text', '192.168.0.0/16');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(3)',
).should('have.text', '172.16.0.0/12');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(4)',
).should('have.text', '173.16.0.1/11');
// The number of CIDRs displayed is 3.
cy.get('#cidrs-1').should('be.visible').and('have.text', '10.0.0.0/8');
cy.get('#cidrs-2').should('be.visible').and('have.text', '192.168.0.0/16');
cy.get('#cidrs-3').should('be.visible').and('have.text', '172.16.0.0/12');
cy.get('#cidrs-4').should('be.visible').and('have.text', '173.16.0.1/11');
// The number of hostnames displayed is 4.
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(1)',
).should('have.text', 'cluster-1');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(2)',
).should('have.text', 'cluster-2');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(3)',
).should('have.text', 'cluster-3');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .information_cidrsTags__4sKxa > .information_cidrWrapper__wLuys > :nth-child(4)',
).should('have.text', 'cluster-4');
// The number of hostnames displayed is 3.
cy.get('#hostname-1').should('be.visible').and('have.text', 'cluster-1');
cy.get('#hostname-2').should('be.visible').and('have.text', 'cluster-2');
cy.get('#hostname-3').should('be.visible').and('have.text', 'cluster-3');
cy.get('#hostname-4').should('be.visible').and('have.text', 'cluster-4');
});
it('can display config', () => {
cy.get('.MuiPaper-root > :nth-child(1) > .MuiTypography-body1').should('be.visible').and('have.text', '300');
cy.get('.MuiPaper-root > :nth-child(3) > .MuiTypography-body1').should('be.visible').and('have.text', '51');
cy.get(':nth-child(5) > .MuiTypography-body1').should('be.visible').and('have.text', '4');
cy.get(':nth-child(7) > .MuiTypography-body1').should('be.visible').and('have.text', '40');
cy.get('#seed-peer-load-limit').should('be.visible').and('have.text', '300');
cy.get('#peer-load-limit').should('be.visible').and('have.text', '51');
cy.get('#candidate-parent-limit').should('be.visible').and('have.text', '4');
cy.get('#filter-parent-limit').should('be.visible').and('have.text', '40');
cy.get('#job-rate-limit').should('be.visible').and('have.text', '15');
});
it('copies text to clipboard', () => {
// Click the copy scheduler cluster id icon.
cy.get(':nth-child(7) > .css-70qvj9 > .MuiButtonBase-root > .MuiBox-root').click();
cy.get('#copy-scheduler-cluster-id').click();
cy.get('#schedulerClusterIDCopyIcon').should('exist');
cy.get('#schedulerClusterIDTooltip').should('exist');
cy.get('#schedulerClusterIDTooltip').should('not.exist');
cy.wait(1000);
// Display successful copy icon.
cy.get('#schedulerClusterIDCopyIcon').should('not.exist');
cy.get('#schedulerClusterIDCopyIcon').should('exist');
cy.get('#schedulerClusterIDTooltip').should('not.exist');
// Let's check the copied text.
@ -379,15 +228,13 @@ describe('Cluster', () => {
.should('equal', '1');
// Click the copy seed peer cluster id icon.
cy.get(':nth-child(9) > .css-70qvj9 > .MuiButtonBase-root > .MuiBox-root').click();
cy.get('#copy-seed-peer-cluster-id').click();
cy.get('#seedPeerClusterIDCopyIcon').should('exist');
cy.get('#seedPeerClusterIDTooltip').should('exist');
cy.get('#seedPeerClusterIDTooltip').should('not.exist');
cy.wait(1000);
// Display successful copy icon.
cy.get('#seedPeerClusterIDCopyIcon').should('not.exist');
cy.get('#seedPeerClusterIDCopyIcon').should('exist');
cy.get('#seedPeerClusterIDTooltip').should('not.exist');
// Let's check the copied text.
@ -423,6 +270,7 @@ describe('Cluster', () => {
scheduler_cluster_config: {
candidate_parent_limit: 4,
filter_parent_limit: 15,
job_rate_limit: 100,
},
seed_peer_cluster_config: {
load_limit: 500,
@ -441,6 +289,9 @@ describe('Cluster', () => {
});
it('unable to display breadcrumb', () => {
// Display is loading.
cy.get('[data-testid="cluster-loading"]').should('be.exist');
cy.url().should('include', '/clusters/1');
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root').should('be.visible').and('contain', '-');
@ -450,59 +301,39 @@ describe('Cluster', () => {
});
it('unable to display information', () => {
cy.get('.information_clusterContainer__l8H8p > :nth-child(1) > .MuiTypography-subtitle1').should(
'have.text',
'cluster-1',
);
cy.get('.information_clusterContainer__l8H8p > :nth-child(3) > .MuiTypography-subtitle1').should(
'have.text',
'-',
);
cy.get('.information_clusterContainer__l8H8p > :nth-child(5) > .MuiTypography-subtitle1').should(
'have.text',
'Yes',
);
cy.get('.information_clusterContainer__l8H8p > :nth-child(7) > .css-70qvj9 > .MuiTypography-root').should(
'have.text',
'1',
);
cy.get('.information_clusterContainer__l8H8p > :nth-child(9) > .css-70qvj9 > .MuiTypography-root').should(
'have.text',
'1',
);
cy.get('#name').should('have.text', 'cluster-1');
cy.get('#description').should('have.text', '-');
cy.get('#default').should('have.text', 'Yes');
cy.get('#scheduler-cluster-id').should('have.text', '1');
cy.get('#seed-peer-cluster-id').should('have.text', '1');
});
it('unable to display scopes', () => {
// Show location.
cy.get('.information_locationTextContainer__ZdjKa').should('have.text', '-');
// location should be empty.
cy.get('#no-location').should('have.text', '-');
// Show idc.
// idc should be empty.
cy.get('#idc').should('not.exist');
cy.get(':nth-child(2) > .MuiPaper-root > .information_cidrsTags__4sKxa').should('have.text', '-');
cy.get(
':nth-child(2) > .information_cidrsContainer__joiB7 > .css-gg4vpm > .MuiChip-root > .MuiChip-label',
).should('have.text', 'Total: 0');
cy.get('#no-idc').should('have.text', '-');
cy.get('#idc-total').should('have.text', 'Total: 0');
// Show cidrs.
// cidrs should be empty..
cy.get('#cidrs').should('not.exist');
cy.get(':nth-child(3) > .MuiPaper-root > .information_cidrsTags__4sKxa').should('have.text', '-');
cy.get(
':nth-child(3) > .information_cidrsContainer__joiB7 > .css-gg4vpm > .MuiChip-root > .MuiChip-label',
).should('have.text', 'Total: 0');
cy.get('#no-cidrs').should('have.text', '-');
cy.get('#cidrs-total').should('have.text', 'Total: 0');
// Show hostnames.
// hostnames should be empty..
cy.get('#hostnames').should('not.exist');
cy.get(':nth-child(4) > .MuiPaper-root > .information_cidrsTags__4sKxa').should('have.text', '-');
cy.get(
':nth-child(4) > .information_cidrsContainer__joiB7 > .css-gg4vpm > .MuiChip-root > .MuiChip-label',
).should('have.text', 'Total: 0');
cy.get('#no-hostnames').should('have.text', '-');
cy.get('#hostnames-total').should('have.text', 'Total: 0');
});
it('unable to display config', () => {
cy.get('.MuiPaper-root > :nth-child(1) > .MuiTypography-body1').should('have.text', 500);
cy.get('.MuiPaper-root > :nth-child(3) > .MuiTypography-body1').should('have.text', 200);
cy.get(':nth-child(5) > .MuiTypography-body1').should('have.text', 4);
cy.get(':nth-child(7) > .MuiTypography-body1').should('have.text', 15);
cy.get('#seed-peer-load-limit').should('have.text', 500);
cy.get('#peer-load-limit').should('have.text', 200);
cy.get('#candidate-parent-limit').should('have.text', 4);
cy.get('#filter-parent-limit').should('be.visible').and('have.text', 15);
cy.get('#job-rate-limit').should('have.text', 100);
});
});
@ -521,10 +352,13 @@ describe('Cluster', () => {
cy.visit('clusters/1');
// Show error message.
// Display is loading.
cy.get('[data-testid="cluster-loading"]').should('be.exist');
// An error message should be displayed.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
// Close the error message prompt.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
@ -573,31 +407,17 @@ describe('Cluster', () => {
);
// Display the total number of clusters and the default number.
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', 11);
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', 7);
cy.get('#total-clusters').should('be.visible').and('contain', 37);
cy.get('#default-clusters').should('be.visible').and('contain', 13);
// Choose a cluster without scheduler and seed peer.
cy.get(':nth-child(7) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-10');
cy.get('#cluster-name-10').should('be.visible').and('contain', 'cluster-10');
cy.get(
':nth-child(7) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .clusters_creatTimeContainer__k6XfL > .MuiButtonBase-root',
).click();
cy.get('#cluster-name-10').click();
cy.get('.information_clusterContainer__l8H8p > :nth-child(1) > .MuiTypography-subtitle1').scrollIntoView();
cy.get('#name').scrollIntoView();
cy.get('.information_clusterContainer__l8H8p > :nth-child(1) > .MuiTypography-subtitle1')
.should('be.visible')
.and('contain', 'cluster-10');
cy.get('#name').should('be.visible').and('contain', 'cluster-10');
cy.intercept(
{
@ -634,42 +454,21 @@ describe('Cluster', () => {
// Then I see that the current page is the clusters!
cy.url().should('include', '/clusters');
cy.get(':nth-child(7) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6').should(
'not.exist',
);
cy.get(':nth-child(7) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-2');
cy.get('#cluster-name-10').should('not.exist');
// Display the total number of clusters after deletion.
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', 10);
cy.get('#total-clusters').should('be.visible').and('contain', 36);
// Display the default number after deletion.
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', 6);
cy.get('#default-clusters').should('be.visible').and('contain', 12);
});
it('cluster cannot be deleted if scheduler and seed nodes exist in the cluster', () => {
cy.get(':nth-child(1) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', '1');
cy.get('#cluster-id-1').should('be.visible').and('contain', '1');
cy.get(
':nth-child(1) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .clusters_creatTimeContainer__k6XfL > .MuiButtonBase-root',
).click();
cy.get('#cluster-name-1').click();
cy.get('.information_clusterContainer__l8H8p > :nth-child(1) > .MuiTypography-subtitle1')
.scrollIntoView()
.should('be.visible')
.and('contain', 'cluster-1');
cy.get('#name').scrollIntoView().should('be.visible').and('contain', 'cluster-1');
cy.intercept(
{
@ -684,11 +483,11 @@ describe('Cluster', () => {
},
);
// Click the delete button.
cy.get('#delete-cluster').click();
cy.get('#deleteCluster').click();
// Show error message.
// An error message should be displayed.
cy.get('.MuiAlert-message').should('have.text', 'scheduler cluster exists scheduler');
});
@ -731,18 +530,11 @@ describe('Cluster', () => {
);
// Choose a cluster without scheduler and seed peer.
cy.get(':nth-child(7) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-10');
cy.get('#cluster-name-10').should('be.visible').and('contain', 'cluster-10');
cy.get(
':nth-child(7) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .clusters_creatTimeContainer__k6XfL > .MuiButtonBase-root',
).click();
cy.get('#cluster-name-10').click();
cy.get('.information_clusterContainer__l8H8p > :nth-child(1) > .MuiTypography-subtitle1')
.scrollIntoView()
.should('be.visible')
.and('contain', 'cluster-10');
cy.get('#name').scrollIntoView().should('be.visible').and('contain', 'cluster-10');
cy.intercept(
{
@ -756,12 +548,11 @@ describe('Cluster', () => {
},
);
// Click the delete button.
cy.get('#delete-cluster').click();
// Confirm delete.
cy.get('#deleteCluster').click();
// Show error message.
// An error message should be displayed.
cy.get('.MuiAlert-message').should('have.text', 'Failed to fetch');
});
@ -781,18 +572,12 @@ describe('Cluster', () => {
cy.guestSignin();
cy.get(':nth-child(7) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-10');
// The cluster name should be cluster-10.
cy.get('#cluster-name-10').should('be.visible').and('contain', 'cluster-10');
cy.get(
':nth-child(7) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .clusters_creatTimeContainer__k6XfL > .MuiButtonBase-root',
).click();
cy.get('#cluster-name-10').click();
cy.get('.information_clusterContainer__l8H8p > :nth-child(1) > .MuiTypography-subtitle1')
.scrollIntoView()
.should('be.visible')
.and('contain', 'cluster-10');
cy.get('#name').scrollIntoView().should('be.visible').and('contain', 'cluster-10');
cy.intercept(
{
@ -809,10 +594,10 @@ describe('Cluster', () => {
cy.get('#delete-cluster').click();
// Confirm delete
// Click the Confirm Deletion button.
cy.get('#deleteCluster').click();
// Show error message.
// An error message should be displayed.
cy.get('.MuiAlert-message').should('have.text', 'permission deny');
});
});

View File

@ -1,7 +1,6 @@
import clusters from '../../fixtures/clusters/clusters.json';
import seedPeers from '../../fixtures/seed-peers/seed-peers.json';
import schedulers from '../../fixtures/schedulers/schedulers.json';
import searchCluster from '../../fixtures/clusters/search-cluster.json';
describe('Clusters', () => {
beforeEach(() => {
@ -44,91 +43,80 @@ describe('Clusters', () => {
);
cy.visit('/clusters');
cy.viewport(1440, 1080);
cy.viewport(1440, 1480);
});
describe('when data is loaded', () => {
it('display the total number of clusters and the default number', () => {
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '11');
// Click the create cluster button.
cy.get('#create-cluster').click();
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '7');
// Then I see that the current page is the create cluster!
cy.url().should('include', '/clusters/new');
cy.get('#cancel').click();
// Then I see that the current page is the clusters!
cy.url().should('include', '/clusters');
cy.get('[data-testid="isloading"]').should('be.exist');
// Check total clusters.
cy.get('#total-clusters').should('be.visible').and('contain', '37');
// Check total default clusters.
cy.get('#default-clusters').should('be.visible').and('contain', '13');
cy.get('[data-testid="isloading"]').should('not.exist');
});
it('display the total number of schedulers and the active number', () => {
cy.get(
':nth-child(2) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '12');
cy.get('#total-schedulers').should('be.visible').and('contain', '12');
cy.get(
':nth-child(2) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '4');
cy.get('#active-schedulers').should('be.visible').and('contain', '4');
});
it('display the total number of seed peers and the active number', () => {
cy.get(
'.clusters_seedPeerContainer__u4Xst > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '12');
cy.get('#total-seed-peer').should('be.visible').and('contain', '12');
cy.get(
'.clusters_seedPeerContainer__u4Xst > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '8');
cy.get('#active-seed-peer').should('be.visible').and('contain', '8');
});
it('can display clusters card', () => {
// Display the card component.
cy.get('.MuiBackdrop-root > .MuiBox-root').should('exist');
cy.get('#clusters').should('exist');
// Show Default background color.
cy.get(':nth-child(1) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > #isDefault')
cy.get('#default-cluster-1')
.should('be.visible')
.and('contain', 'Default')
.and('have.css', 'background-color', 'rgb(46, 143, 121)');
.and('have.css', 'background-color', 'rgb(0, 129, 112)');
// Show cluster name.
cy.get(':nth-child(1) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-1');
cy.get('#cluster-name-1').should('be.visible').and('contain', 'cluster-1');
// Show cluster description.
cy.get(':nth-child(1) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .css-m4gmz7 > .MuiTypography-root')
cy.get('#cluster-description-1')
.should('be.visible')
.and(
'contain',
'Cluster-1 is a high-performance computing cluster located in China, specifically in Hangzhou and Beijing data centers.',
);
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// Show Non-Default cluster.
cy.get(':nth-child(8) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-2');
cy.get('#cluster-name-2').should('be.visible').and('contain', 'cluster-2');
// Show Non-Default background color.
cy.get(':nth-child(8) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > #isDefault')
cy.get('#default-cluster-2')
.should('be.visible')
.and('contain', 'Non-Default')
.and('have.css', 'background-color', 'rgb(28, 41, 58)');
.and('have.css', 'background-color', 'rgb(93, 95, 97)');
});
});
describe('when no data is loaded', () => {
beforeEach(() => {
cy.signin();
cy.intercept(
{
method: 'GET',
@ -170,45 +158,21 @@ describe('Clusters', () => {
});
it('display the total number of clusters and the default number', () => {
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '0');
cy.get('#total-clusters').should('be.visible').and('contain', '0');
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '0');
cy.get('#default-clusters').should('be.visible').and('contain', '0');
});
it('display the total number of schedulers and the active number', () => {
cy.get(
':nth-child(2) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '0');
cy.get('#total-schedulers').should('be.visible').and('contain', '0');
cy.get(
':nth-child(2) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '0');
cy.get('#default-clusters').should('be.visible').and('contain', '0');
});
it('display the total number of seed peers and the active number', () => {
cy.get(
'.clusters_seedPeerContainer__u4Xst > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '0');
cy.get('#total-seed-peer').should('be.visible').and('contain', '0');
cy.get(
'.clusters_seedPeerContainer__u4Xst > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '0');
cy.get('#active-seed-peer').should('be.visible').and('contain', '0');
});
it('cluster card should present an empty status', () => {
@ -221,37 +185,29 @@ describe('Clusters', () => {
describe('pagination', () => {
it('pagination updates results and page number', () => {
cy.get('.Mui-selected').invoke('text').should('eq', 'Cluster1');
// Check number of pagination.
cy.get('#clusterPagination > .MuiPagination-ul').children().should('have.length', 4);
cy.get('#clusterPagination > .MuiPagination-ul').children().should('have.length', 7);
// Show cluster name.
cy.get(':nth-child(1) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-1');
cy.get('#cluster-name-1').should('be.visible').and('contain', 'cluster-1');
});
it('when pagination changes, different page results are rendered', () => {
cy.get('.Mui-selected').invoke('text').should('eq', 'Cluster1');
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// Display last page cluster information.
cy.get('.clusters_clusterListContent__UwWjF > .css-k008qs').should('be.visible').and('contain', '8');
cy.get('#cluster-id-8').should('be.visible').and('contain', '8');
// Display cluster information.
cy.get('#isDefault')
cy.get('#default-cluster-8')
.should('be.visible')
.and('contain', 'Non-Default')
.and('have.css', 'background-color', 'rgb(28, 41, 58)');
.and('have.css', 'background-color', 'rgb(93, 95, 97)');
cy.get('.clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-8');
cy.get('#cluster-name-8').should('be.visible').and('contain', 'cluster-8');
cy.get('.css-m4gmz7 > .MuiTypography-root')
cy.get('#cluster-description-8')
.should('be.visible')
.and(
'contain',
@ -266,9 +222,7 @@ describe('Clusters', () => {
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('.clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-8');
cy.get('#cluster-name-8').should('be.visible').and('contain', 'cluster-8');
// Check the current page number.
cy.get('#clusterPagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
@ -281,21 +235,48 @@ describe('Clusters', () => {
// Check if the page number has been reset.
cy.get('#clusterPagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('.clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-8');
cy.get('#cluster-name-8').should('be.visible').and('contain', 'cluster-8');
});
it('when returning to the previous page, pagination and results remain unchanged', () => {
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// Go to the next page.
cy.get(':nth-child(7) > .MuiButtonBase-root').click();
cy.get('.clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-8');
// Check if the page number has been reset.
cy.get('#clusterPagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('#cluster-name-23').should('have.text', 'cluster-23');
// Go to the next page.
cy.get(':nth-child(7) > .MuiButtonBase-root').click();
cy.get('#clusterPagination > .MuiPagination-ul .Mui-selected').should('have.text', '3');
cy.get('#cluster-name-13').should('have.text', 'cluster-13');
cy.get('#cluster-name-23').should('not.exist');
// Go to the next page.
cy.get(':nth-child(7) > .MuiButtonBase-root').click();
cy.get('#clusterPagination > .MuiPagination-ul .Mui-selected').should('have.text', '4');
cy.get('#cluster-name-25').should('have.text', 'cluster-25');
cy.get('#cluster-name-13').should('not.exist');
// Go to the last page.
cy.get(':nth-child(7) > .MuiButtonBase-root').click();
cy.get('#clusterPagination > .MuiPagination-ul .Mui-selected').should('have.text', '5');
cy.get('#clustersCard').children().should('have.length', 1);
cy.get('#cluster-name-37').should('have.text', 'cluster-37');
// Go to 2 page.
cy.get('.MuiPagination-ul > :nth-child(3)').click();
cy.get('#cluster-name-8').should('be.visible').and('contain', 'cluster-8');
// Go to show cluster page.
cy.get('.clusters_creatTimeContainer__k6XfL > .MuiButtonBase-root').click();
cy.get('#cluster-name-8').click();
// Then I see that the current page is the show cluster.
cy.url().should('include', '/clusters/8');
@ -306,9 +287,7 @@ describe('Clusters', () => {
// Check the current page number.
cy.get('#clusterPagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('.clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-8');
cy.get('#cluster-name-8').should('be.visible').and('contain', 'cluster-8');
});
});
@ -341,56 +320,30 @@ describe('Clusters', () => {
it('show error message', () => {
// Show error message.
cy.get('.css-1rr4qq7 > .MuiSnackbar-root > .MuiPaper-root > .MuiAlert-message')
.should('be.visible')
.and('contain', 'Failed to fetch');
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.css-1rr4qq7 > .MuiSnackbar-root > .MuiPaper-root > .MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.css-1rr4qq7 > .MuiSnackbar-root > .MuiPaper-root > .MuiAlert-message').should('not.exist');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('display the total number of clusters and the default number', () => {
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '0');
cy.get('#total-clusters').should('be.visible').and('contain', '0');
cy.get('#clusterPagination > .MuiPagination-ul').should('not.exist');
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '0');
cy.get('#default-clusters').should('be.visible').and('contain', '0');
});
it('display the total number of schedulers and the active number', () => {
cy.get(
':nth-child(2) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '0');
cy.get('#total-schedulers').should('be.visible').and('contain', '0');
cy.get(
':nth-child(2) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '0');
cy.get('#default-clusters').should('be.visible').and('contain', '0');
});
it('display the total number of seed peers and the active number', () => {
cy.get(
'.clusters_seedPeerContainer__u4Xst > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '0');
cy.get('#total-seed-peer').should('be.visible').and('contain', '0');
cy.get(
'.clusters_seedPeerContainer__u4Xst > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '0');
cy.get('#active-seed-peer').should('be.visible').and('contain', '0');
});
it('cluster card should present an empty status', () => {
@ -404,81 +357,123 @@ describe('Clusters', () => {
describe('search', () => {
it('should search cluster name', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/clusters?name=cluster-1&page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: searchCluster,
});
},
);
cy.get('#free-solo-demo').type('cluster-1{enter}');
cy.get('#search-wrapper').type('cluster-10');
// Then I see that the current page is the /clusters/1?search=cluster-10!
cy.url().should('include', '/clusters?search=cluster-10');
cy.get('#clusterPagination > .MuiPagination-ul').should('not.exist');
cy.get('#clustersCard').should('exist').children().should('have.length', 1);
cy.get('#cluster-name-10').should('have.text', 'cluster-10');
// Clear search box.
cy.get('#free-solo-demo').clear();
cy.get('#search-wrapper').clear();
// If the search is empty, all clusters will be displayed.
cy.get('#free-solo-demo').type('{enter}');
cy.get('#search-wrapper').type('{enter}');
cy.get('#clusterPagination > .MuiPagination-ul').should('exist');
// Check number of pagination.
cy.get('#clusterPagination > .MuiPagination-ul').children().should('have.length', 7);
cy.get('#cluster-name-1').should('be.visible').and('contain', 'cluster-1');
cy.get('#cluster-name-22').should('be.visible').and('contain', 'cluster-22');
});
it('should search cluster name and show no results', () => {
cy.get('#search-wrapper').type('cluster-47');
// No clusters card.
cy.get('#clustersCard').should('not.exist');
// Pagination has been hidden.
cy.get('#clusterPagination > .MuiPagination-ul').should('not.exist');
cy.get('#no-clusters').should('be.visible');
cy.get('#no-results').should('contain', '"cluster-47"');
});
it('should be queried based on the query string', () => {
cy.visit('/clusters/?search=cluster-2');
// The content of the input box is displayed as cluster-2.
cy.get('#search-wrapper').should('have.value', 'cluster-2');
cy.get('#clustersCard').should('exist').children().should('have.length', 9);
});
it('should search for cluster name and switch paging', () => {
cy.get('#search-wrapper').type('cluster');
// Go to 2 page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('#clustersCard').should('exist').children().should('have.length', 9);
// Check the URL.
cy.url().should('include', '/clusters?search=cluster&page=2');
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(6) > .MuiButtonBase-root').click();
cy.get('#clustersCard').should('exist').children().should('have.length', 1);
// Check the URL.
cy.url().should('include', '/clusters?search=cluster&page=5');
// Go to the first page.
cy.get('.MuiPagination-ul > :nth-child(2) > .MuiButtonBase-root').click();
// Check the URL.
cy.url().should('include', '/clusters?search=cluster');
// Go to 2 page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('#search-wrapper').type('-2');
// Check number of pagination.
cy.get('#clusterPagination > .MuiPagination-ul').children().should('have.length', 4);
cy.get(':nth-child(1) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-1');
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
cy.get(':nth-child(8) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-2');
});
it('should search cluster name and show no results', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/clusters?name=cluster-16&page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: null,
});
},
);
cy.get('#free-solo-demo').type('cluster-16{enter}');
// No clusters card.
cy.get('#clusters').should('not.exist');
// Pagination has been hidden.
cy.get('#clusterPagination > .MuiPagination-ul').should('not.exist');
});
it('should search cluster name , show no results, and show error', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/clusters?name=cluster-1&page=1&per_page=10000000',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.get('#free-solo-demo').clear();
cy.get('#free-solo-demo').type('cluster-1{enter}');
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Check the URL.
cy.url().should('include', '/clusters?search=cluster-2&page=2');
});
});
it('call onChange when changing page size', () => {
// The viewport will now be changed to 1440px x 1080px
cy.viewport(1440, 1080);
// Check if the number of page size is 9.
cy.get('#clustersCard').should('exist').children().should('have.length', 9);
// The viewport will now be changed to 1600px x 1080px
cy.viewport(1600, 1080);
cy.wait(1000);
// Check if the number of page size is 9.
cy.get('#clustersCard').should('exist').children().should('have.length', 9);
// The viewport will now be changed to 1920px x 1080px
cy.viewport(1920, 1080);
cy.wait(1000);
// Check if the number of page size is 12.
cy.get('#clustersCard').should('exist').children().should('have.length', 12);
// The viewport will now be changed to 2048px x 1080px
cy.viewport(2048, 1080);
cy.wait(1000);
// Check if the number of page size is 12.
cy.get('#clustersCard').should('exist').children().should('have.length', 12);
// The viewport will now be changed to 2560px x 1080px
cy.viewport(2560, 1080);
cy.wait(1000);
// Check if the number of page size is 15.
cy.get('#clustersCard').should('exist').children().should('have.length', 15);
});
});

View File

@ -1,6 +1,7 @@
import clusters from '../../fixtures/clusters/clusters.json';
import seedPeers from '../../fixtures/seed-peers/seed-peers.json';
import schedulers from '../../fixtures/schedulers/schedulers.json';
import createClusters from '../../fixtures/clusters/create-clusters.json';
import createCluster from '../../fixtures/clusters/create-cluster.json';
import _ from 'lodash';
@ -52,18 +53,10 @@ describe('Create cluster', () => {
cy.visit('/clusters');
// Show number of cluster.
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '11');
cy.get('#total-clusters').should('be.visible').and('contain', '37');
// Show number of cluster default.
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '7');
cy.get('#default-clusters').should('be.visible').and('contain', '13');
// Click the `ADD CLUSTER` button.
cy.get('.clusters_clusterTitle__5Lhnw > .MuiButtonBase-root').click();
@ -72,25 +65,25 @@ describe('Create cluster', () => {
// Add Information.
cy.get('.PrivateSwitchBase-input').click();
cy.get('#name').type('cluster-12');
cy.get('#name').type('cluster-17');
cy.get('#description').type('Add new cluster case');
cy.get('#location').type('China|Hang|Zhou');
// Add idc.
cy.get(':nth-child(2) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('hz{enter}');
cy.get(':nth-child(2) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('sh{enter}');
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').click();
cy.get('#idc').type('hz{enter}');
cy.get('#idc').type('sh{enter}');
// Add cidrs.
cy.get('#cidrs').click();
cy.contains('li', '10.0.0.0/8').click();
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').click();
cy.get('#cidrs').click();
cy.contains('li', '172.16.0.0/12').click();
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').click();
cy.get('#cidrs').click();
cy.contains('li', '192.168.0.0/16').click();
// Add config.
cy.get(':nth-child(3) > .MuiInputBase-root').clear();
cy.get(':nth-child(3) > .MuiInputBase-root').type('10');
cy.get('#candidateParentLimit').clear();
cy.get('#candidateParentLimit').type('10');
cy.intercept(
{
@ -101,7 +94,7 @@ describe('Create cluster', () => {
req.body = '';
req.reply({
statusCode: 200,
body: [],
body: createCluster,
});
},
);
@ -110,6 +103,19 @@ describe('Create cluster', () => {
method: 'GET',
url: '/api/v1/clusters?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: createClusters,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/clusters/38',
},
(req) => {
req.reply({
statusCode: 200,
@ -122,26 +128,29 @@ describe('Create cluster', () => {
cy.get('#save').click();
// Then I see that the current page is the clusters.
cy.url().should('include', '/clusters');
cy.url().should('include', '/clusters/38');
// Displays successfully added clusters.
cy.get(':nth-child(8) > .MuiPaper-root > .clusters_clusterListContent__UwWjF > .MuiTypography-h6')
.should('be.visible')
.and('contain', 'cluster-12');
cy.get('#name').should('have.text', 'cluster-38');
cy.get('#description').should('have.text', 'Add new cluster case');
// Show Scopes.
cy.get('#location').should('have.text', 'China|Hang|Zhou');
cy.get('#idc-1').should('have.text', 'hz');
cy.get('#idc-2').should('have.text', 'sh');
cy.get('#cidrs-1').should('have.text', '10.0.0.0/8');
cy.get('#cidrs-2').should('have.text', '172.16.0.0/12');
cy.get('#cidrs-3').should('have.text', '192.168.0.0/16');
cy.get('.MuiBreadcrumbs-ol > :nth-child(1) > .MuiTypography-root').click();
// The number of clusters has been increased.
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .css-70qvj9 > .MuiTypography-root',
)
.should('be.visible')
.and('contain', '12');
cy.get('#total-clusters').should('be.visible').and('contain', '38');
// The default number of clusters has been increased.
cy.get(
':nth-child(1) > .css-q5fqw0 > .clusters_clusterContentContainer__ZxKuh > .css-zm3ms > .MuiGrid-root > .clusters_clusterBottomContentContainer__KII0M > .clusters_clusterBottomContent__k3P4u',
)
.should('be.visible')
.and('contain', '8');
cy.get('#default-clusters').should('be.visible').and('contain', '14');
});
it('cannot create cluster with existing cluster', () => {
@ -183,7 +192,7 @@ describe('Create cluster', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Conflict');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiPaper-root').should('not.exist');
cy.get('.MuiAlert-message').should('not.exist');
});
it('click the `CANCEL button', () => {
@ -210,7 +219,7 @@ describe('Create cluster', () => {
});
});
cy.get('#name').type('cluster-12{enter}');
cy.get('#name').type('cluster-17{enter}');
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'permission deny');
@ -231,7 +240,7 @@ describe('Create cluster', () => {
});
});
cy.get('#name').type('cluster-12');
cy.get('#name').type('cluster-17');
cy.get('#save').click();
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
@ -240,7 +249,7 @@ describe('Create cluster', () => {
it('try to verify information', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const name = _.times(41, () => _.sample(characters)).join('');
const description = _.times(1001, () => _.sample(characters)).join('');
const description = _.times(401, () => _.sample(characters)).join('');
// Should display message name the validation error.
cy.get('#save').click();
@ -269,7 +278,7 @@ describe('Create cluster', () => {
// Show verification error message.
cy.get('#description-helper-text')
.should('be.visible')
.and('contain', 'Fill in the characters, the length is 0-1000.');
.and('contain', 'Fill in the characters, the length is 0-400.');
cy.get('#save').click();
cy.url().should('include', '/clusters/new');
cy.get('#description').clear();
@ -301,41 +310,37 @@ describe('Create cluster', () => {
cy.get('#location-helper-text').should('not.exist');
// Should display idc the validation error message.
cy.get(':nth-child(2) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('hz');
cy.get('#idc').type('hz');
cy.get('#save').click();
cy.url().should('include', '/clusters/new');
cy.get('#idc-helper-text').should('be.visible').and('contain', `Please press ENTER to end the IDC creation.`);
cy.get(':nth-child(2) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('hz{enter}');
cy.get('#idc').type('hz{enter}');
// Verification passed.
cy.get('#idc-helper-text').should('not.exist');
// Should display cidrs the validation error message.
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(
'192.168.40.0/24',
);
cy.get('#cidrs').type('192.168.40.0/24');
cy.get('#save').click();
cy.url().should('include', '/clusters/new');
cy.get('#cidrs-helper-text').should('be.visible').and('contain', `Please press ENTER to end the CIDRs creation.`);
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(
'192.168.40.0/24{enter}',
);
cy.get('#cidrs').type('192.168.40.0/24{enter}');
// Verification passed.
cy.get('#cidrs-helper-text').should('not.exist');
// Should display cidrs the validation error message.
cy.get(':nth-child(4) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('sigma');
cy.get('#hostnames').type('sigma');
cy.get('#save').click();
cy.url().should('include', '/clusters/new');
cy.get('#hostnames-helper-text')
.should('be.visible')
.and('contain', `Please press ENTER to end the Hostnames creation.`);
cy.get(':nth-child(4) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(
'hostname{enter}',
);
cy.get(':nth-child(4) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(hostnames);
cy.get('#hostnames').type('hostname{enter}');
cy.get('#hostnames').type(hostnames);
cy.get('#hostnames-helper-text')
.should('be.visible')
@ -414,6 +419,32 @@ describe('Create cluster', () => {
// Verification passed.
cy.get('#filterParentLimit-helper-text').should('not.exist');
// Should display filter parent limit the validation error message.
cy.get('#jobRateLimit').invoke('val').should('eq', '10');
cy.get('#jobRateLimit').clear();
// Minimum validation range not reached.
cy.get('#jobRateLimit').type('0');
cy.get('#jobRateLimit-helper-text')
.should('be.visible')
.and('contain', `Fill in the number, the length is 1-1000000.`);
cy.get('#save').click();
cy.url().should('include', '/clusters/new');
cy.get('#jobRateLimit').clear();
// Maximum verification range exceeded.
cy.get('#jobRateLimit').type('1000001');
cy.get('#jobRateLimit-helper-text')
.should('be.visible')
.and('contain', `Fill in the number, the length is 1-1000000.`);
cy.get('#save').click();
cy.url().should('include', '/clusters/new');
cy.get('#jobRateLimit').clear();
cy.get('#jobRateLimit').type('100');
// Verification passed.
cy.get('#jobRateLimit-helper-text').should('not.exist');
});
});
});

View File

@ -18,30 +18,6 @@ describe('Update cluster', () => {
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/seed-peers?page=1&per_page=10000000&seed_peer_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: [],
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/schedulers?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: [],
});
},
);
cy.visit('/clusters/1/edit');
cy.viewport(1440, 1080);
@ -49,32 +25,33 @@ describe('Update cluster', () => {
it('when data is loaded', () => {
// Show cluster information.
cy.get('.MuiPaper-root > .css-0 > :nth-child(2)').should('contain', 'cluster-1');
cy.get('#name').should('contain', 'cluster-1');
cy.get('.PrivateSwitchBase-input').should('be.checked').check({ force: true });
cy.get('#default').should('be.checked').check({ force: true });
// Show scopes.
// Should display location.
cy.get('#location').should('have.value', 'China|Hang|Zhou');
cy.get(':nth-child(2) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root')
.should('contain', 'Hangzhou')
.and('contain', 'Shanghai');
// Should display idc.
cy.get('#idc-0').should('contain', 'Hangzhou');
cy.get('#idc-1').should('contain', 'Shanghai');
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root')
.should('contain', '10.0.0.0/8')
.and('contain', '192.168.0.0/16')
.and('contain', '172.16.0.0/12');
// Should display cidrs.
cy.get('#cidrs-0').should('contain', '10.0.0.0/8');
cy.get('#cidrs-1').should('contain', '192.168.0.0/16');
cy.get('#cidrs-2').should('contain', '172.16.0.0/12');
cy.get(':nth-child(4) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root')
.should('contain', 'cluster-1')
.and('contain', 'cluster-2')
.and('contain', 'cluster-3');
// Should display hostnames.
cy.get('#hostnames-0').should('contain', 'cluster-1');
cy.get('#hostnames-1').should('contain', 'cluster-2');
cy.get('#hostnames-2').should('contain', 'cluster-3');
// Show config.
cy.get('#seedPeerLoadLimit').should('have.value', 300);
cy.get('#peerLoadLimit').should('have.value', 51);
cy.get('#candidateParentLimit').should('have.value', 4);
cy.get('#filterParentLimit').should('have.value', 40);
cy.get('#jobRateLimit').should('have.value', 15);
});
it('when no data is loaded', () => {
@ -120,36 +97,31 @@ describe('Update cluster', () => {
// Show cluster information.
cy.get('.MuiPaper-outlined > .css-0 > :nth-child(1)').should('contain', '0');
cy.get('#id').should('contain', '0');
cy.get('.MuiPaper-root > .css-0 > :nth-child(2)').should('contain', '');
cy.get('#name').should('contain', '');
cy.get('.PrivateSwitchBase-input').should('not.be.checked').check({ force: false });
cy.get('#default').should('not.be.checked').check({ force: false });
// When location is empty.
// Location should be empty.
cy.get('#location').should('have.value', '');
// When idc is empty.
cy.get(':nth-child(2) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').should(
'have.value',
'',
);
// When CIDRs is empty.
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').should(
'have.value',
'',
);
// When Hostname is empty.
// IDC should be empty.
cy.get('#idc').should('have.value', '');
// CIDRs should be empty.
cy.get('#cidrs').should('have.value', '');
// Hostname should be empty.
cy.get(':nth-child(4) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').should(
'have.value',
'',
);
// Show config.
// cluster config should be empty.
cy.get('#seedPeerLoadLimit').should('have.value', 0);
cy.get('#peerLoadLimit').should('have.value', 0);
cy.get('#candidateParentLimit').should('have.value', 0);
cy.get('#filterParentLimit').should('have.value', 0);
cy.get('#jobRateLimit').should('have.value', 0);
});
it('can update cluster', () => {
@ -163,12 +135,12 @@ describe('Update cluster', () => {
cy.visit('/clusters/1');
// Click update cluster button.
cy.get('.css-bbra84-MuiButtonBase-root-MuiButton-root').click();
cy.get('#update').click();
// Show cluster name.
cy.get('.MuiPaper-root > .css-0 > :nth-child(2)').should('be.visible').and('contain', 'cluster-1');
cy.get('#name').should('be.visible').and('contain', 'cluster-1');
cy.get('.PrivateSwitchBase-input').click();
cy.get('#default').click();
// Update cluster description.
cy.get('#description').clear();
@ -178,13 +150,9 @@ describe('Update cluster', () => {
cy.get('#location').clear();
cy.get('#location').type('China|Shang|Hai');
cy.get(':nth-child(2) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root')
.type('{selectall}')
.type('{backspace}');
cy.get('#idc').type('{selectall}').type('{backspace}');
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(
'192.168.20.2{enter}',
);
cy.get('#cidrs').type('192.168.20.2{enter}');
// Update cluster Config.
cy.get('#seedPeerLoadLimit').clear();
@ -199,6 +167,9 @@ describe('Update cluster', () => {
cy.get('#filterParentLimit').clear();
cy.get('#filterParentLimit').type('50');
cy.get('#jobRateLimit').clear();
cy.get('#jobRateLimit').type('20');
// Click save button.
cy.get('#save').click();
@ -218,16 +189,10 @@ describe('Update cluster', () => {
// Then I see that the current page is the clusters/1!
cy.url().should('include', '/clusters/1');
cy.get('.show_container__osP4U > .MuiTypography-root').scrollIntoView();
// Check whether the cluster information is updated successfully.
cy.get('.information_clusterContainer__l8H8p > :nth-child(3) > .MuiTypography-subtitle1')
.should('be.visible')
.and('contain', 'update cluster-1');
cy.get('#description').should('be.visible').and('contain', 'update cluster-1');
cy.get('.information_clusterContainer__l8H8p > :nth-child(5) > .MuiTypography-subtitle1')
.should('be.visible')
.and('contain', 'No');
cy.get('#default').should('be.visible').and('contain', 'No');
cy.get('#cidrs').click();
@ -235,13 +200,17 @@ describe('Update cluster', () => {
cy.get('body').click('topLeft');
cy.get('.MuiPaper-root > :nth-child(1) > .MuiTypography-body1')
.scrollIntoView()
.should('be.visible')
.and('contain', '400');
cy.get('#seed-peer-load-limit').scrollIntoView().should('be.visible').and('contain', '400');
cy.get('#job-rate-limit').should('be.visible').and('contain', '20');
});
it('click the `CANCEL button', () => {
cy.url().should('include', '/clusters/1/edit');
cy.get('[data-testid="isloading"]').should('be.exist');
cy.wait(1000);
cy.get('#cancel').click();
// Then I see that the current page is the clusters/1!
@ -265,7 +234,7 @@ describe('Update cluster', () => {
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'permission deny');
// Close error message.
cy.get(':nth-child(1) > .MuiSnackbar-root > .MuiPaper-root > .MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
@ -283,9 +252,10 @@ describe('Update cluster', () => {
},
);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
cy.get('error-message').should('not.exist');
});
it('update cluster API error response', () => {
@ -300,6 +270,8 @@ describe('Update cluster', () => {
cy.get('#description').type('update cluster-1');
cy.get('#save').click();
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
});
@ -307,7 +279,7 @@ describe('Update cluster', () => {
describe('cannot update cluster with invalid attributes', () => {
it('try to verify information', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const description = _.times(1001, () => _.sample(characters)).join('');
const description = _.times(401, () => _.sample(characters)).join('');
cy.get('#description').clear();
cy.get('#description').type(description);
@ -315,7 +287,7 @@ describe('Update cluster', () => {
// Show verification error message.
cy.get('#description-helper-text')
.should('be.visible')
.and('contain', 'Fill in the characters, the length is 0-1000.');
.and('contain', 'Fill in the characters, the length is 0-400.');
// Submit form when validation fails.
cy.get('#save').click();
@ -348,31 +320,28 @@ describe('Update cluster', () => {
cy.get('#location-helper-text').should('not.exist');
// Should display idc the validation error message.
cy.get(':nth-child(2) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('hz');
cy.get('#idc').type('hz');
cy.get('#save').click();
cy.url().should('include', '/clusters/1/edit');
cy.get('#idc-helper-text').should('be.visible').and('contain', `Please press ENTER to end the IDC creation.`);
// Verification passed.
cy.get(':nth-child(2) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('hz{enter}');
cy.get('#idc').type('hz{enter}');
cy.get('#idc-helper-text').should('not.exist');
// Should display cidrs the validation error message.
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(
'192.168.40.0/24',
);
cy.get('#cidrs').type('192.168.40.0/24');
cy.get('#save').click();
cy.url().should('include', '/clusters/1/edit');
// Show verification error message.
cy.get('#cidrs-helper-text').should('be.visible').and('contain', `Please press ENTER to end the CIDRs creation.`);
cy.get(':nth-child(3) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(
'192.168.40.0/24{enter}',
);
cy.get('#cidrs').type('192.168.40.0/24{enter}');
cy.get('#cidrs-helper-text').should('not.exist');
// Should display hostnames the validation error message.
cy.get(':nth-child(4) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('cluster-2');
cy.get('#hostnames').type('cluster-2');
cy.get('#save').click();
cy.url().should('include', '/clusters/1/edit');
@ -382,9 +351,7 @@ describe('Update cluster', () => {
.should('be.visible')
.and('contain', `Please press ENTER to end the Hostnames creation.`);
cy.get(':nth-child(4) > .MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(
'cluster-1{enter}',
);
cy.get('#hostnames').type('cluster-1{enter}');
cy.get('#hostnames-helper-text').should('not.exist');
});
@ -468,6 +435,32 @@ describe('Update cluster', () => {
// Verification passed.
cy.get('#filterParentLimit-helper-text').should('not.exist');
// Should display Job Rate Limit(requests per seconds) the validation error message.
cy.get('#jobRateLimit').invoke('val').should('eq', '15');
cy.get('#jobRateLimit').clear();
// Minimum validation range not reached.
cy.get('#jobRateLimit').type('0');
cy.get('#jobRateLimit-helper-text')
.should('be.visible')
.and('contain', `Fill in the number, the length is 1-1000000.`);
cy.get('#save').click();
cy.url().should('include', '/clusters/1/edit');
cy.get('#jobRateLimit').clear();
// Maximum verification range exceeded.
cy.get('#jobRateLimit').type('1000001');
cy.get('#jobRateLimit-helper-text')
.should('be.visible')
.and('contain', `Fill in the number, the length is 1-1000000.`);
cy.get('#save').click();
cy.url().should('include', '/clusters/1/edit');
cy.get('#jobRateLimit').clear();
cy.get('#jobRateLimit').type('100');
// Verification passed.
cy.get('#jobRateLimit-helper-text').should('not.exist');
});
});
});

View File

@ -27,7 +27,7 @@ describe('Create token', () => {
cy.visit('/developer/personal-access-tokens');
// Click the `ADD PERSONAL ACCESS TOKENS` button.
cy.get('.css-1qdyvok > .MuiButtonBase-root').click();
cy.get('#new-tokens-button').click();
// Then I see that the current page is the developer/personal-access-tokens/new!
cy.url().should('include', '/developer/personal-access-tokens/new');
@ -82,10 +82,10 @@ describe('Create token', () => {
cy.url().should('include', '/developer/personal-access-tokens');
// After creation is completed, the copyable token will be displayed.
cy.get('.css-1s0a73l').should('exist');
cy.get('#copy-column').should('exist');
// Click the Copy icon button.
cy.get('.css-1s0a73l > .MuiButtonBase-root').click();
cy.get('#copy-button').click();
// The copy icon is no longer displayed.
cy.get('#copy').should('not.exist');
@ -113,11 +113,11 @@ describe('Create token', () => {
// Refresh page.
cy.reload().then(() => {
cy.wait(2000);
cy.wait(1000);
});
// When you click refresh, the replication token will not be displayed again for your security.
cy.get('.css-1s0a73l').should('not.exist');
cy.get('#copy-column').should('not.exist');
});
it('cannot create token with existing token', () => {
@ -140,7 +140,7 @@ describe('Create token', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Conflict');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiPaper-root').should('not.exist');
cy.get('.MuiAlert-message').should('not.exist');
});
it('click the `CANCEL button', () => {
@ -209,7 +209,7 @@ describe('Create token', () => {
it('cannot create token with invalid attributes', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const name = _.times(101, () => _.sample(characters)).join('');
const description = _.times(1001, () => _.sample(characters)).join('');
const description = _.times(401, () => _.sample(characters)).join('');
// Should name message describing the validation error.
cy.get('#name').type(name);
@ -232,37 +232,16 @@ describe('Create token', () => {
cy.get('#bio').type(description);
// Show verification error message.
cy.get('#bio-helper-text').should('exist').and('have.text', 'Fill in the characters, the length is 0-1000.');
cy.get('#bio-helper-text').should('exist').and('have.text', 'Fill in the characters, the length is 0-400.');
cy.get('#save').click();
// Then I see that the current page is the developer/personal-access-tokens/new!
cy.url().should('include', '/developer/personal-access-tokens/new');
cy.get(
':nth-child(1) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).click();
// Check if the preheat checkbox is checked.
cy.get(':nth-child(1) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input')
.should('be.checked')
.check({ force: true });
cy.get(
':nth-child(2) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).click();
// Check if the job checkbox is checked.
cy.get(':nth-child(2) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input')
.should('be.checked')
.check({ force: true });
cy.get(
':nth-child(3) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).click();
cy.get('#job').should('be.checked').check({ force: true });
// Check if the cluster checkbox is checked.
cy.get(':nth-child(3) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input')
.should('be.checked')
.check({ force: true });
cy.get('#cluster').should('be.checked').check({ force: true });
});
});

View File

@ -24,49 +24,30 @@ describe('Tokens', () => {
});
it('when data is loaded', () => {
cy.get('.css-1qdyvok > .MuiTypography-root').should('have.text', 'Personal access tokens');
cy.get('.MuiList-root > :nth-child(2) > .MuiButtonBase-root > .MuiTypography-root').click();
// Whether the style selected by menu is Personal access tokens.
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').should('have.class', 'Mui-selected');
cy.get('[data-testid="isloading"]').should('be.exist');
cy.get('#token-title').should('have.text', 'Personal access tokens');
// Show token name.
cy.get('#root-11').should('be.visible').and('have.text', 'root-11');
// Show user name.
cy.get(':nth-child(1) > .css-fyy1jt > :nth-child(1) > .MuiBox-root > .MuiTypography-body2').should(
'contain',
'root',
);
cy.get('#user-name-11').should('contain', 'root');
// Show Expiration.
cy.get(':nth-child(1) > .css-fyy1jt > :nth-child(1) > .css-70qvj9 > .css-189ppmh-MuiTypography-root')
.should('be.visible')
.and('have.text', 'Mon, Dec 11 2023.');
cy.get('#expired-at-11').should('be.visible').and('have.text', 'Mon, Dec 11 2023.');
// Show token information.
cy.get('#root-9').should('be.visible').and('have.text', 'root-9');
cy.get(':nth-child(3) > .css-fyy1jt > :nth-child(1) > .css-fu0n4a > .MuiTypography-body2').should(
'contain',
'jack',
);
cy.get('#user-name-9').should('contain', 'jack');
cy.get(':nth-child(3) > .css-fyy1jt > :nth-child(1) > .css-70qvj9 > .css-189ppmh-MuiTypography-root')
.should('be.visible')
.and('have.text', 'Thu, Dec 1 2033.');
cy.get('#expired-at-9').should('be.visible').and('have.text', 'Thu, Dec 1 2033.');
cy.get('#root-4').should('be.visible').and('have.text', 'root-4');
cy.get(':nth-child(8) > .css-fyy1jt > :nth-child(1) > .css-fu0n4a > .MuiTypography-body2').should(
'contain',
'lucy',
);
cy.get('#user-name-3').should('contain', 'lucy');
cy.get(':nth-child(8) > .css-fyy1jt > :nth-child(1) > .css-70qvj9 > .css-189ppmh-MuiTypography-root')
.should('be.visible')
.and('have.text', 'Sun, Feb 11 2024.');
cy.get('#expired-at-4').should('be.visible').and('have.text', 'Sun, Feb 11 2024.');
});
it('when no data is loaded', () => {
@ -83,7 +64,7 @@ describe('Tokens', () => {
},
);
cy.get('.MuiPaper-root').should('be.visible').and('have.text', `You don't have any tokens.`);
cy.get('#no-tokens').should('be.visible').and('have.text', `You don't have any tokens.`);
});
it('should handle API error response', () => {
@ -111,7 +92,7 @@ describe('Tokens', () => {
cy.get('#tokens-list').should('not.exist');
// Show You don't have any preheat tokens.
cy.get('.MuiPaper-root').should('be.visible').and('have.text', `You don't have any tokens.`);
cy.get('#no-tokens').should('be.visible').and('have.text', `You don't have any tokens.`);
});
describe('pagination', () => {
@ -134,9 +115,9 @@ describe('Tokens', () => {
cy.get('#tokens-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
// Show token name.
cy.get('.MuiTypography-inherit').should('be.visible').and('have.text', 'root-1');
cy.get('#root-1').should('be.visible').and('have.text', 'root-1');
cy.get('span.css-189ppmh-MuiTypography-root').should('be.visible').and('have.text', 'Thu, Dec 1 2033.');
cy.get('#expired-at-1').should('be.visible').and('have.text', 'Thu, Dec 1 2033.');
});
it('when you click refresh, the paginated results and page numbers remain unchanged.', () => {
@ -189,11 +170,11 @@ describe('Tokens', () => {
cy.get('#root-1').should('be.visible').and('have.text', 'root-1');
// Click DELETE button.
cy.get('.css-fyy1jt > :nth-child(2) > .MuiButtonBase-root').click();
cy.get('#delete-token-1').click();
// Click cancel button.
cy.get('#cancel').click();
cy.get('.css-fyy1jt > :nth-child(2) > .MuiButtonBase-root').click();
cy.get('#delete-token-1').click();
cy.intercept(
{
@ -212,20 +193,27 @@ describe('Tokens', () => {
url: '/api/v1/personal-access-tokens?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: deleteToken,
req.reply((res) => {
res.setDelay(1000);
res.send({
statusCode: 200,
body: deleteToken,
});
});
},
).as('delete');
);
// Confirm delete.
cy.get('#delete').click();
cy.wait('@delete');
// Show isloading.
cy.get('[data-testid="isloading"]').should('be.exist');
// Delete success message.
cy.get('.MuiAlert-message').should('have.text', 'Submission successful!');
cy.get('[data-testid="isloading"]').should('not.exist');
// Check if the token exists.
cy.get('#root-1').should('not.exist');
@ -240,7 +228,7 @@ describe('Tokens', () => {
// Displays the name of the token that needs to be deleted.
cy.get('#root-11').should('be.visible').and('have.text', 'root-11');
cy.get(':nth-child(1) > .css-fyy1jt > :nth-child(2) > #delete-token').click();
cy.get('#delete-token-11').click();
cy.intercept(
{
@ -282,7 +270,7 @@ describe('Tokens', () => {
it('try to delete token using guest user', () => {
cy.guestSignin();
cy.get(':nth-child(1) > .css-fyy1jt > :nth-child(2) > #delete-token').click();
cy.get('#delete-token-11').click();
cy.intercept(
{
@ -306,7 +294,7 @@ describe('Tokens', () => {
it('try to delete token using guest user', () => {
cy.guestSignin();
cy.get(':nth-child(1) > .css-fyy1jt > :nth-child(2) > #delete-token').click();
cy.get('#delete-token-11').click();
cy.intercept(
{

View File

@ -38,28 +38,19 @@ describe('Update token', () => {
it('when data is loaded', () => {
// Check the token ID.
cy.get('.MuiPaper-root > .css-0 > :nth-child(1)').should('be.visible').and('contain', '11');
cy.get('#id').should('be.visible').and('contain', '11');
// Check the token name.
cy.get('.MuiPaper-root > .css-0 > :nth-child(2)').should('be.visible').and('contain', 'root-11');
cy.get('#name').should('be.visible').and('contain', 'root-11');
// Check the token description.
cy.get('#bio').should('have.value', 'root-11 token, used to control of cluster');
// Check that the preheat checkbox.
cy.get(
':nth-child(1) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).should('not.be.checked');
// Check that the job checkbox.
cy.get(
':nth-child(2) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).should('not.be.checked');
cy.get('#job').should('not.be.checked');
// Check that the cluster checkbox.
cy.get(':nth-child(3) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input')
.should('be.checked')
.check({ force: true });
cy.get('#cluster').should('be.checked').check({ force: true });
});
it('when no data is loaded', () => {
@ -77,28 +68,19 @@ describe('Update token', () => {
);
// Check the token ID.
cy.get('.MuiPaper-root > .css-0 > :nth-child(1)').should('be.visible').and('not.contain', '11');
cy.get('#id').should('have.text', '-');
// Check the token name.
cy.get('.MuiPaper-root > .css-0 > :nth-child(2)').should('be.visible').and('not.contain', 'root-11');
cy.get('#name').should('have.text', '-');
// Check the token description.
cy.get('#bio').should('have.value', '');
// Check that the preheat checkbox.
cy.get(
':nth-child(1) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).should('not.be.checked');
// Check that the job checkbox.
cy.get(
':nth-child(2) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).should('not.be.checked');
cy.get('#job').should('not.be.checked');
// Check that the cluster checkbox.
cy.get(
':nth-child(3) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).should('not.be.checked');
cy.get('#cluster').should('not.be.checked');
});
it('can update token', () => {
@ -133,7 +115,7 @@ describe('Update token', () => {
// Then I see that the current page is the developer/personal-access-tokens/11!
cy.url().should('include', '/developer/personal-access-tokens/11');
cy.get('.MuiPaper-root > .css-0 > :nth-child(2)').should('be.visible').and('contain', 'root-11');
cy.get('#name').should('be.visible').and('contain', 'root-11');
// Update token description.
cy.get('#bio').clear();
@ -143,23 +125,13 @@ describe('Update token', () => {
cy.get('#demo-simple-select').click();
cy.get('[data-value="3650"]').click();
cy.get(
':nth-child(1) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).click();
// Check if the preheat checkbox is checked.
cy.get(':nth-child(1) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input')
.should('be.checked')
.check({ force: true });
cy.get(
':nth-child(3) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).click();
// Check if the job checkbox is checked.
cy.get('#job').click();
cy.get('#job').should('be.checked').check({ force: true });
// Check if the cluster checkbox is checked.
cy.get(
':nth-child(3) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input',
).should('not.be.checked');
cy.get('#cluster').click();
cy.get('#cluster').should('not.be.checked');
cy.intercept(
{
@ -177,18 +149,16 @@ describe('Update token', () => {
cy.get('#save').click();
// Check for updated expiration date.
cy.get(':nth-child(1) > .css-fyy1jt > :nth-child(1) > .css-70qvj9 > .css-189ppmh-MuiTypography-root')
.should('be.visible')
.and('have.text', 'Sat, Dec 3 2033.');
cy.get('#expired-at-11').should('be.visible').and('have.text', 'Sat, Dec 3 2033.');
// Then I see that the current page is the developer/personal-access-tokens!
cy.url().should('include', '/developer/personal-access-tokens');
// After update is completed, the copyable token will be displayed.
cy.get('.css-1s0a73l').should('exist');
cy.get('#copy-column').should('exist');
// Click the Copy icon button.
cy.get('.css-1s0a73l > .MuiButtonBase-root').click();
cy.get('#copy-button').click();
// Let's check the copied text.
cy.window()
@ -263,7 +233,7 @@ describe('Update token', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
cy.get('.MuiPaper-root > .css-0 > :nth-child(1)').should('be.visible').and('contain', '0');
cy.get('#id').should('be.visible').and('contain', '-');
});
it('update token API error response', () => {
@ -292,7 +262,7 @@ describe('Update token', () => {
it('cannot create token with invalid attributes', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const description = _.times(1001, () => _.sample(characters)).join('');
const description = _.times(401, () => _.sample(characters)).join('');
// Submit form when validation fails.
cy.get('#save').click();
@ -308,7 +278,7 @@ describe('Update token', () => {
cy.get('#bio').type(description);
// Show verification error message.
cy.get('#bio-helper-text').should('exist').and('have.text', 'Fill in the characters, the length is 0-1000.');
cy.get('#bio-helper-text').should('exist').and('have.text', 'Fill in the characters, the length is 0-400.');
cy.get('#save').click();
// Then I see that the current page is the developer/personal-access-tokens/new!
@ -320,19 +290,10 @@ describe('Update token', () => {
// Verification passed.
cy.get('#bio-helper-text').should('not.exist');
// Check that the preheat checkbox.
cy.get(':nth-child(1) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input')
.should('not.be.checked')
.check({ force: true });
// Check that the job checkbox.
cy.get(':nth-child(2) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input')
.should('not.be.checked')
.check({ force: true });
cy.get('#job').should('not.be.checked').check({ force: true });
// Check that the cluster checkbox.
cy.get(':nth-child(3) > .MuiBox-root > .MuiFormControlLabel-root > .MuiButtonBase-root > .PrivateSwitchBase-input')
.should('be.checked')
.check({ force: true });
cy.get('#cluster').should('be.checked').check({ force: true });
});
});

262
cypress/e2e/gc/audit.cy.ts Normal file
View File

@ -0,0 +1,262 @@
import config from '../../fixtures/gc/config.json';
import history from '../../fixtures/gc/history.json';
import executeGC from '../../fixtures/gc/execute-gc.json';
import updateConfig from '../../fixtures/gc/update-config.json';
describe('audit', () => {
beforeEach(() => {
cy.signin();
cy.intercept(
{
method: 'GET',
url: '/api/v1/configs?page=1&per_page=10000000',
},
(req) => {
req.reply((res: any) => {
res.send(200, config);
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10000000&type=gc',
},
(req) => {
req.reply((res: any) => {
res.send(200, history);
});
},
);
cy.viewport(1440, 1080);
cy.visit('/gc/audit');
});
it('when data is loaded', () => {
// Show audit ttl.
cy.get('#audit-ttl').should('have.text', '3 days');
// Show gc history.
cy.get('#history').should('have.text', '11');
cy.get('#pagination').should('exist');
// Display gc history information.
cy.get('#trigger-119').should('have.text', 'Manual');
cy.get('#ttl-119').should('have.text', '2 days');
// Go to next page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('#id-97').should('have.text', 97);
});
it('when no data is loaded', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/configs?page=1&per_page=10000000',
},
(req) => {
req.reply({ statusCode: 200, body: [] });
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10000000&type=gc',
},
(req) => {
req.reply({ statusCode: 200, body: [] });
},
);
cy.get('#audit-ttl').should('have.text', '-');
cy.get('#history').should('have.text', '0');
cy.get('#last-completed').should('have.text', '-');
cy.get('#pagination').should('not.exist');
// no history.
cy.get('#no-history').should('have.text', `You don't have GC history.`);
});
it('can execute GC', () => {
cy.get('#execute-gc').click();
cy.get('#execute').should('exist');
// Click cancel button.
cy.get('#cancel-execute').click();
cy.get('#execute').should('not.exist');
cy.get('#execute-gc').click();
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
async (req) => {
await new Promise((resolve) => setTimeout(resolve, 2000));
req.reply({
statusCode: 200,
body: executeGC,
});
},
);
// Click execute button.
cy.get('#save-execute').click();
cy.get('#execute-loading').should('exist');
cy.wait(1000);
cy.get('#success-execute-gc').should('exist');
// Show number of recycled audit log.
cy.get('.MuiAlert-message').should('have.text', 'You have successfully recycled 10 audit logs!');
cy.get('#close-execut-icon').click();
cy.get('#execute').should('not.exist');
});
it('can not execute GC', () => {
cy.get('#execute-gc').click();
cy.get('#execute').should('exist');
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
async (req) => {
req.reply({
forceNetworkError: true,
});
},
);
// Click execute button.
cy.get('#save-execute').click();
cy.get('#execute-error').should('exist');
});
it('should handle API error response', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/configs?page=1&per_page=10000000',
},
(req) => {
req.reply({ forceNetworkError: true });
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10000000&type=gc',
},
(req) => {
req.reply({ forceNetworkError: true });
},
);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('can update ttl', () => {
cy.get('#audit-ttl').should('have.text', '3 days');
cy.get('#update').click();
cy.get('#audit-ttl-input').clear();
cy.get('#audit-ttl-input').type('100');
cy.get('#ttl-error').should(
'have.text',
'Fill in the number, and the time value must be greater than 0 and less than 30 days.',
);
cy.get('#audit-unit').click();
cy.get('[data-value="hours"]').click();
cy.get('#audit-ttl-input').clear();
cy.get('#audit-ttl-input').type('2000');
// Shou error.
cy.get('#ttl-error').should('have.text', 'Fill in the number, the length is 1-1000.');
cy.get('#audit-ttl-input').clear();
cy.get('#audit-ttl-input').type('1');
cy.get('#audit-ttl-input').clear();
cy.get('#audit-ttl-input').type('1');
cy.intercept(
{
method: 'PATCH',
url: '/api/v1/configs/1',
},
async (req) => {
req.reply({
statusCode: 200,
body: {},
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/configs?page=1&per_page=10000000',
},
(req) => {
req.reply((res: any) => {
res.send(200, updateConfig);
});
},
);
cy.get('#save-ttl').click();
cy.get('.MuiAlert-message').should('have.text', 'Submission successful!');
cy.get('#audit-ttl').should('have.text', '21 days');
});
it('can no update ttl', () => {
cy.get('#audit-ttl').should('have.text', '3 days');
cy.get('#update').click();
cy.get('#audit-ttl-input').clear();
cy.get('#audit-ttl-input').type('1');
cy.intercept(
{
method: 'PATCH',
url: '/api/v1/configs/1',
},
async (req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.get('#save-ttl').click();
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
});

259
cypress/e2e/gc/job.cy.ts Normal file
View File

@ -0,0 +1,259 @@
import config from '../../fixtures/gc/config.json';
import history from '../../fixtures/gc/history.json';
import executeGC from '../../fixtures/gc/execute-gc.json';
import updateConfig from '../../fixtures/gc/update-config.json';
describe('audit', () => {
beforeEach(() => {
cy.signin();
cy.intercept(
{
method: 'GET',
url: '/api/v1/configs?page=1&per_page=10000000',
},
(req) => {
req.reply((res: any) => {
res.send(200, config);
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10000000&type=gc',
},
(req) => {
req.reply((res: any) => {
res.send(200, history);
});
},
);
cy.viewport(1440, 1080);
cy.visit('/gc/job');
});
it('when data is loaded', () => {
// Displays the Job ttl.
cy.get('#job-ttl').should('have.text', '13 days');
// Displays the GC history.
cy.get('#history').should('have.text', '13');
cy.get('#pagination').should('exist');
// Display gc history information.
cy.get('#trigger-117').should('have.text', 'Manual');
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// Display gc history information.
cy.get('#id-101').should('have.text', 101);
cy.get('#ttl-101').should('have.text', '13 days');
});
it('when no data is loaded', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/configs?page=1&per_page=10000000',
},
(req) => {
req.reply({ statusCode: 200, body: [] });
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10000000&type=gc',
},
(req) => {
req.reply({ statusCode: 200, body: [] });
},
);
cy.get('#job-ttl').should('have.text', '-');
cy.get('#history').should('have.text', '0');
cy.get('#last-completed').should('have.text', '-');
cy.get('#pagination').should('not.exist');
// no history.
cy.get('#no-history').should('have.text', `You don't have GC history.`);
});
it('can execute GC', () => {
cy.get('#execute-gc').click();
cy.get('#execute').should('exist');
// Click cancel button.
cy.get('#cancel-execute').click();
cy.get('#execute').should('not.exist');
cy.get('#execute-gc').click();
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
async (req) => {
await new Promise((resolve) => setTimeout(resolve, 2000));
req.reply({
statusCode: 200,
body: executeGC,
});
},
);
// Click execute button.
cy.get('#save-execute').click();
cy.get('#execute-loading').should('exist');
cy.wait(1000);
cy.get('#success-execute-gc').should('exist');
// Show number of recycled audit log.
cy.get('.MuiAlert-message').should('have.text', 'You have successfully recycled 10 job!');
cy.get('#close-execut-icon').click();
cy.get('#execute').should('not.exist');
});
it('can not execute GC', () => {
cy.get('#execute-gc').click();
cy.get('#execute').should('exist');
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
async (req) => {
req.reply({
forceNetworkError: true,
});
},
);
// Click execute button.
cy.get('#save-execute').click();
cy.get('#execute-error').should('exist');
});
it('should handle API error response', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/configs?page=1&per_page=10000000',
},
(req) => {
req.reply({ forceNetworkError: true });
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10000000&type=gc',
},
(req) => {
req.reply({ forceNetworkError: true });
},
);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('can update ttl', () => {
cy.get('#job-ttl').should('have.text', '13 days');
cy.get('#update').click();
cy.get('#job-ttl-input').clear();
cy.get('#job-ttl-input').type('100');
cy.get('#ttl-error').should(
'have.text',
'Fill in the number, and the time value must be greater than 0 and less than 30 days.',
);
cy.get('#job-unit').click();
cy.get('[data-value="hours"]').click();
cy.get('#job-ttl-input').clear();
cy.get('#job-ttl-input').type('2000');
// Shou error.
cy.get('#ttl-error').should('have.text', 'Fill in the number, the length is 1-1000.');
cy.get('#job-ttl-input').clear();
cy.get('#job-ttl-input').type('1');
cy.intercept(
{
method: 'PATCH',
url: '/api/v1/configs/1',
},
async (req) => {
req.reply({
statusCode: 200,
body: {},
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/configs?page=1&per_page=10000000',
},
(req) => {
req.reply((res: any) => {
res.send(200, updateConfig);
});
},
);
cy.get('#save-ttl').click();
cy.get('.MuiAlert-message').should('have.text', 'Submission successful!');
cy.get('#job-ttl').should('have.text', '21 days');
});
it('can no update ttl', () => {
cy.get('#job-ttl').should('have.text', '13 days');
cy.get('#update').click();
cy.get('#job-ttl-input').clear();
cy.get('#job-ttl-input').type('1');
cy.intercept(
{
method: 'PATCH',
url: '/api/v1/configs/1',
},
async (req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.get('#save-ttl').click();
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
});

View File

@ -1,316 +0,0 @@
import peers from '../../../fixtures/insight/peers/peers.json';
const path = require('path');
declare const expect: Chai.ExpectStatic;
describe('Peers', () => {
beforeEach(() => {
cy.signin();
cy.intercept(
{
method: 'GET',
url: '/api/v1/peers?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: peers,
});
},
);
cy.visit('/insight/peers');
cy.viewport(1440, 1080);
});
describe('when data is loaded', () => {
it('should display the total number of peers', () => {
cy.get('.css-18k9q32 > :nth-child(1) > .MuiPaper-root').should('exist');
cy.get(
':nth-child(1) > .MuiPaper-root > .inde_navigationContent__tkUaj > div.MuiBox-root > .MuiTypography-h5',
).should('have.text', 7);
});
it('should display the total number of git version', () => {
cy.get('.css-18k9q32 > :nth-child(2) > .MuiPaper-root').should('exist');
cy.get(
':nth-child(2) > .MuiPaper-root > .inde_navigationContent__tkUaj > div.MuiBox-root > .MuiTypography-h5',
).should('have.text', 4);
});
it('should display the total number of git commit', () => {
cy.get('.css-1l3zj38 > .MuiPaper-root').should('exist');
cy.get(
'.css-1l3zj38 > .MuiPaper-root > .inde_navigationContent__tkUaj > div.MuiBox-root > .MuiTypography-h5',
).should('have.text', 5);
});
it('should display the active ratio', () => {
// Show active ratio by cluster.
cy.get('#cluster-active').should('contain', '71.43%');
// Show active ratio by git version.
cy.get('#git-version-active').should('contain', '71.43%');
cy.get('.css-1tg4d9 > .MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="cluster-1"]').click();
cy.get('#git-version-active').should('contain', '66.67%');
// Show active ratio by git commit.
cy.get('#git-commit-active').should('contain', '71.43%');
cy.get('.css-1klrv8o-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="cluster-1"]').click();
cy.get('#git-commit-active').should('contain', '66.67%');
cy.get(
'.css-1tg4d9 > .MuiBox-root > .css-1461v9t-MuiFormControl-root > .MuiInputBase-root > #states-select',
).click();
cy.get('[data-value="git-version-1"]').click();
cy.get('#git-commit-active').should('contain', '50%');
});
it('can export csv file', () => {
const downloadsFolder = Cypress.config('downloadsFolder');
// Click export csv.
cy.get('.css-1st7tpv > .MuiButtonBase-root').click();
// Click save button.
cy.get('#save').click();
// Wait two seconds to ensure the download is successful.
cy.wait(2000);
// Get download file.
const all = path.join(downloadsFolder, 'Peer Data.csv');
// Check all quantity.
cy.readFile(all).then((fileContent) => {
const lines = fileContent.split('\n');
const numEntries = lines.length - 2;
expect(numEntries).to.be.closeTo(7, 0);
});
// Click export csv.
cy.get('.css-1st7tpv > .MuiButtonBase-root').click();
cy.get('.css-nvaly6-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="cluster-1"]').click();
cy.get('#save').click();
cy.wait(2000);
const cluster = path.join(downloadsFolder, 'Peer Data.csv');
// Check whether the number of data exported based on cluster-1 is correct.
cy.readFile(cluster)
.should('exist')
.then((fileContent) => {
const numEntries = fileContent.split('\n').length - 2;
expect(numEntries).to.be.closeTo(3, 0);
});
// Click export csv.
cy.get('.css-1st7tpv > .MuiButtonBase-root').click();
cy.get('.css-nvaly6-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="cluster-1"]').click();
cy.get('.css-g74ywa-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="git-version-1"]').click();
cy.get('#save').click();
cy.wait(2000);
const gitVersion = path.join(downloadsFolder, 'Peer Data.csv');
// Check whether the number of data exported based on git-version-1 is correct.
cy.readFile(gitVersion)
.should('exist')
.then((fileContent) => {
const numEntries = fileContent.split('\n').length - 2;
expect(numEntries).to.be.closeTo(2, 0);
});
// Click export csv.
cy.get('.css-1st7tpv > .MuiButtonBase-root').click();
cy.get('.css-nvaly6-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="cluster-1"]').click();
cy.get('.css-g74ywa-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="git-version-1"]').click();
cy.get('.css-70qsx4-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="git-commit-4"]').click();
cy.get('#save').click();
cy.wait(2000);
const gitCommit = path.join(downloadsFolder, 'Peer Data.csv');
// Check whether the number of data exported based on git-commit-4 is correct.
cy.readFile(gitCommit)
.should('exist')
.then((fileContent) => {
const numEntries = fileContent.split('\n').length - 2;
expect(numEntries).to.be.closeTo(1, 0);
});
});
it('click cancel button', () => {
// Click export csv.
cy.get('.css-1st7tpv > .MuiButtonBase-root').click();
cy.get('#alert-dialog-title').should('be.visible').and('have.text', 'Export');
// Select cluster-1 in the clusters selection box.
cy.get('.css-nvaly6-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="cluster-1"]').click();
// Select git-version-1 in the git version selection box.
cy.get('.css-g74ywa-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="git-version-1"]').click();
// Select git-commit-4 in the git commit selection box.
cy.get('.css-70qsx4-MuiFormControl-root > .MuiInputBase-root > #states-select').click();
cy.get('[data-value="git-commit-4"]').click();
// Click cancel button.
cy.get('#cancel').click();
cy.get('.css-1st7tpv > .MuiButtonBase-root').click();
// Check whether the selected one is all.
cy.get('.css-nvaly6-MuiFormControl-root > .MuiInputBase-root > #states-select').should('have.text', 'All');
cy.get('.css-g74ywa-MuiFormControl-root > .MuiInputBase-root > #states-select').should('have.text', 'All');
cy.get('.css-70qsx4-MuiFormControl-root > .MuiInputBase-root > #states-select').should('have.text', 'All');
});
});
describe('when no data is loaded', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/peers?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: [],
});
},
);
});
it('should display the total number of peers', () => {
cy.get('.css-18k9q32 > :nth-child(1) > .MuiPaper-root').should('exist');
cy.get(
':nth-child(1) > .MuiPaper-root > .inde_navigationContent__tkUaj > div.MuiBox-root > .MuiTypography-h5',
).should('have.text', 0);
});
it('should display the total number of git version', () => {
cy.get('.css-18k9q32 > :nth-child(2) > .MuiPaper-root').should('exist');
cy.get(
':nth-child(2) > .MuiPaper-root > .inde_navigationContent__tkUaj > div.MuiBox-root > .MuiTypography-h5',
).should('have.text', 0);
});
it('should display the total number of git commit', () => {
cy.get('.css-1l3zj38 > .MuiPaper-root').should('exist');
cy.get(
'.css-1l3zj38 > .MuiPaper-root > .inde_navigationContent__tkUaj > div.MuiBox-root > .MuiTypography-h5',
).should('have.text', 0);
});
it('cannot display the active ratio', () => {
cy.get('#git-version-active').should('contain', '0');
cy.get('#git-version-active').should('contain', '0');
cy.get('#git-commit-active').should('contain', '0');
});
it('cannot export csv file', () => {
cy.get('.css-1st7tpv > .MuiButtonBase-root').click();
cy.get('#save').click();
// Show error message.
cy.get('.MuiAlert-message').should('have.text', 'Export failed');
});
});
describe('should handle API error response', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/peers?page=1&per_page=10000000',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.visit('/insight/peers');
});
it('should display the total number of peers', () => {
cy.get('.css-18k9q32 > :nth-child(1) > .MuiPaper-root').should('exist');
cy.get(
':nth-child(1) > .MuiPaper-root > .inde_navigationContent__tkUaj > div.MuiBox-root > .MuiTypography-h5',
).should('have.text', 0);
});
it('should display the total number of git version', () => {
cy.get('.css-18k9q32 > :nth-child(2) > .MuiPaper-root').should('exist');
cy.get(
':nth-child(2) > .MuiPaper-root > .inde_navigationContent__tkUaj > div.MuiBox-root > .MuiTypography-h5',
).should('have.text', 0);
});
it('should display the total number of git commit', () => {
cy.get('.css-1l3zj38 > .MuiPaper-root').should('exist');
cy.get(
'.css-1l3zj38 > .MuiPaper-root > .inde_navigationContent__tkUaj > div.MuiBox-root > .MuiTypography-h5',
).should('have.text', 0);
});
it('cannot display the active ratio', () => {
cy.get('#git-version-active').should('contain', '0');
cy.get('#git-version-active').should('contain', '0');
cy.get('#git-commit-active').should('contain', '0');
});
it('show error message', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('cannot export csv file', () => {
cy.get('.css-1st7tpv > .MuiButtonBase-root').click();
cy.get('#save').click();
// Show error message.
cy.get('.MuiAlert-message').should('have.text', 'Export failed');
});
});
});

View File

@ -1,6 +1,7 @@
import clusters from '../../../fixtures/clusters/clusters.json';
import preheats from '../../../fixtures/job/preheats/preheats.json';
import createPreheat from '../../../fixtures/job/preheats/create-preheat.json';
import createPreheatFile from '../../../fixtures/job/preheats/create-preheat-file.json';
import createPreheatImage from '../../../fixtures/job/preheats/create-preheat-image.json';
import _ from 'lodash';
describe('Create preheat', () => {
@ -21,7 +22,7 @@ describe('Create preheat', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10',
url: '/api/v1/jobs?page=1&per_page=10&type=preheat',
},
(req) => {
req.reply((res: any) => {
@ -37,6 +38,36 @@ describe('Create preheat', () => {
cy.viewport(1440, 1080);
});
it('can create an All Peers task with a preheat scope of 30%', () => {
// By default, there is no percentage and count.
cy.get('#count-or-percentage').should('not.exist');
// Scope select all peers.
cy.get('#select-scope').click();
cy.get('#all_peers').click();
cy.get('#all').should('have.text', `Preheat to each peer in the P2P cluster.`);
cy.get('#count-or-percentage').should('exist');
cy.get('#radio-percentage').click();
cy.get('#percentage').click(100, 10);
// Select count.
cy.get('#radio-count').click();
cy.get('#count').click();
cy.get('#count').type('50');
// Scope select all seed peers.
cy.get('#select-scope').click();
cy.get('#all_seed_peers').click();
cy.get('#all').should('have.text', `Preheat to each seed peer in the P2P cluster.`);
});
it('click the `CANCEL button', () => {
cy.get('#cancel').click();
@ -44,9 +75,9 @@ describe('Create preheat', () => {
cy.url().should('include', '/jobs/preheats');
});
it('can create preheat', () => {
it('can create preheat file', () => {
cy.visit('/jobs/preheats');
cy.get('.css-1g5t85q > .MuiButtonBase-root').click();
cy.get('#new-preheat').click();
cy.url().should('include', '/jobs/preheats/new');
@ -55,13 +86,34 @@ describe('Create preheat', () => {
cy.get('#description').type('create preheat');
// Select a cluster.
cy.get('#select-cluster').click();
cy.get('#cluster-1').check();
cy.get('#cluster').type('cluster-1{enter}');
cy.get('body').click('topLeft');
cy.get('#pieceLength').type('5');
// Select a scope.
cy.get('#select-scope').click();
cy.get('#all_seed_peers').click();
// Select a ips.
cy.get('#radio-ips').click();
cy.get('#ips').type('10.0.0.8{enter}');
// Add url.
cy.get('#url').type('https://example.com/path/to/file');
cy.get('#add-url').click();
cy.get('#url-0').type('https://example.com/path/to/file/url-1');
// Add tag.
cy.get('#tag').type('tag-1');
// Add application.
cy.get('#application').type('application-1');
cy.intercept(
{
method: 'POST',
@ -70,22 +122,20 @@ describe('Create preheat', () => {
(req) => {
req.reply({
statusCode: 200,
body: [],
body: createPreheatFile,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10',
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: createPreheatFile,
});
},
);
@ -93,16 +143,94 @@ 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('#list-12 > .css-1mlhis1').should('exist').find('#PENDING-12').should('exist');
cy.get('#list-12 > .css-1mlhis1 > .css-ux5pj > .css-mu8687 > .MuiTypography-body1').should('have.text', 12);
cy.get('#list-12 > .css-1mlhis1 > .css-18467a > .MuiChip-root').should('have.text', '2023-04-23 16:29:18');
cy.get('#list-12 > .css-1mlhis1 > .css-ux5pj > .css-mu8687 > .MuiTypography-body2').should(
'have.text',
'create preheat',
cy.get('#description').should('have.text', 'create preheat');
cy.get('#status').should('have.text', 'PENDING');
cy.get('#url-0').should('have.text', 'https://example.com/path/to/file/url-1');
cy.get('#url-1').should('have.text', 'https://example.com/path/to/file');
cy.get('#id').should('have.text', 12);
cy.get('#piece-length').should('have.text', '5 MiB');
cy.get('#scope').should('have.text', 'All Seed Peers');
cy.get('#tag').should('have.text', 'tag-1');
cy.get('#application').should('have.text', 'application-1');
});
it('can create preheat image', () => {
cy.get('#preheat-image').click();
cy.get('#description').type('create preheat');
// Select a cluster.
cy.get('#cluster').type('cluster-1{enter}');
cy.get('body').click('topLeft');
cy.get('#pieceLength').type('5');
// Select a scope.
cy.get('#select-scope').click();
cy.get('#all_seed_peers').click();
cy.get('#radio-ips').click();
cy.get('#ips').type('10.0.0.8{enter}');
// Add url.
cy.get('#url').type('https://example.com/path/to/file');
cy.get('#username').type('root');
cy.get('#password').type('password');
// Add tag.
cy.get('#tag').type('tag-1');
// Add application.
cy.get('#application').type('application-1');
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createPreheatImage,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/13',
},
(req) => {
req.reply({
statusCode: 200,
body: createPreheatImage,
});
},
);
cy.get('#save').click();
// Should show preheat details.
cy.get('#description').should('have.text', 'create preheat');
cy.get('#status').should('have.text', 'PENDING');
cy.get('#type').should('have.text', 'Image');
cy.get('#url').should('have.text', 'https://example.com/manifests/v2.1.0');
cy.get('#id').should('have.text', 13);
cy.get('#platform').should('have.text', 'Linux AMD64');
cy.get('#piece-length').should('have.text', '-');
cy.get('#scope').should('have.text', 'Single Seed Peer');
cy.get('#tag').should('have.text', 'tag-1');
cy.get('#application').should('have.text', 'application-1');
cy.get('#ips-0').should('have.text', '10.244.4.5');
cy.get('#ips-1').should('have.text', '10.244.4.3');
});
it('cannot to use cluster without scheduler for preheat', () => {
@ -119,10 +247,16 @@ describe('Create preheat', () => {
},
);
cy.get('#select-cluster').click();
cy.get('#cluster-2').check();
cy.get('#cluster').click();
cy.contains('li', 'cluster-2').click();
cy.get('body').click('topLeft');
// Select a scope.
cy.get('#select-scope').click();
cy.get('body').click('topLeft');
cy.get('#select-scope').click();
cy.get('#all_seed_peers').click();
cy.get('#url').type('https://example.com/path/to/file');
cy.get('#save').click();
@ -137,7 +271,7 @@ describe('Create preheat', () => {
it('cannot create preheat task without required attributes', () => {
cy.get('#save').click();
cy.get('#clusters-helper-text').should('be.visible').and('have.text', 'Select at least one option.');
cy.get('#cluster-helper-text').should('be.visible').and('have.text', 'Select at least one option.');
cy.get('#url-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 1-1000.');
});
@ -149,10 +283,14 @@ describe('Create preheat', () => {
cy.get('[href="/users"]').should('not.exist');
// Select a cluster.
cy.get('#select-cluster').click();
cy.get('#cluster-1').check();
cy.get('#cluster').click();
cy.contains('li', 'cluster-1').click();
cy.get('body').click('topLeft');
// Select a scope.
cy.get('#select-scope').click();
cy.get('#single_seed_peer').click();
// Add ure.
cy.get('#url').type('https://example.com/path/to/file');
@ -164,76 +302,120 @@ describe('Create preheat', () => {
(req) => {
req.reply({
statusCode: 200,
body: [],
body: createPreheatFile,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10',
},
(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);
});
},
);
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');
// Displays successfully added preheat task.
cy.get('#list-12 > .css-1mlhis1').should('exist').find('#PENDING-12').should('exist');
cy.get('#list-12 > .css-1mlhis1 > .css-ux5pj > .css-mu8687 > .MuiTypography-body1').should('have.text', 12);
cy.get('#list-12 > .css-1mlhis1 > .css-18467a > .MuiChip-root').should('have.text', '2023-04-23 16:29:18');
cy.get('#list-12 > .css-1mlhis1 > .css-ux5pj > .css-mu8687 > .MuiTypography-body2').should(
'have.text',
'create preheat',
);
});
it('should handle API error response', () => {
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
url: '/api/v1/jobs/12',
},
(req) => {
req.reply({
forceNetworkError: true,
statusCode: 200,
body: createPreheatFile,
});
},
);
cy.get('#select-cluster').click();
cy.get('#cluster-2').check();
cy.get('body').click('topLeft');
cy.get('#url').type('https://example.com/path/to/file');
cy.get('#save').click();
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Then I see that the current page is the preheats page!
cy.url().should('include', '/jobs/preheats/12');
// Displays successfully added preheat task.
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', '5 MiB');
});
describe('should handle API error response', () => {
it('creating a preheat file API error response', () => {
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.get('#cluster').click();
cy.contains('li', 'cluster-2').click();
cy.get('body').click('topLeft');
// Select a scope.
cy.get('#select-scope').click();
cy.get('#all_peers').click();
cy.get('#url').type('https://example.com/path/to/file');
cy.get('#save').click();
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
it('creating a preheat image API error response', () => {
cy.get('#preheat-image');
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 500,
body: {
message:
'Get "https://index.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)',
},
});
},
);
cy.get('#cluster').click();
cy.contains('li', 'cluster-2').click();
cy.get('body').click('topLeft');
// Select a scope.
cy.get('#select-scope').click();
cy.get('#all_peers').click();
cy.get('#url').type('https://example.com/path/to/file');
cy.get('#save').click();
// Show error message.
cy.get('.MuiAlert-message')
.should('be.visible')
.and(
'contain',
'Get "https://index.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)',
);
});
});
describe('cannot create preheat with invalid attributes', () => {
it('try to verify information', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const description = _.times(1001, () => _.sample(characters)).join('');
const description = _.times(401, () => _.sample(characters)).join('');
cy.get('#cluster').type('cluster-99{enter}');
cy.get('#cluster-helper-text').should('have.text', 'cluster not found');
cy.get('#cluster').type('cluster-9{enter}');
// Select a cluster.
cy.get('#select-cluster').click();
cy.get('#cluster-1').check();
cy.get('#cluster').click();
cy.contains('li', 'cluster-1').click();
cy.get('body').click('topLeft');
// Add ure.
@ -245,39 +427,127 @@ describe('Create preheat', () => {
// Show verification error message.
cy.get('#description-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-1000.');
.and('have.text', 'Fill in the characters, the length is 0-400.');
cy.get('#save').click();
});
it('try to verify args', () => {
it('try to verify URL', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const url = _.times(1001, () => _.sample(characters)).join('');
const filter = _.times(101, () => _.sample(characters)).join('');
// Select a cluster.
cy.get('#select-cluster').click();
cy.get('#cluster-1').check();
cy.get('body').click('topLeft');
// Should display message url the validation error.
// Should display message URL the validation error.
cy.get('#url').type(`https://docs${url}`);
cy.get('#url-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 1-1000.');
// Click add URL button.
cy.get('#add-url').click();
cy.get('#save').click();
// The added URL validation error prompt should be displayed.
cy.get('#url-0-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 1-1000.');
cy.get('#url-0').type('https://example.com/path/to/file');
// Click add URL button.
cy.get('#add-url').click();
// Check whether to add URL input box.
cy.get('#url-1').should('exist');
// Click the clear URL button.
cy.get('#clear-url-1').click();
cy.get('#url-1').should('not.exist');
cy.get('#url').clear();
});
it('try to verify the preheat image args', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const url = _.times(401, () => _.sample(characters)).join('');
const filter = _.times(101, () => _.sample(characters)).join('');
cy.get('#preheat-image').click();
// Select a cluster.
cy.get('#cluster').click();
cy.contains('li', 'cluster-1').click();
cy.get('body').click('topLeft');
cy.get('#url').type('https://docs');
// Should display message name the validation error.
cy.get('#username').type(filter);
// Show verification error message.
cy.get('#username-helper-text').should('have.text', 'Fill in the characters, the length is 0-100.');
cy.get('#username').clear();
cy.get('#username').type('root');
cy.get('#username-helper-text').should('not.exist');
// Should display message password the validation error.
cy.get('#password').type(filter);
// Show verification error message.
cy.get('#password-helper-text').should('have.text', 'Fill in the characters, the length is 0-100.');
cy.get('#password').clear();
cy.get('#password').type('root');
cy.get('#password-helper-text').should('not.exist');
// Should display message Piece Length the validation error.
cy.get('#select-scope').click();
cy.get('#all_peers').click();
cy.get('#radio-count').click();
cy.get('#count').should('have.value', '1');
cy.get('#count').clear();
cy.get('#count').type('0');
// Show verification error message.
cy.get('#count-helper-text').should('have.text', 'Fill in the characters, the length is 1-200.');
cy.get('#count').clear();
cy.get('#count').type('201');
cy.get('#count-helper-text').should('have.text', 'Fill in the characters, the length is 1-200.');
// 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);
cy.get('#tag-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 0-1000.');
cy.get('#tag-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 0-400.');
cy.get('#tag').clear();
// Should display message filter the validation error.
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('filter');
cy.get('#filteredQueryParams').type('filter');
cy.get('#save').click();
@ -286,63 +556,92 @@ describe('Create preheat', () => {
.should('be.visible')
.and('have.text', 'Please press ENTER to end the filter creation');
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').clear();
cy.get('#filteredQueryParams').clear();
cy.get('#filteredQueryParams').type('filter{enter}');
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('filter{enter}');
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(filter);
cy.get('#filteredQueryParams').type(filter);
// Show verification error message.
cy.get('#filteredQueryParams-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-100.');
// Should display message filter the validation error.
cy.get('#filteredQueryParams').type('filter');
cy.get('#save').click();
// Show verification error message.
cy.get('#filteredQueryParams-helper-text')
.should('be.visible')
.and('have.text', 'Please press ENTER to end the filter creation');
cy.get('#filteredQueryParams').clear();
cy.get('#filteredQueryParams').type('filter{enter}');
cy.get('#filteredQueryParams').type(filter);
// Show verification error message.
cy.get('#filteredQueryParams-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-100.');
// Should display message ips the validation error.
cy.get('#select-scope').click();
cy.get('#all_peers').click();
// Select ips.
cy.get('#radio-ips').click();
cy.get('#ips').type('10.0.0.8');
cy.get('#save').click();
// Show verification error message.
cy.get('#ips-helper-text').should('be.visible').and('have.text', 'Please press ENTER to end the ips creation');
cy.get('#ips').clear();
cy.get('#ips').type('10.0.0.8{enter}');
cy.get('#ips').type(filter);
// Show verification error message.
cy.get('#ips-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 0-100.');
cy.get('#save').click();
// Preheat creation failed, the page is still in preheat/new!
cy.url().should('include', '/jobs/preheats/new');
});
it('try to verify header', () => {
it('try to verify the preheat image header', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const key = _.times(101, () => _.sample(characters)).join('');
const value = _.times(1001, () => _.sample(characters)).join('');
cy.get('#preheat-image').click();
// Select a cluster.
cy.get('#select-cluster').click();
cy.get('#cluster-1').check();
cy.get('#cluster').click();
cy.contains('li', 'cluster-1').click();
cy.get('body').click('topLeft');
// Add ure.
cy.get('#url').type('https://example.com/path/to/file');
// Click add header button.
cy.get('.css-q8hpuo-MuiFormControl-root > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('#add-headers').click();
cy.get('#header').children().should('have.length', 3);
// Show header key verification error message.
cy.get('.new_headersKeyInput__aZcds > .MuiFormHelperText-root')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 1-100.');
// Show header value verification error message.
cy.get('.new_headersValueInput__zn-9E > .MuiFormHelperText-root')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 1-1000.');
// Verification passed.
cy.get('.new_headersKeyInput__aZcds > .MuiInputBase-root > .MuiInputBase-input').type('key');
cy.get('.new_headersKeyInput__aZcds > .MuiFormHelperText-root').should('not.exist');
cy.get('.new_headersValueInput__zn-9E > .MuiInputBase-root').type('value');
cy.get('.new_headersValueInput__zn-9E > .MuiFormHelperText-root').should('not.exist');
cy.get('#key-0').type('key');
cy.get('#key-0-helper-text').should('not.exist');
// Incorrect header key entered.
cy.get('.new_headersKeyInput__aZcds > .MuiInputBase-root > .MuiInputBase-input').clear();
cy.get('.new_headersKeyInput__aZcds > .MuiInputBase-root > .MuiInputBase-input').type(key);
cy.get('#key-0').clear();
cy.get('#key-0').type(key);
// Show header key verification error message.
cy.get('.new_headersKeyInput__aZcds > .MuiFormHelperText-root')
cy.get('#key-0-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 1-100.');
@ -351,26 +650,14 @@ describe('Create preheat', () => {
// Preheat creation failed, the page is still in preheat/new!
cy.url().should('include', '/jobs/preheats/new');
// Verification passed.
cy.get('.new_headersKeyInput__aZcds > .MuiInputBase-root > .MuiInputBase-input').clear();
cy.get('.new_headersKeyInput__aZcds > .MuiInputBase-root > .MuiInputBase-input').type('key');
cy.get('.new_headersKeyInput__aZcds > .MuiFormHelperText-root').should('not.exist');
// Incorrect header value entered.
cy.get('.new_headersValueInput__zn-9E > .MuiInputBase-root').type(value);
// Show header value verification error message.
cy.get('.new_headersValueInput__zn-9E > .MuiFormHelperText-root')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 1-1000.');
// Show header value verification error message.
cy.get('.new_headersValueInput__zn-9E > .MuiFormHelperText-root')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 1-1000.');
cy.get('#save').click();
cy.get('#value-0-helper-text').should('have.text', 'Fill in the characters, the length is 1-1000.');
cy.get('#value-0').type('key');
cy.get('#value-0-helper-text').should('not.exist');
// Preheat creation failed, the page is still in preheat/new!
cy.url().should('include', '/jobs/preheats/new');
@ -380,8 +667,190 @@ describe('Create preheat', () => {
// Check the number of headers.
cy.get('#header').children().should('have.length', 4);
// Delete header.
cy.get('#header > :nth-child(3) > .MuiButtonBase-root').click();
// Delete header input box.
cy.get('#clear-header-1').click();
cy.get('#header').children().should('have.length', 3);
});
it('try to verify the preheat file args', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const url = _.times(1001, () => _.sample(characters)).join('');
const filter = _.times(101, () => _.sample(characters)).join('');
// Select a cluster.
cy.get('#cluster').click();
cy.contains('li', 'cluster-1').click();
cy.get('body').click('topLeft');
cy.get('#url').type('https://docs');
// Should display message Piece Length the validation error.
cy.get('#select-scope').click();
cy.get('#all_peers').click();
cy.get('#radio-count').click();
cy.get('#count').should('have.value', '1');
cy.get('#count').clear();
cy.get('#count').type('0');
// Show verification error message.
cy.get('#count-helper-text').should('have.text', 'Fill in the characters, the length is 1-200.');
cy.get('#count').clear();
cy.get('#count').type('201');
cy.get('#count-helper-text').should('have.text', 'Fill in the characters, the length is 1-200.');
// 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);
cy.get('#tag-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 0-400.');
cy.get('#tag').clear();
// Should display message filter the validation error.
cy.get('#filteredQueryParams').type('filter');
cy.get('#save').click();
// Show verification error message.
cy.get('#filteredQueryParams-helper-text')
.should('be.visible')
.and('have.text', 'Please press ENTER to end the filter creation');
cy.get('#filteredQueryParams').clear();
cy.get('#filteredQueryParams').type('filter{enter}');
cy.get('#filteredQueryParams').type(filter);
// Show verification error message.
cy.get('#filteredQueryParams-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-100.');
// Should display message filter the validation error.
cy.get('#filteredQueryParams').type('filter');
cy.get('#save').click();
// Show verification error message.
cy.get('#filteredQueryParams-helper-text')
.should('be.visible')
.and('have.text', 'Please press ENTER to end the filter creation');
cy.get('#filteredQueryParams').clear();
cy.get('#filteredQueryParams').type('filter{enter}');
cy.get('#filteredQueryParams').type(filter);
// Show verification error message.
cy.get('#filteredQueryParams-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-100.');
// Should display message ips the validation error.
cy.get('#select-scope').click();
cy.get('#all_seed_peers').click();
// Select ips.
cy.get('#radio-ips').click();
cy.get('#ips').type('10.0.0.8');
cy.get('#save').click();
// Show verification error message.
cy.get('#ips-helper-text').should('be.visible').and('have.text', 'Please press ENTER to end the ips creation');
cy.get('#ips').clear();
cy.get('#ips').type('10.0.0.8{enter}');
cy.get('#ips').type(filter);
// Show verification error message.
cy.get('#ips-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 0-100.');
cy.get('#save').click();
// Preheat creation failed, the page is still in preheat/new!
cy.url().should('include', '/jobs/preheats/new');
});
it('try to verify the preheat file header', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const key = _.times(101, () => _.sample(characters)).join('');
// Select a cluster.
cy.get('#cluster').click();
cy.contains('li', 'cluster-1').click();
cy.get('body').click('topLeft');
// Add ure.
cy.get('#url').type('https://example.com/path/to/file');
// Click add header button.
cy.get('#add-headers').click();
cy.get('#header').children().should('have.length', 3);
// Verification passed.
cy.get('#key-0').type('key');
cy.get('#key-0-helper-text').should('not.exist');
// Incorrect header key entered.
cy.get('#key-0').clear();
cy.get('#key-0').type(key);
// Show header key verification error message.
cy.get('#key-0-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 1-100.');
cy.get('#save').click();
// Preheat creation failed, the page is still in preheat/new!
cy.url().should('include', '/jobs/preheats/new');
cy.get('#save').click();
cy.get('#value-0-helper-text').should('have.text', 'Fill in the characters, the length is 1-1000.');
cy.get('#value-0').type('key');
cy.get('#value-0-helper-text').should('not.exist');
// Preheat creation failed, the page is still in preheat/new!
cy.url().should('include', '/jobs/preheats/new');
// Add haeder.
cy.get('#header > .MuiButton-root').click();
// Check the number of headers.
cy.get('#header').children().should('have.length', 4);
// Delete header input box.
cy.get('#clear-header-1').click();
cy.get('#header').children().should('have.length', 3);
});

View File

@ -12,7 +12,7 @@ describe('Preheat', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10',
url: '/api/v1/jobs?page=1&per_page=10&type=preheat',
},
(req) => {
req.reply((res: any) => {
@ -37,25 +37,34 @@ describe('Preheat', () => {
},
);
cy.visit('/jobs/preheats');
cy.viewport(1440, 1080);
});
it('click the breadcrumb', () => {
cy.get(':nth-child(6) > .css-1mlhis1 > .css-1ozvesn > .MuiTypography-root > .MuiBox-root').click();
cy.visit('/jobs/preheats');
cy.get('[data-testid="isloading"]').should('be.exist');
cy.get('#preheat-6').click();
cy.url().should('include', '/jobs/preheats/6');
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root').should('exist').and('contain', 'preheats');
cy.get(':nth-child(3) > .MuiTypography-root').should('exist').and('contain', 'Preheat');
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root').click();
cy.get(':nth-child(3) > .MuiTypography-root').click();
cy.get('[data-testid="isloading"]').should('not.exist');
// Then I see that the current page is the preheats page!
cy.url().should('include', '/jobs/preheats');
});
describe('when data is loaded', () => {
beforeEach(() => {
cy.visit('/jobs/preheats');
});
it('should display detailed preheat failure information', () => {
cy.intercept(
{
@ -63,28 +72,36 @@ describe('Preheat', () => {
url: '/api/v1/jobs/10',
},
(req) => {
req.reply({
statusCode: 200,
body: failurePreheat,
req.reply((res) => {
res.setDelay(1000);
res.send({
statusCode: 200,
body: failurePreheat,
});
});
},
);
// Click the preheat details button.
cy.get('#preheat-10').click();
cy.get('[data-testid="preheat-isloading"]').should('be.exist');
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol').should('exist');
cy.get('.MuiBreadcrumbs-ol > :nth-child(5) > .MuiTypography-root').should('have.text', 10);
// Show preheat id.
cy.get(':nth-child(1) > .show_informationContent__wKGxa').should('have.text', 10);
cy.get('#id').should('have.text', 10);
// Show preheat description.
cy.get('.css-1k5mnne-MuiPaper-root > :nth-child(2) > .show_informationContent__wKGxa').should(
'have.text',
'This is a preheat task with status failure',
);
cy.get('#description').should('have.text', 'This is a preheat task with status failure');
cy.get('[data-testid="preheat-isloading"]').should('not.exist');
// Show preheat scope.
cy.get('#scope').should('contain', 'All Peers');
// Show preheat scope count.
cy.get('#count').should('contain', '100');
// Show preheat status.
cy.get('#status')
@ -93,33 +110,29 @@ describe('Preheat', () => {
.find('#error-log-icon')
.and('exist');
cy.get(':nth-child(4) > .show_informationContent__wKGxa').should('have.text', 'http://dock.io/preheat/test');
cy.get('#url-0').should('have.text', 'https://example.com/path/to/file');
cy.get('#url-1').should('have.text', 'https://example.com/path/to/file/url-1');
cy.get('#url-2').should('have.text', 'https://example.com/path/to/file/url-2');
// Show preheat filter.
cy.get(':nth-child(5) > .show_informationContent__wKGxa').children().should('have.length', 2);
cy.get(':nth-child(5) > .show_informationContent__wKGxa > :nth-child(1) > .MuiChip-label').should(
'have.text',
'Expires',
);
cy.get('#piece-length').should('have.text', '4 MiB');
// Show preheat tag.
cy.get(':nth-child(6) > .show_informationContent__wKGxa').should('have.text', 'prheat tag');
cy.get('#tag').should('have.text', 'prheat tag');
// Show preheat hearder.
cy.get(':nth-child(7) > .MuiPaper-root').children().should('have.length', 1);
cy.get('#application').should('have.text', 'application-1');
cy.get('.css-172ywp3').should('have.text', 'Connection');
cy.get('.css-ft9ciy').should('have.text', 'keep-alive');
// Show preheat headers.
cy.get('#header-key-0').should('have.text', 'Connection');
cy.get('#header-value-0').should('have.text', 'keep-alive');
// Show preheat scheduler clusters ID.
cy.get('.show_schedulerClustersID__iQd1s').should('have.text', 1);
cy.get('#scheduler-lusters-id').should('have.text', 1);
// Show preheat Created At.
cy.get(':nth-child(9) > .MuiChip-root').should('have.text', '2023-12-13 19:58:53');
// cy.get('#created-at').should('have.text', '2023-12-13 11:58:53');
// Click the show error log button.
cy.get('#status > .MuiButtonBase-root').click();
cy.get('#view-error-log').click();
cy.get('.css-avhns > .MuiTypography-h6').should('have.text', 'Error log');
cy.get('#panel1d-header').click();
@ -137,7 +150,13 @@ describe('Preheat', () => {
cy.get('.MuiBreadcrumbs-ol > :nth-child(5) > .MuiTypography-root').should('have.text', 8);
// Show preheat id.
cy.get(':nth-child(1) > .show_informationContent__wKGxa').should('have.text', 8);
cy.get('#id').should('have.text', 8);
// Show preheat scope.
cy.get('#scope').should('have.text', 'Single Seed Peer');
// Show preheat type.
cy.get('#type').should('have.text', 'Image');
// Show preheat status.
cy.get('#status')
@ -146,8 +165,15 @@ describe('Preheat', () => {
.find('#error-log-icon')
.and('not.exist');
// Show preheat hearder.
cy.get(':nth-child(7) > .MuiPaper-root').children().should('have.length', 2);
// Show preheat URL.
cy.get('#url').should('have.text', 'https://example.com/manifests/v2.1.0');
// Show preheat headers.
cy.get('#header-key-0').should('have.text', 'Authorization');
cy.get('#header-key-1').should('have.text', 'Connection');
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '4 MiB');
});
it('should display detailed preheat pending information', () => {
@ -169,12 +195,14 @@ describe('Preheat', () => {
cy.get('#preheat-11').click();
cy.wait(100);
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol').should('exist');
cy.get('.MuiBreadcrumbs-ol > :nth-child(5) > .MuiTypography-root').should('have.text', 11);
// Show preheat id.
cy.get(':nth-child(1) > .show_informationContent__wKGxa').should('have.text', 11);
cy.get('#id').should('have.text', 11);
// Show preheat status.
cy.get('#status')
@ -185,15 +213,24 @@ describe('Preheat', () => {
.find('#error-log-icon')
.and('not.exist');
// Show preheat hearder.
cy.get(':nth-child(7) > .MuiPaper-root').children().should('have.length', 1);
// Show preheat scope.
cy.get('#scope').should('contain', 'All Seed Peers');
cy.wait(6000);
// Show preheat scope.
cy.get('#percentage').should('contain', '100%');
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '-');
// Show preheat headers.
cy.get('#header-value-0').should('have.text', 'Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT');
cy.wait(59000);
// Check how many times the API should be executed after six seconds.
cy.get('@preheat').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(4, 1);
expect(interceptCount).to.be.closeTo(2, 0);
});
cy.intercept(
@ -209,9 +246,6 @@ describe('Preheat', () => {
},
);
// Preheat fails after three seconds.
cy.wait(3000);
// Show preheat status.
cy.get('#status')
.should('have.text', 'FAILURE')
@ -240,42 +274,47 @@ describe('Preheat', () => {
});
it('unable to display breadcrumb', () => {
cy.get('.MuiBreadcrumbs-ol').should('be.visible').and('contain', 'preheats');
cy.get('.MuiBreadcrumbs-ol').should('be.visible').and('contain', 'Preheat');
cy.get('.MuiBreadcrumbs-ol > :nth-child(5) > .MuiTypography-root').should('have.text', '-');
});
it('preheat information should appear empty', () => {
// Show preheat id.
cy.get(':nth-child(1) > .show_informationContent__wKGxa').should('have.text', 0);
cy.get('#id').should('have.text', 0);
// Show preheat description.
cy.get('.MuiPaper-root > :nth-child(2) > .show_informationContent__wKGxa').should('have.text', '-');
cy.get('#description').should('have.text', '-');
// Show preheat status.
cy.get('#status').should('not.exist');
cy.get('#status').should('contain', 'PENDING');
// Show preheat url.
cy.get(':nth-child(4) > .show_informationContent__wKGxa').should('have.text', '-');
cy.get('#url').should('have.text', '-');
// Show preheat filter.
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '-');
cy.get('.css-2imjyh > .MuiTypography-root').should('have.text', '-');
// Show preheat scope.
cy.get('#scope').should('have.text', '-');
// Show preheat tag.
cy.get(':nth-child(6) > .show_informationContent__wKGxa.MuiBox-root > .MuiTypography-root').should(
'have.text',
'-',
);
cy.get('#tag').should('have.text', '-');
// Show preheat hearder.
cy.get(':nth-child(7) > .show_informationContent__wKGxa').should('have.text', '-');
// Show preheat application.
cy.get('#application').should('have.text', '-');
// Show preheat ips.
cy.get('#ips').should('not.exist');
// Show preheat headers.
cy.get('#headers').should('have.text', '-');
// Show preheat scheduler clusters ID.
cy.get('.show_schedulerClustersID__iQd1s').should('have.text', '-');
cy.get('#scheduler-lusters-id').should('have.text', '-');
// Show preheat Created At.
cy.get(':nth-child(9) > .show_informationContent__wKGxa').should('have.text', '-');
cy.get('#created-at').should('have.text', '-');
});
});
@ -306,45 +345,46 @@ describe('Preheat', () => {
});
it('unable to display breadcrumb', () => {
cy.get('.MuiBreadcrumbs-ol').should('be.visible').and('contain', 'preheats');
cy.get('.MuiBreadcrumbs-ol').should('be.visible').and('contain', 'Preheat');
cy.get('.MuiBreadcrumbs-ol > :nth-child(5) > .MuiTypography-root').should('have.text', '-');
});
it('preheat information should appear empty', () => {
// Show preheat id.
cy.get(':nth-child(1) > .show_informationContent__wKGxa').should('have.text', 0);
cy.get('#id').should('have.text', 0);
// Show preheat description.
cy.get('.MuiPaper-root > :nth-child(2) > .show_informationContent__wKGxa').should('have.text', '-');
cy.get('#description').should('have.text', '-');
// Show preheat status.
cy.get('#status').should('not.exist');
cy.get('#status').should('contain', 'PENDING');
// Show preheat url.
cy.get(':nth-child(4) > .show_informationContent__wKGxa').should('have.text', '-');
cy.get('#url').should('have.text', '-');
// Show preheat filter.
cy.get('.css-2imjyh > .MuiTypography-root').should('have.text', '-');
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '-');
// Show preheat tag.
cy.get(':nth-child(6) > .show_informationContent__wKGxa.MuiBox-root > .MuiTypography-root').should(
'have.text',
'-',
);
cy.get('#tag').should('have.text', '-').should('have.text', '-');
// Show preheat hearder.
cy.get(':nth-child(7) > .show_informationContent__wKGxa').should('have.text', '-');
// Show preheat ips.
cy.get('#ips').should('not.exist');
// Show preheat headers.
cy.get('#headers').should('have.text', '-');
// Show preheat scheduler clusters ID.
cy.get('.show_schedulerClustersID__iQd1s').should('have.text', '-');
cy.get('#scheduler-lusters-id').should('have.text', '-');
// Show preheat Created At.
cy.get(':nth-child(9) > .show_informationContent__wKGxa').should('have.text', '-');
cy.get('#created-at').should('have.text', '-');
});
it('when the status is pending, preheat API error response', () => {
cy.visit('/jobs/preheats/11');
let interceptCount = 0;
cy.intercept(
@ -361,14 +401,14 @@ describe('Preheat', () => {
},
).as('preheat');
cy.visit('/jobs/preheats/11');
cy.wait(100);
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol').should('exist');
cy.get('.MuiBreadcrumbs-ol > :nth-child(5) > .MuiTypography-root').should('have.text', 11);
// Show preheat id.
cy.get(':nth-child(1) > .show_informationContent__wKGxa').should('have.text', 11);
cy.get('#id').should('have.text', 11);
// Show preheat status.
cy.get('#status')
@ -379,15 +419,18 @@ describe('Preheat', () => {
.find('#error-log-icon')
.and('not.exist');
// Show preheat hearder.
cy.get(':nth-child(7) > .MuiPaper-root').children().should('have.length', 1);
// Show preheat headers.
cy.get('#header-key-0').should('have.text', 'Authorization');
cy.wait(6000);
// Show preheat piece length.
cy.get('#piece-length').should('have.text', '-');
cy.wait(59000);
// Check how many times the API should be executed after six seconds.
cy.get('@preheat').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(4, 1);
expect(interceptCount).to.be.closeTo(2, 0);
});
cy.intercept(
@ -403,9 +446,6 @@ describe('Preheat', () => {
},
);
// Preheat API error response after three seconds.
cy.wait(3000);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Unauthorized');
});

View File

@ -3,6 +3,9 @@ import paginationPreheats from '../../../fixtures/job/preheats/pagination-prehea
import successPreheats from '../../../fixtures/job/preheats/success-preheats.json';
import failurePreheats from '../../../fixtures/job/preheats/failure-preheats.json';
import pendingPreheats from '../../../fixtures/job/preheats/pending-preheats.json';
import failurePreheat from '../../../fixtures/job/preheats/failure-preheat.json';
import successPreheat from '../../../fixtures/job/preheats/success-preheat.json';
import pendingPreheat from '../../../fixtures/job/preheats/pending-preheat.json';
declare const expect: Chai.ExpectStatic;
@ -13,7 +16,7 @@ describe('Preheats', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10',
url: '/api/v1/jobs?page=1&per_page=10&type=preheat',
},
(req) => {
req.reply((res: any) => {
@ -25,10 +28,11 @@ describe('Preheats', () => {
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=2&per_page=10',
url: '/api/v1/jobs?page=2&per_page=10&type=preheat',
},
(req) => {
req.reply((res: any) => {
@ -48,14 +52,14 @@ describe('Preheats', () => {
describe('when data is loaded', () => {
it('should display preheat all list', () => {
let interceptCount = 0;
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10',
url: '/api/v1/jobs?page=1&per_page=10&type=preheat',
},
(req) => {
req.reply((res: any) => {
res.setDelay(2000);
const responseHeaders = {
...res.headers,
Link: '</api/v1/jobs?page=1&per_page=10>;rel=prev,</api/v1/jobs?page=2&per_page=10>;rel=next,</api/v1/jobs?page=1&per_page=10>;rel=first,</api/v1/jobs?page=2&per_page=10>;rel=last',
@ -66,51 +70,32 @@ describe('Preheats', () => {
},
).as('preheats');
cy.wait(6000);
cy.get('[data-testid="isloading"]').should('be.exist');
// Executed every 3 seconds, it should be executed 2 times after 6 seconds.
cy.get('@preheats').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(2, 1);
});
cy.get(':nth-child(3) > .css-ibh903-MuiButtonBase-root-MuiListItemButton-root').click();
// Whether the style selected by menu is Preheat.
cy.get(
':nth-child(3) > .MuiCollapse-root > .MuiCollapse-wrapper > .MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root',
).should('have.class', 'Mui-selected');
cy.get('.css-1g5t85q > .MuiTypography-root').should('be.visible').and('have.text', 'Preheats');
cy.get('[data-testid="isloading"]').should('not.exist');
cy.get('.MuiList-root > :nth-child(3) > .MuiButtonBase-root').click();
// The preheating status is displayed as PENDING.
cy.get('#list-11 > .css-1mlhis1').should('exist').find('#PENDING-11').should('exist');
cy.get('#list-11 > .css-1mlhis1 > .css-ux5pj > .css-mu8687 > .MuiTypography-body1').should('have.text', 11);
cy.get('#list-11 > .css-1mlhis1 > .css-18467a > .MuiChip-root').should('have.text', '2023-03-23 16:29:18');
cy.get('#list-11 > .css-1mlhis1 > .css-ux5pj > .css-mu8687 > .MuiTypography-body2').should(
'have.text',
'This is a preheat task with status pending',
);
cy.get('#PENDING-11').should('exist');
cy.get('#id-11').should('have.text', 11);
// cy.get('#created_at-11').should('have.text', '2023-03-23 16:29:18');
cy.get('#description-11').should('have.text', 'This is a preheat task with status pending');
// The preheating status is displayed as FAILURE.
cy.get('#list-10 > .css-1mlhis1').should('exist').find('#FAILURE-10').should('exist');
cy.get('#list-10 > .css-1mlhis1 > .css-ux5pj > .css-mu8687 > .MuiTypography-body2').should(
'have.text',
'This is a preheat task with status failure',
);
cy.get('#FAILURE-10').should('exist');
cy.get('#description-10').should('have.text', 'This is a preheat task with status failure');
// The preheating status is displayed as SUCCESS.
cy.get('#list-8 > .css-1mlhis1').should('exist').find('#SUCCESS-8').should('exist');
cy.get('#list-8 > .css-1mlhis1 > .css-ux5pj > .css-mu8687 > .MuiTypography-body2').should(
'have.text',
'This is a preheat task with status success',
);
cy.get('#description-8').should('have.text', 'This is a preheat task with status success');
});
it('should display preheat success list', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&state=SUCCESS',
url: '/api/v1/jobs?page=1&per_page=10&state=SUCCESS&type=preheat',
},
(req) => {
req.reply((res: any) => {
@ -122,13 +107,10 @@ describe('Preheats', () => {
});
},
);
cy.get('.MuiInputBase-root > #states-select').click();
cy.get('[data-value="SUCCESS"]').click();
// Check how many preheat tasks are in success status.
cy.get('#preheats-list').children().should('have.length', 6);
cy.get('#preheat-pagination').should('not.exist');
});
@ -136,7 +118,7 @@ describe('Preheats', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&state=FAILURE',
url: '/api/v1/jobs?page=1&per_page=10&state=FAILURE&type=preheat',
},
(req) => {
req.reply((res: any) => {
@ -148,10 +130,8 @@ describe('Preheats', () => {
});
},
);
cy.get('.MuiInputBase-root > #states-select').click();
cy.get('[data-value="FAILURE"]').click();
// Check how many preheat tasks are in success failure.
cy.get('#preheats-list').children().should('have.length', 4);
});
@ -162,7 +142,7 @@ describe('Preheats', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&state=PENDING',
url: '/api/v1/jobs?page=1&per_page=10&state=PENDING&type=preheat',
},
(req) => {
req.reply((res: any) => {
@ -170,7 +150,6 @@ describe('Preheats', () => {
...res.headers,
Link: '</api/v1/jobs?page=1&per_page=10&state=PENDING>;rel=prev,</api/v1/jobs?page=2&per_page=10&state=PENDING>;rel=next,</api/v1/jobs?page=1&per_page=10&state=PENDING>;rel=first,</api/v1/jobs?page=0&per_page=10&state=PENDING>;rel=last',
};
res.send(200, pendingPreheats, responseHeaders);
}),
interceptCount++;
@ -178,23 +157,24 @@ describe('Preheats', () => {
).as('preheats');
cy.get('.MuiInputBase-root > #states-select').click();
cy.get('[data-value="PENDING"]').click();
// Check how many preheat tasks are in pending failure.
cy.get('#preheats-list').children().should('have.length', 1);
cy.wait(6000);
cy.wait(59000);
// The API should poll.
cy.get('@preheats').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(3, 1);
expect(interceptCount).to.be.closeTo(1, 0);
});
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&state=PENDING',
url: '/api/v1/jobs?page=1&per_page=10&state=PENDING&type=preheat',
},
(req) => {
req.reply({
@ -204,8 +184,6 @@ describe('Preheats', () => {
},
);
cy.wait(3000);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Unauthorized');
});
@ -215,7 +193,7 @@ describe('Preheats', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10',
url: '/api/v1/jobs?page=1&per_page=10&type=preheat',
},
(req) => {
req.reply((res: any) => {
@ -233,14 +211,14 @@ describe('Preheats', () => {
cy.get('#preheats-list').should('not.exist');
// Show You don't have any preheat tasks.
cy.get('.css-e76tiu').should('be.visible').and('contain', `You don't have any preheat tasks.`);
cy.get('#no-preheat').should('be.visible').and('contain', `You don't have any preheat tasks.`);
});
it('should handle API error response', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10',
url: '/api/v1/jobs?page=1&per_page=10&type=preheat',
},
(req) => {
req.reply({
@ -260,7 +238,7 @@ describe('Preheats', () => {
cy.get('#preheats-list').should('not.exist');
// Show You don't have any preheat tasks.
cy.get('.css-e76tiu').should('be.visible').and('contain', `You don't have any preheat tasks.`);
cy.get('#no-preheat').should('be.visible').and('contain', `You don't have any preheat tasks.`);
});
describe('pagination', () => {
@ -271,8 +249,8 @@ describe('Preheats', () => {
cy.get('#preheat-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '1');
// The preheating status is displayed as PENDING.
cy.get('#list-11 > .css-1mlhis1').should('exist').find('#PENDING-11').should('exist');
cy.get('#list-11 > .css-1mlhis1 > .css-ux5pj > .css-mu8687 > .MuiTypography-body1').should('have.text', 11);
cy.get('#PENDING-11').should('exist');
cy.get('#id-11').should('have.text', 11);
});
it('when pagination changes, different page results are rendered', () => {
@ -284,8 +262,8 @@ describe('Preheats', () => {
cy.get('#preheats-list').children().should('have.length', 1);
cy.get('#list-1').should('exist').find('#SUCCESS-1').should('exist');
cy.get('.css-mu8687 > .MuiTypography-body1').should('have.text', 1);
cy.get('#SUCCESS-1').should('exist');
cy.get('#id-1').should('have.text', 1);
});
it('when you click refresh, the paginated results and page numbers remain unchanged.', () => {
@ -299,7 +277,7 @@ describe('Preheats', () => {
// Refresh page.
cy.reload().then(() => {
cy.wait(2000);
cy.wait(1000);
});
// Check the current page number.
@ -319,7 +297,7 @@ describe('Preheats', () => {
cy.get('#list-1').should('exist').find('#SUCCESS-1').should('exist');
// Go to show preheat page.
cy.get('#preheat-1 > .MuiBox-root').click();
cy.get('#preheat-1').click();
// Then I see that the current page is the show update personal-access-tokens.
cy.url().should('include', '/jobs/preheats/1');
@ -333,4 +311,128 @@ describe('Preheats', () => {
cy.get('#list-1').should('exist').find('#SUCCESS-1').should('exist');
});
});
describe('search', () => {
it('should search for successful preheat', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/8',
},
(req) => {
req.reply({
statusCode: 200,
body: successPreheat,
});
},
);
// Check the list.
cy.get('#preheats-list').children().should('have.length', 10);
// should search for preheat ID.
cy.get('#search').type('8');
// Check the number of preheat lists is 1.
cy.get('#preheats-list').children().should('have.length', 1);
cy.get('#id-8').should('have.text', 8);
cy.get('#search').clear();
cy.get('#preheats-list').children().should('have.length', 10);
});
it('should search for failure preheat', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/10',
},
(req) => {
req.reply((res) => {
res.setDelay(1000);
res.send({
statusCode: 200,
body: failurePreheat,
});
});
},
);
// Check the list.
cy.get('#preheats-list').children().should('have.length', 10);
// should search for preheat ID.
cy.get('#search').type('10');
// Check the number of preheat lists is 1.
cy.get('#preheats-list').children().should('have.length', 1);
cy.get('#id-10').should('have.text', 10);
});
it('should search for pending preheat', () => {
let interceptCount = 0;
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/11',
},
(req) => {
req.reply({
statusCode: 200,
body: pendingPreheat,
});
interceptCount++;
},
).as('preheats');
// should search for preheat ID.
cy.get('#search').type('11');
cy.wait(59000);
// Check how many times the API should be executed after six seconds.
cy.get('@preheats').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(1, 0);
});
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/11',
},
(req) => {
req.reply({
statusCode: 200,
body: failurePreheat,
});
},
);
cy.get('#FAILURE-10').should('exist');
});
it('should handle API error response', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/6',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
// should search for preheat ID.
cy.get('#search').type('6');
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
});
});

View File

@ -1,4 +1,12 @@
import clusters from '../../fixtures/clusters/clusters.json';
import seedPeers from '../../fixtures/seed-peers/seed-peers.json';
import schedulers from '../../fixtures/schedulers/schedulers.json';
describe('Menu', () => {
beforeEach(() => {
cy.viewport(1440, 1080);
});
it('user not signin', () => {
// redirect when not signin.
cy.visit('/');
@ -7,6 +15,25 @@ describe('Menu', () => {
cy.url().should('include', '/signin');
});
it('should switch to dark mode', () => {
cy.guestSignin();
cy.visit('/');
// Click the Light button.
cy.get('#light').click();
cy.get('#light').should('have.class', 'Mui-selected');
// Check if it is switched to light mode.
cy.get('#main').should('have.css', 'background-color', 'rgb(244, 246, 248)');
// Click the Dark button.
cy.get('#dark').click();
cy.get('#dark').should('have.class', 'Mui-selected');
// Check if it is switched to dark mode.
cy.get('#main').should('have.css', 'background-color', 'rgb(31, 36, 48)');
});
describe('try to signin as guest user', () => {
beforeEach(() => {
cy.guestSignin();
@ -26,36 +53,46 @@ describe('Menu', () => {
});
it('should navigate to the tokens page', () => {
cy.get('.MuiList-root > :nth-child(2) > .MuiButtonBase-root').click();
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').click();
cy.get('#developer').click();
cy.get('#personal-access-tokens').click();
// Then I see that the current page is the tokens!
cy.url().should('include', '/developer/personal-access-tokens');
// The selected menu is tokens.
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').should('have.class', 'Mui-selected');
cy.get('#personal-access-tokens').should('have.class', 'Mui-selected');
cy.get('#dragonfly').click();
// Then I see that the current page is the clusters!
cy.url().should('include', '/clusters');
});
it('should navigate to the preheats page', () => {
cy.get('.MuiList-root > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').click();
it('should navigate to the preheats page and task page', () => {
cy.get('#jobs').click();
cy.get('#preheats').click();
// Then I see that the current page is the preheats!
cy.url().should('include', '/jobs/preheats');
// The selected menu is preheats.
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').should('have.class', 'Mui-selected');
cy.get('#preheats').should('have.class', 'Mui-selected');
});
it('should navigate to the peers page', () => {
cy.get('.MuiList-root > :nth-child(4) > .MuiButtonBase-root').click();
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').click();
it('should navigate to the task page and task persistent cache page', () => {
cy.get('#resource').click();
cy.get('#task').click();
// Then I see that the current page is the peers!
cy.url().should('include', '/insight/peers');
// Then I see that the current page is the task!
cy.url().should('include', '/resource/task/clear');
// The selected menu is peers.
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').should('have.class', 'Mui-selected');
cy.get('#task').should('have.class', 'Mui-selected');
cy.get('#persistent-cache-task').click();
// Then I see that the current page is the task persistent cache!
cy.url().should('include', '/resource/persistent-cache-task');
cy.get('#persistent-cache-task').should('have.class', 'Mui-selected');
});
});
@ -63,6 +100,43 @@ describe('Menu', () => {
beforeEach(() => {
cy.signin();
cy.intercept(
{
method: 'GET',
url: '/api/v1/clusters?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: clusters,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/schedulers?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: schedulers,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/seed-peers?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: seedPeers,
});
},
);
cy.visit('/');
});
@ -75,46 +149,52 @@ describe('Menu', () => {
});
it('should navigate to the tokens page', () => {
cy.get('.MuiList-root > :nth-child(2) > .MuiButtonBase-root').click();
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').click();
cy.get('#developer').click();
cy.get('#personal-access-tokens').click();
// Then I see that the current page is the tokens!
cy.url().should('include', '/developer/personal-access-tokens');
// The selected menu is tokens.
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').should('have.class', 'Mui-selected');
cy.get('#personal-access-tokens').should('have.class', 'Mui-selected');
});
it('should navigate to the preheats page', () => {
cy.get('.MuiList-root > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').click();
it('should navigate to the preheats page and task page', () => {
cy.get('#jobs').click();
cy.get('#preheats').click();
// Then I see that the current page is the preheats!
cy.url().should('include', '/jobs/preheats');
// The selected menu is preheats.
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').should('have.class', 'Mui-selected');
cy.get('#preheats').should('have.class', 'Mui-selected');
});
it('should navigate to the peers page', () => {
cy.get('.MuiList-root > :nth-child(4) > .MuiButtonBase-root').click();
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').click();
it('should navigate to the task page and task persistent cache page', () => {
cy.get('#resource').click();
cy.get('#task').click();
// Then I see that the current page is the peers!
cy.url().should('include', '/insight/peers');
// Then I see that the current page is the task!
cy.url().should('include', '/resource/task/clear');
// The selected menu is peers.
cy.get('.MuiCollapse-wrapperInner > .MuiList-root > .MuiButtonBase-root').should('have.class', 'Mui-selected');
cy.get('#task').should('have.class', 'Mui-selected');
cy.get('#persistent-cache-task').click();
// Then I see that the current page is the task persistent cache!
cy.url().should('include', '/resource/persistent-cache-task');
cy.get('#persistent-cache-task').should('have.class', 'Mui-selected');
});
it('should navigate to the users page', () => {
cy.get('[href="/users"]').click();
cy.get('#users').click();
// Then I see that the current page is the users!
cy.url().should('include', '/users');
// The selected menu is users.
cy.get('[href="/users"]').should('have.class', 'Mui-selected');
cy.get('#users').should('have.class', 'Mui-selected');
});
it('should navigate to the profile page', () => {
@ -128,6 +208,47 @@ describe('Menu', () => {
cy.url().should('include', '/profile');
});
it('The menu should be smaller', () => {
// The menu should be smaller.
cy.get('#closure').should('exist').click();
cy.get('#expand').should('exist');
cy.get('#closure').should('not.exist');
// Go to tokens page.
cy.get('#developer').click();
cy.get('#personal-access-tokens').click();
// Then I see that the current page is the tokens!
cy.url().should('include', '/developer/personal-access-tokens');
// Go to jobs page.
cy.get('#jobs').click();
cy.get('#preheats').click();
// Then I see that the current page is the preheats!
cy.url().should('include', '/jobs/preheats');
// Go to task page.
cy.get('#resource').click();
cy.get('#task').click();
// Then I see that the current page is the task!
cy.url().should('include', '/resource/task/clear');
cy.get('#resource').click();
cy.get('#persistent-cache-task').click();
// Then I see that the current page is the task persistent cache!
cy.url().should('include', '/resource/persistent-cache-task');
// Go to user page.
cy.get('#users').click();
// Then I see that the current page is the users!
cy.url().should('include', '/users');
});
it('can logout', () => {
cy.intercept(
{
@ -174,7 +295,8 @@ describe('Menu', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
cy.get('.css-1rr4qq7 > .MuiSnackbar-root > .MuiPaper-root > .MuiAlert-action > .MuiButtonBase-root').click();
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
});

View File

@ -0,0 +1,404 @@
import peers from '../../fixtures/peers/peers.json';
import refreshPeers from '../../fixtures/peers/refresh-peers.json';
import cluster from '../../fixtures/clusters/cluster/cluster.json';
const path = require('path');
declare const expect: Chai.ExpectStatic;
describe('Peers', () => {
beforeEach(() => {
cy.signin();
cy.intercept(
{
method: 'GET',
url: '/api/v1/clusters/1',
},
(req) => {
req.reply({
statusCode: 200,
body: cluster,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/peers?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: peers,
});
},
);
cy.visit('/clusters/1/peers');
cy.viewport(1440, 1080);
});
describe('when data is loaded', () => {
it('displays the total number of peers and git version number, as well as the number of git commit', () => {
// should display the total number of peers.
cy.get('#total').should('have.text', 10);
// should display the git version number of peers.
cy.get('#git-version').should('have.text', 4);
// should display the git commit number of peers.
cy.get('#git-commit').should('have.text', 5);
});
it('should display the active ratio', () => {
// Show active ratio by git version.
cy.get('#git-version-active').should('contain', '80%');
// Show active ratio by git commit.
cy.get('#git-commit-active').should('contain', '80%');
cy.get('.MuiInputBase-root > #git-version-select').click();
cy.get('[data-value="git-version-1"]').click();
// Show active ratio by git version 1.
cy.get('#git-commit-active').should('contain', '50%');
cy.get('.MuiInputBase-root > #git-version-select').click();
cy.get('[data-value="git-version-2"]').click();
// Show active ratio by git version 2.
cy.get('#git-commit-active').should('contain', '100%');
});
it('can export csv file', () => {
// Click export csv.
cy.get('#export').click();
cy.get('#export-git-version').click();
cy.get('[data-value="git-version-1"]').click();
cy.get('#export-git-commit').click();
cy.get('[data-value="git-commit-4"]').click();
cy.get('#close-export').click();
const downloadsFolder = Cypress.config('downloadsFolder');
// Click export csv.
cy.get('#export').click();
// Click save button.
cy.get('#save').click();
// Wait two seconds to ensure the download is successful.
cy.wait(2000);
// Get download file.
const all = path.join(downloadsFolder, 'Peer Data.csv');
// Check all quantity.
cy.readFile(all).then((fileContent) => {
const lines = fileContent.split('\n');
const numEntries = lines.length - 2;
expect(numEntries).to.be.closeTo(10, 0);
});
// Click export csv.
cy.get('#export').click();
cy.get('#export-git-version').click();
cy.get('[data-value="git-version-1"]').click();
cy.get('#save').click();
cy.wait(2000);
const gitVersion = path.join(downloadsFolder, 'Peer Data.csv');
// Check whether the number of data exported based on git-version-1 is correct.
cy.readFile(gitVersion)
.should('exist')
.then((fileContent) => {
const numEntries = fileContent.split('\n').length - 2;
expect(numEntries).to.be.closeTo(2, 0);
});
// Click export csv.
cy.get('#export').click();
cy.get('#export-git-version').click();
cy.get('[data-value="git-version-1"]').click();
cy.get('#export-git-commit').click();
cy.get('[data-value="git-commit-4"]').click();
cy.get('#save').click();
cy.wait(2000);
const gitCommit = path.join(downloadsFolder, 'Peer Data.csv');
// Check whether the number of data exported based on git-commit-4 is correct.
cy.readFile(gitCommit)
.should('exist')
.then((fileContent) => {
const numEntries = fileContent.split('\n').length - 2;
expect(numEntries).to.be.closeTo(1, 0);
});
});
it('click cancel button', () => {
// Click export csv.
cy.get('#export').click();
cy.get('.css-18v9rtl').should('be.visible').and('have.text', 'Export');
// Select git-version-1 in the git version selection box.
cy.get('#export-git-version').click();
cy.get('[data-value="git-version-1"]').click();
// Select git-commit-4 in the git commit selection box.
cy.get('#export-git-commit').click();
cy.get('[data-value="git-commit-4"]').click();
// Click cancel button.
cy.get('#cancel').click();
cy.get('#export').click();
// Check whether the selected one is all.
cy.get('#export-git-version').should('have.text', 'All');
cy.get('#export-git-commit').should('have.text', 'All');
});
});
describe('when no data is loaded', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/peers?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: [],
});
},
);
});
it('displays the total number of peers and git version number, as well as the number of git commit', () => {
// should display the total number of peers.
cy.get('#total').should('have.text', 0);
// should display the git version number of peers.
cy.get('#git-version').should('have.text', 0);
// should display the git commit number of peers.
cy.get('#git-commit').should('have.text', 0);
});
it('cannot display the active ratio', () => {
cy.get('#git-version-active').should('contain', '0');
cy.get('#git-commit-active').should('contain', '0');
});
it('cannot export csv file', () => {
cy.get('#export').click();
cy.get('#save').click();
// Show error message.
cy.get('.MuiAlert-message').should('have.text', 'Export failed');
});
});
describe('should handle API error response', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/peers?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.visit('/clusters/1/peers');
});
it('displays the total number of peers and git version number, as well as the number of git commit', () => {
// should display the total number of peers.
cy.get('#total').should('have.text', 0);
// should display the git version number of peers.
cy.get('#git-version').should('have.text', 0);
// should display the git commit number of peers.
cy.get('#git-commit').should('have.text', 0);
});
it('cannot display the active ratio', () => {
cy.get('#git-version-active').should('contain', '0');
cy.get('#git-version-active').should('contain', '0');
cy.get('#git-commit-active').should('contain', '0');
});
it('show error message', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('cannot export csv file', () => {
cy.get('#export').click();
cy.get('#save').click();
// Show error message.
cy.get('.MuiAlert-message').should('have.text', 'Export failed');
});
});
describe('refresh', () => {
it('can refresh peers and return new data', () => {
cy.get('#total').should('have.text', 10);
cy.get('#git-version').should('have.text', 4);
cy.get('#git-commit').should('have.text', 5);
cy.get('#refresh').should('not.be.disabled');
// Click refresh button.
cy.get('#refresh').click();
cy.get('#refresh-title').should('be.visible').and('have.text', 'Refresh');
cy.get('#cancel').click();
cy.get('#refresh').click();
cy.get('#close-delete-icon').click();
cy.get('#refresh').click();
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
(req) => {
req.on('response', (res) => {
res.setDelay(2000);
});
req.reply({
statusCode: 200,
body: JSON.stringify('OK'),
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/peers?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: refreshPeers,
});
},
);
cy.get('#save').click();
cy.get('#refresh').should('be.disabled');
cy.wait(2000);
cy.get('#total').should('have.text', 14);
cy.get('#git-version').should('have.text', 6);
cy.get('#git-commit').should('have.text', 7);
});
it('not can refresh peers and return new data', () => {
cy.get('#total').should('have.text', 10);
cy.get('#git-version').should('have.text', 4);
cy.get('#git-commit').should('have.text', 5);
cy.get('#refresh').should('not.be.disabled');
// Click refresh button.
cy.get('#refresh').click();
cy.get('#refresh-title').should('be.visible').and('have.text', 'Refresh');
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
(req) => {
req.on('response', (res) => {
res.setDelay(2000);
});
req.reply({
statusCode: 404,
body: { message: 'scheduler cluster id 7: record not found' },
});
},
);
cy.get('#save').click();
cy.get('#refresh').should('be.disabled');
cy.wait(2000);
cy.get('.MuiAlert-message').should('have.text', 'scheduler cluster id 7: record not found');
cy.get('#total').should('have.text', 10);
cy.get('#git-version').should('have.text', 4);
cy.get('#git-commit').should('have.text', 5);
});
it('can refresh peer fetch data error', () => {
cy.get('#total').should('have.text', 10);
cy.get('#git-version').should('have.text', 4);
cy.get('#git-commit').should('have.text', 5);
cy.get('#refresh').should('not.be.disabled');
// Click refresh button.
cy.get('#refresh').click();
cy.get('#refresh-title').should('be.visible').and('have.text', 'Refresh');
cy.get('#cancel').click();
cy.get('#refresh').click();
cy.get('#close-delete-icon').click();
cy.get('#refresh').click();
cy.intercept(
{
method: 'POST',
url: '/api/v1/jobs',
},
(req) => {
req.on('response', (res) => {
res.setDelay(2000);
});
req.reply({
statusCode: 200,
body: JSON.stringify('OK'),
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/peers?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.get('#save').click();
cy.get('#refresh').should('be.disabled');
cy.wait(2000);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
cy.get('#total').should('have.text', 10);
cy.get('#git-version').should('have.text', 4);
cy.get('#git-commit').should('have.text', 5);
});
});
});

View File

@ -46,42 +46,24 @@ describe('Profile', () => {
cy.viewport(1440, 1080);
});
it('opens user profile page from the home page', () => {
cy.visit('/');
cy.get('#unfold-more').click();
// Go to profil page.
cy.get('#profile-menu').click();
// Then I see that the current page is the profile!
cy.url().should('include', '/profile');
cy.get('h5').should('contain', 'My Profile');
});
it('when data is loaded', () => {
cy.get('.css-70qvj9 > .MuiBox-root > .MuiTypography-body1').should('be.visible').and('have.text', 'root');
cy.get('.MuiTypography-caption').should('be.visible').and('have.text', 'root@example.com');
// Show user name.
cy.get('.css-70qvj9 > .MuiBox-root > .MuiTypography-h5').should('be.visible').and('have.text', 'root');
cy.get('#name-title').should('be.visible').and('have.text', 'root');
// Show user description.
cy.get('.MuiBox-root > .MuiTypography-subtitle1').should('be.visible').and('have.text', 'I am root');
cy.get('#description').should('be.visible').and('have.text', 'I am root');
cy.get('#id').should('be.visible').and('have.text', 1);
cy.get('#name').should('be.visible').and('have.text', 'root');
cy.get('#email').should('be.visible').and('have.text', 'root@example.com');
cy.get('#location').should('be.visible').and('have.text', 'Hangzhou');
cy.get('#phone').should('be.visible').and('have.text', 1234567890);
cy.get('#phone').should('be.visible').and('have.text', '+86 153 1234 5678');
cy.get('#created_at').should('be.visible').and('have.text', '2023-11-06 06:09:04');
// Check Update Personal Information form.
cy.get('.MuiGrid-root > .MuiButtonBase-root').click();
cy.get('#bio').should('have.value', 'I am root');
cy.get('#phone').should('have.value', 1234567890);
cy.get('#phone').should('have.value', '+86 153 1234 5678');
cy.get('#location').should('have.value', 'Hangzhou');
cy.get('#email').should('have.value', 'root@example.com');
});
@ -100,16 +82,11 @@ describe('Profile', () => {
},
);
// Navigation menu is empty.
cy.get('.MuiList-root').should('be.empty');
cy.get('.css-70qvj9 > .MuiBox-root > .MuiTypography-body1').should('be.visible').and('have.text', '-');
cy.get('.MuiTypography-caption').should('be.visible').and('have.text', '-');
// Show user name.
cy.get('.css-70qvj9 > .MuiBox-root > .MuiTypography-h5').should('be.visible').and('have.text', '-');
cy.get('#name-title').should('be.visible').and('have.text', '-');
// Show user description.
cy.get('.MuiBox-root > .MuiTypography-subtitle1').should('be.visible').and('have.text', '-');
cy.get('#description').should('be.visible').and('have.text', '-');
cy.get('#id').should('be.visible').and('have.text', '-');
cy.get('#name').should('be.visible').and('have.text', '-');
cy.get('#email').should('be.visible').and('have.text', '-');
@ -121,7 +98,7 @@ describe('Profile', () => {
cy.get('.MuiGrid-root > .MuiButtonBase-root').click();
cy.get('#bio').should('have.value', '');
cy.get('#phone').should('have.value', '');
cy.get('#phone').should('have.value', '+86');
cy.get('#location').should('have.value', '');
cy.get('#email').should('have.value', '');
});
@ -142,13 +119,11 @@ describe('Profile', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
cy.get('.MuiList-root').should('be.empty');
// Check Update Personal Information form.
cy.get('.MuiGrid-root > .MuiButtonBase-root').click();
cy.get('#bio').should('have.value', '');
cy.get('#phone').should('have.value', '');
cy.get('#phone').should('have.value', '+86');
cy.get('#location').should('have.value', '');
cy.get('#email').should('have.value', '');
});
@ -197,13 +172,8 @@ describe('Profile', () => {
cy.get('#save').click();
// Check whether the navigation bar email has changed.
cy.get('.MuiTypography-caption').should('have.text', 'root@gmail.com');
// Check if profile description is updated.
cy.get('.MuiBox-root > .MuiTypography-subtitle1')
.should('be.visible')
.and('have.text', 'I am root, I will change the description');
cy.get('#description').should('be.visible').and('have.text', 'I am root, I will change the description');
// Check if profile email is updated.
cy.get('#email').should('be.visible').and('have.text', 'root@gmail.com');
@ -212,7 +182,7 @@ describe('Profile', () => {
cy.get('#location').should('be.visible').and('have.text', 'Shanghai');
// Check if profile phone is updated.
cy.get('#phone').should('be.visible').and('have.text', 15123456789);
cy.get('#phone').should('be.visible').and('have.text', '+86 153 1234 5678');
});
it('click the `CANCEL button', () => {
@ -225,10 +195,9 @@ describe('Profile', () => {
cy.get('#email').clear();
cy.get('#email').type('root@gmail.com');
cy.get('#cancel').click();
cy.get('.MuiBox-root > .MuiTypography-subtitle1').should('be.visible').and('have.text', 'I am root');
cy.get('#description').should('be.visible').and('have.text', 'I am root');
// Check whether the navigation bar email has changed.
cy.get('.MuiTypography-caption').should('have.text', 'root@example.com');
cy.get('#email').should('be.visible').and('have.text', 'root@example.com');
// Click EDIT button.
@ -285,7 +254,7 @@ describe('Profile', () => {
it('cannot create user with invalid attributes', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const description = _.times(1001, () => _.sample(characters)).join('');
const description = _.times(401, () => _.sample(characters)).join('');
const location = _.times(101, () => _.sample(characters)).join('');
cy.get('.MuiGrid-root > .MuiButtonBase-root').click();
@ -295,11 +264,9 @@ describe('Profile', () => {
cy.get('#bio').type(description);
// Show verification error message.
cy.get('#bio-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 0-1000.');
cy.get('#bio-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 0-400.');
cy.get('#save').click();
cy.get('.css-1q42fhy-MuiPaper-root > :nth-child(1) > .MuiTypography-root')
.should('exist')
.and('have.text', 'Update Personal Information');
cy.get('.css-1033rfx > .MuiTypography-root').should('exist').and('have.text', 'Update Personal Information');
cy.get('#bio').clear();
cy.get('#bio').type('I am root');
@ -309,17 +276,15 @@ describe('Profile', () => {
// Should display message phone the validation error.
cy.get('#phone').clear();
cy.get('#phone').type('1234567890');
cy.get('#phone').type('+86 153 1234 123123');
// Show verification error message.
cy.get('#phone-helper-text').should('be.visible').and('have.text', 'Invalid phone number.');
cy.get('#save').click();
cy.get('.css-1q42fhy-MuiPaper-root > :nth-child(1) > .MuiTypography-root')
.should('exist')
.and('have.text', 'Update Personal Information');
cy.get('.css-1033rfx > .MuiTypography-root').should('exist').and('have.text', 'Update Personal Information');
cy.get('#phone').clear();
cy.get('#phone').type('15123456789');
cy.get('#phone').type('+86 151 2345 6789');
// Verification passed.
cy.get('#phone-helper-text').should('not.exist');
@ -363,8 +328,21 @@ describe('Profile', () => {
});
});
// Click change password button.
cy.get('.css-1a9getn > .MuiButtonBase-root').click();
// Click change password tab.
cy.get('#tab-password').click();
cy.get('#oldPassword').type('dragonfly1');
cy.get('#newPassword').type('dragonfly2');
cy.get('#confirmNewPassword').type('dragonfly2');
// Click cancel password button.
cy.get('#cancel-change-password').click();
// Input should be cleared.
cy.get('#oldPassword').should('have.value', '');
cy.get('#newPassword').should('have.value', '');
cy.get('#confirmNewPassword').should('have.value', '');
cy.get('#oldPassword').type('dragonfly1');
cy.get('#newPassword').type('dragonfly2');
cy.get('#confirmNewPassword').type('dragonfly2');
@ -376,24 +354,20 @@ describe('Profile', () => {
cy.url().should('include', 'signin');
});
it('click the `CANCEL button', () => {
it('click the Profile tab', () => {
// Click change password button.
cy.get('.css-1a9getn > .MuiButtonBase-root').click();
cy.get('.profile_profileContainer__l5i6P > .MuiGrid-root > .MuiTypography-root')
.should('be.visible')
.and('have.text', 'Change Password');
cy.get('#tab-password').click();
cy.get('#change-password-title').should('be.visible').and('have.text', 'Change Password');
cy.get('#oldPassword').type('dragonfly1');
cy.get('#newPassword').type('dragonfly2');
cy.get('#confirmNewPassword').type('dragonfly2');
// Click cancel button.
cy.get('#cancel-change-password').click();
cy.get('.profile_profileContainer__l5i6P > .MuiGrid-root > .MuiTypography-root').should('not.exist');
cy.get('#tab-profile').click();
cy.get('#change-password-title').should('not.exist');
cy.get('.css-1a9getn > .MuiButtonBase-root').click();
cy.get('.profile_profileContainer__l5i6P > .MuiGrid-root > .MuiTypography-root')
.should('be.visible')
.and('have.text', 'Change Password');
cy.get('#tab-password').click();
cy.get('#change-password-title').should('be.visible').and('have.text', 'Change Password');
// Check if old password is empty.
cy.get('#oldPassword').should('have.text', '');
@ -425,7 +399,7 @@ describe('Profile', () => {
cy.visit('/profile');
// Click change password button.
cy.get('.css-1a9getn > .MuiButtonBase-root').click();
cy.get('#tab-password').click();
cy.get('#oldPassword').type('dragonfly1');
cy.get('#newPassword').type('dragonfly2');
cy.get('#confirmNewPassword').type('dragonfly2');
@ -444,7 +418,7 @@ describe('Profile', () => {
});
// Click change password button.
cy.get('.css-1a9getn > .MuiButtonBase-root').click();
cy.get('#tab-password').click();
cy.get('#oldPassword').type('dragonfly1');
cy.get('#newPassword').type('dragonfly2');
cy.get('#confirmNewPassword').type('dragonfly2');
@ -464,7 +438,7 @@ describe('Profile', () => {
});
// Click change password button.
cy.get('.css-1a9getn > .MuiButtonBase-root').click();
cy.get('#tab-password').click();
cy.get('#oldPassword').type('dragonfly1');
cy.get('#newPassword').type('dragonfly2');
cy.get('#confirmNewPassword').type('dragonfly2');
@ -476,7 +450,7 @@ describe('Profile', () => {
it('cannot change password without required attributes', () => {
// Click change password button.
cy.get('.css-1a9getn > .MuiButtonBase-root').click();
cy.get('#tab-password').click();
cy.get('#change-password').click();
// Show error message.
@ -500,7 +474,7 @@ describe('Profile', () => {
const newPasswordLengthIsInsufficient = _.times(7, () => _.sample(characters)).join('');
// Click change password button.
cy.get('.css-1a9getn > .MuiButtonBase-root').click();
cy.get('#tab-password').click();
// Should display message old password the validation error.
cy.get('#oldPassword').type(oldPassword);
@ -553,7 +527,7 @@ describe('Profile', () => {
});
it('click the password hide butto', () => {
cy.get('.css-1a9getn > .MuiButtonBase-root').click();
cy.get('#tab-password').click();
// Verify the display status of the content of the old password input box.
cy.get('#oldPassword').type('dragonfly1');

View File

@ -0,0 +1,274 @@
import persistentCacheTasks from '../../../fixtures/resource/persistent-cache-task/persistent-cache-tasks.json';
import persistentCacheTask from '../../../fixtures/resource/persistent-cache-task/persistent-cache-task.json';
import failedPersistentCacheTask from '../../../fixtures/resource/persistent-cache-task/failed-persistent-cache-task.json';
describe('Persistent Cache Tasks', () => {
beforeEach(() => {
cy.signin();
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: persistentCacheTasks,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks/2865345332?scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: persistentCacheTask,
});
},
);
cy.visit('/resource/persistent-cache-task/clusters/1/2865345332');
cy.viewport(1440, 1080);
});
describe('when data is loaded', () => {
it('click the breadcrumb', () => {
// Display is loading.
cy.get('[data-testid="isloading"]').should('be.exist');
// Check for breadcrumb.
cy.get('#scheduler-cluster-1').should('be.visible').and('contain', 'scheduler-cluster-1');
cy.get('#task-id-2865345332').should('have.text', 2865345332);
cy.get('#scheduler-cluster-1').click();
// Then I see that the current page is the clusters/1!
cy.url().should('include', '/resource/persistent-cache-task/clusters/1');
});
it('can display success persistent cache task', () => {
cy.get('#id').should('have.text', '2865345332');
cy.get('#success-task').should('exist');
cy.get('#persistent-replica-count').should('have.text', '2');
cy.get('#ttl').should('have.text', '7 days');
cy.get('#content-length').should('have.text', '1.59 KB');
cy.get('#piece-length').should('have.text', '4 MiB');
cy.get('#application').should('have.text', 'application-1');
cy.get('#tag').should('have.text', 'tag-1');
// Display peers.
cy.get('#peers').should('exist');
cy.get('#id-0').should('have.text', '2');
cy.get('#hostname-0').should('have.text', 'hostname-2');
cy.get('#os-0').should('have.text', 'ios');
cy.get('#persistent-0').should('contain', 'Yes');
cy.get('#type-0').should('have.text', 'Super');
cy.get('#ip-0').should('have.text', '112.3325.44');
cy.get('#port-0').should('have.text', '8001');
cy.get('#download-port-0').should('have.text', '4001');
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('#hostname-0').should('have.text', 'hostname-5');
});
it('can display failed persistent cache task', () => {
cy.visit('/resource/persistent-cache-task/clusters/1');
cy.get('.MuiPagination-ul > :nth-child(3)').click();
cy.get('#failed-task-1').should('exist');
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks/3870122508?scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: failedPersistentCacheTask,
});
},
);
// Click the persistent cache task details button.
cy.get('#card-id-1').click();
cy.get('#peers').should('not.exist');
cy.get('#failure-task').should('exist');
cy.get('#scheduler-cluster-1').click();
cy.get('#operation-0').click();
cy.get(':nth-child(11) > .MuiPaper-root > .MuiList-root > .information_menu__CXV1V > #view-3810320977').click();
// Then I see that the current page is the persistent cache task details!
cy.url().should('include', '/resource/persistent-cache-task/clusters/1/3810320977');
// Then I see that the current page is the persistent cache tasks!
cy.get('#scheduler-cluster-1').click();
// Display a list of persistent cache tasks.
cy.get('#table').click();
cy.get('#operation-3810320977').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .information_menu__CXV1V > #view-3810320977').click();
// Then I see that the current page is the persistent cache task details!
cy.url().should('include', '/resource/persistent-cache-task/clusters/1/3810320977');
});
});
describe('when no data is loaded', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks/2865345332?scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: {},
});
},
);
});
it('unable to display breadcrumb', () => {
cy.get('#task-id-2865345332').should('have.text', '2865345332');
});
it('persistent cache task render empty status', () => {
cy.get('#id').should('have.text', '0');
cy.get('#failure-task').should('exist');
cy.get('#create-at').should('have.text', '-');
cy.get('#persistent-replica-count').should('have.text', '-');
cy.get('#ttl').should('have.text', '-');
cy.get('#content-length').should('have.text', '-');
cy.get('#piece-length').should('have.text', '-');
cy.get('#application').should('have.text', '-');
cy.get('#tag').should('have.text', '-');
cy.get('#peers').should('not.exist');
});
});
describe('should handle API error response', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks/3810320977?scheduler_cluster_id=1',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.visit('/resource/persistent-cache-task/clusters/1/3810320977');
});
it('show error message', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('persistent cache task render empty status', () => {
cy.get('#id').should('have.text', '0');
cy.get('#failure-task').should('exist');
cy.get('#create-at').should('have.text', '-');
cy.get('#persistent-replica-count').should('have.text', '-');
cy.get('#ttl').should('have.text', '-');
cy.get('#content-length').should('have.text', '-');
cy.get('#piece-length').should('have.text', '-');
cy.get('#application').should('have.text', '-');
cy.get('#tag').should('have.text', '-');
cy.get('#peers').should('not.exist');
});
});
describe('delete', () => {
it('persistent cache tasks can be deleted', () => {
cy.get('#open-dialog').should('not.exist');
cy.get('#delete-task').click();
cy.get('#open-dialog').should('exist');
// Cancel delete task.
cy.get('#cancel-delete-task').click();
cy.get('#open-dialog').should('not.exist');
cy.get('#delete-task').click();
cy.get('#delete-task-input').type('delete');
cy.get('#save-delete-task').click();
// Shoe help text.
cy.get('#delete-task-input-helper-text').should('have.text', 'Please enter "DELETE"');
cy.get('#delete-task-input').clear();
cy.get('#delete-task-input').type('DELETE');
cy.get('#delete-task-input-helper-text').should('not.exist');
cy.intercept(
{
method: 'DELETE',
url: '/api/v1/persistent-cache-tasks/2865345332?scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
});
},
);
cy.get('#save-delete-task').click();
cy.url().should('include', '/resource/persistent-cache-task/clusters/1');
});
it('should handle API error response', () => {
cy.get('#delete-task').click();
cy.get('#delete-task-input').type('DELETE');
cy.get('#delete-task-input-helper-text').should('not.exist');
cy.intercept(
{
method: 'DELETE',
url: '/api/v1/persistent-cache-tasks/2865345332?scheduler_cluster_id=1',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.get('#save-delete-task').click();
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
});
});

View File

@ -0,0 +1,526 @@
import clusters from '../../../fixtures/clusters/clusters.json';
import persistentCacheTasks from '../../../fixtures/resource/persistent-cache-task/persistent-cache-tasks.json';
import deletePersistentCacheTasks from '../../../fixtures/resource/persistent-cache-task/delete-persistent-cache-tasks.json';
import deletePersistentCacheTasksAfter from '../../../fixtures/resource/persistent-cache-task/delete-persistent-cache-tasks-after.json';
describe('Persistent Cache Tasks', () => {
beforeEach(() => {
cy.signin();
cy.intercept(
{
method: 'GET',
url: '/api/v1/clusters?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: clusters,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: persistentCacheTasks,
});
},
);
cy.visit('/resource/persistent-cache-task');
cy.viewport(1440, 1080);
});
describe('when data is loaded', () => {
it('it should show cluster', () => {
// Display is loading.
cy.get('[data-testid="isloading"]').should('be.exist');
cy.get('#clusters-card').should('exist');
cy.get('#cluster-name-1').should('have.text', 'cluster-1');
cy.get('#cluster-name-1').click();
});
it('should show persistent cache tasks', () => {
cy.visit('/resource/persistent-cache-task/clusters/1');
// Display is loading.
cy.get('[data-testid="isloading"]').should('be.exist');
cy.get('#total').should('have.text', 19);
cy.get('#application').should('have.text', 6);
cy.get('#tag').should('have.text', 17);
cy.get('#card-id-0').should('have.text', '3810320977');
cy.get('#tag-0').should('have.text', 'tag-4');
cy.get('#application-0').should('have.text', 'application-3');
cy.get('#table').click();
cy.get(':nth-child(1) > #id-3810320977').should('have.text', '3810320977');
});
it('should show visualization of persistent cache tasks', () => {
cy.visit('/resource/persistent-cache-task/clusters/1');
cy.get('#tab-analytics').click();
cy.get('#total').should('have.text', 19);
cy.get('#application').should('have.text', 6);
cy.get('#tag').should('have.text', 17);
cy.get('#application-ratio').should('have.text', '31.58%');
cy.get('#tag-ratio').should('have.text', '89.47%');
});
it('call onChange when changing page size', () => {
// The viewport will now be changed to 1440px x 1080px
cy.viewport(1440, 1080);
// Check if the number of page size is 9.
cy.get('#clusters-card').should('exist').children().should('have.length', 9);
// The viewport will now be changed to 1600px x 1080px
cy.viewport(1600, 1080);
cy.wait(1000);
// Check if the number of page size is 12.
cy.get('#clusters-card').should('exist').children().should('have.length', 9);
// The viewport will now be changed to 1920px x 1080px
cy.viewport(1920, 1080);
cy.wait(1000);
// Check if the number of page size is 20.
cy.get('#clusters-card').should('exist').children().should('have.length', 12);
// The viewport will now be changed to 2048px x 1080px
cy.viewport(2048, 1080);
cy.wait(1000);
// Check if the number of page size is 20.
cy.get('#clusters-card').should('exist').children().should('have.length', 12);
// The viewport will now be changed to 2560px x 1080px
cy.viewport(2560, 1080);
cy.wait(1000);
// Check if the number of page size is 24.
cy.get('#clusters-card').should('exist').children().should('have.length', 15);
cy.visit('/resource/persistent-cache-task/clusters/1');
// The viewport will now be changed to 1440px x 1080px
cy.viewport(1440, 1080);
// Check if the number of page size is 9.
cy.get('#card-list').should('exist').children().should('have.length', 9);
// The viewport will now be changed to 1600px x 1080px
cy.viewport(1600, 1080);
cy.wait(1000);
// Check if the number of page size is 9.
cy.get('#card-list').should('exist').children().should('have.length', 9);
// The viewport will now be changed to 1920px x 1080px
cy.viewport(1920, 1080);
cy.wait(1000);
// Check if the number of page size is 12.
cy.get('#card-list').should('exist').children().should('have.length', 12);
// The viewport will now be changed to 2048px x 1080px
cy.viewport(2048, 1080);
cy.wait(1000);
// Check if the number of page size is 12.
cy.get('#card-list').should('exist').children().should('have.length', 12);
// The viewport will now be changed to 2560px x 1080px
cy.viewport(2560, 1080);
cy.wait(1000);
// Check if the number of page size is 15.
cy.get('#card-list').should('exist').children().should('have.length', 15);
});
});
describe('search', () => {
it('can search cluster', () => {
cy.get('#search-cluster').type('cluster-1{enter}');
// Check the card list.
cy.get('#clusters-card').children().should('have.length', 9);
cy.get('#search-cluster').clear();
cy.get('#search-cluster').type('cluster-11{enter}');
// Check the card list.
cy.get('#clusters-card').children().should('have.length', 1);
cy.get('#no-clusters').should('not.exist');
cy.get('#search-cluster').clear();
cy.get('#search-cluster').type('cluster-111{enter}');
cy.get('#no-clusters').should('exist');
});
it('can search persistent cache task', () => {
cy.get('#cluster-name-1').click();
cy.get('#search-task').type('2484851399{enter}');
// Check the card list.
cy.get('#card-list').children().should('have.length', 1);
cy.get('#search-task').clear();
// Check the card list.
cy.get('#card-list').children().should('have.length', 9);
cy.get('#search-task').type('9023');
// It should prompt that there is no task.
cy.get('#no-task').should('have.text', 'This scheduler cluster has no persistent cache task.');
});
it('should be queried based on the query string', () => {
cy.visit('/resource/persistent-cache-task?search=cluster-11');
cy.get('#search-cluster').should('have.value', 'cluster-11');
// Check the card list.
cy.get('#clusters-card').children().should('have.length', 1);
cy.visit('/resource/persistent-cache-task/clusters/1?search=2865345332');
// Check the card list.
cy.get('#card-list').children().should('have.length', 3);
});
});
describe('delete', () => {
beforeEach(() => {
cy.visit('/resource/persistent-cache-task/clusters/1');
});
it('can the delet persistent cache task', () => {
cy.get('#operation-0').click();
cy.get('#delete-task').should('not.exist');
cy.get(':nth-child(11) > .MuiPaper-root > .MuiList-root > .information_menu__CXV1V > #delete-3810320977').click();
cy.get('#delete-task').should('exist');
cy.get('#help-delete-task').should('have.text', 'Persistent cache task will be permanently deleted.');
cy.get('#deletCache').type('delete');
// Shoe help text.
cy.get('#deletCache-helper-text').should('have.text', 'Please enter "DELETE"');
cy.get('#deleteTask').click();
cy.get('#delete-task').should('exist');
cy.get('#deletCache').clear();
cy.intercept(
{
method: 'DELETE',
url: '/api/v1/persistent-cache-tasks/3810320977?scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: deletePersistentCacheTasks,
});
},
);
cy.get('#deletCache').type('DELETE');
cy.get('#total').should('have.text', 19);
cy.get('#deleteTask').click();
// Show Success Message.
cy.get('#success-message').should('have.text', 'Submission successful!');
cy.get('#total').should('have.text', 18);
});
it('should handle API error response', () => {
cy.get('#operation-0').click();
cy.get('body').click('topLeft');
cy.get('#operation-0').click();
cy.get('#delete-task').should('not.exist');
cy.get(':nth-child(11) > .MuiPaper-root > .MuiList-root > .information_menu__CXV1V > #delete-3810320977').click();
cy.get('#delete-task').should('exist');
cy.get('#help-delete-task').should('have.text', 'Persistent cache task will be permanently deleted.');
cy.intercept(
{
method: 'DELETE',
url: '/api/v1/persistent-cache-tasks/3810320977?scheduler_cluster_id=1',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.get('#deletCache').type('DELETE');
cy.get('#deleteTask').click();
// Show error message.
cy.get('.MuiAlert-message').should('have.text', 'Failed to fetch');
});
it('when a task is removed, this task is the only task on the last page', () => {
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(4) > .MuiButtonBase-root').click();
cy.url().should('include', '/resource/persistent-cache-task/clusters/1?page=3');
cy.get('#operation-0').click();
cy.get('#delete-2865345332').click();
cy.intercept(
{
method: 'DELETE',
url: '/api/v1/persistent-cache-tasks/2865345332?scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: deletePersistentCacheTasksAfter,
});
},
);
cy.get('#deletCache').type('DELETE');
cy.get('#total').should('have.text', 19);
cy.get('#deleteTask').click();
// Show Success Message.
cy.get('#success-message').should('have.text', 'Submission successful!');
cy.get('#total').should('have.text', 18);
cy.url().should('include', '/resource/persistent-cache-task/clusters/1?page=2');
});
it('when deleting a task, there is only one task on the next page', () => {
// Go to next page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// Check the current page number.
cy.get('#task-pagination > .MuiPagination-ul').children().should('have.length', '5');
// Check the last task ID.
cy.get('#card-id-8').should('have.text', '2865345332');
cy.url().should('include', '/resource/persistent-cache-task/clusters/1?page=2');
cy.get('#operation-8').click();
cy.get(':nth-child(11) > .MuiPaper-root > .MuiList-root > .information_menu__CXV1V > #delete-2865345332').click();
cy.intercept(
{
method: 'DELETE',
url: '/api/v1/persistent-cache-tasks/2865345332?scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: deletePersistentCacheTasks,
});
},
);
cy.get('#deletCache').type('DELETE');
cy.get('#total').should('have.text', 19);
cy.get('#deleteTask').click();
// Show Success Message.
cy.get('#success-message').should('have.text', 'Submission successful!');
cy.get('#total').should('have.text', 18);
// Check the current page number.
cy.get('#task-pagination > .MuiPagination-ul').children().should('have.length', '4');
// Check the last task ID.
cy.get('#card-id-8').should('have.text', '2865345332');
});
});
describe('should handle API error response', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/clusters?page=1&per_page=10000000',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/persistent-cache-tasks?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
});
it('cluster API response error', () => {
cy.visit('/resource/persistent-cache-task');
cy.get('#no-date').should('exist');
cy.get('#no-date-text').should('have.text', 'You have no clusters.');
// Show error message.
cy.get('.MuiAlert-message').should('have.text', 'Failed to fetch');
});
it('persistent cache task API response error', () => {
cy.visit('/resource/persistent-cache-task/clusters/1');
// It should prompt that there is no task.
cy.get('#no-task').should('have.text', 'This scheduler cluster has no persistent cache task.');
// Show error message.
cy.get('.MuiAlert-message').should('have.text', 'Failed to fetch');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
cy.get('#table').click();
// It should prompt that there is no task.
cy.get('#no-task-table').should('have.text', 'This scheduler cluster has no persistent cache task.');
});
});
describe('pagination', () => {
it('pagination updates results and page number', () => {
cy.get('.MuiPagination-ul > :nth-child(3)').click();
// Show cluster name.
cy.get('#cluster-name-10').should('be.visible').and('contain', 'cluster-10');
// Show persistent cache task
cy.visit('/resource/persistent-cache-task/clusters/1');
cy.get('#card-list').children().should('have.length', 9);
cy.get('#card-id-0').should('have.text', '3810320977');
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('#card-list').children().should('have.length', 9);
cy.get('#card-id-0').should('have.text', '3870122509');
});
it('when you click refresh, the paginated results and page numbers remain unchanged.', () => {
cy.get('#clusters-card').children().should('have.length', 9);
cy.get('.MuiPagination-ul > :nth-child(6) > .MuiButtonBase-root').click();
cy.get('#clusters-card').children().should('have.length', 1);
cy.get('#cluster-name-37').should('have.text', 'cluster-37');
// Refresh page.
cy.reload().then(() => {
cy.wait(1000);
});
cy.get('#clusters-card').children().should('have.length', 1);
cy.get('#cluster-name-37').should('have.text', 'cluster-37');
// Show persistent cache task
cy.visit('/resource/persistent-cache-task/clusters/1?page=2');
cy.get('#card-list').children().should('have.length', 9);
cy.get('#card-id-0').should('have.text', '3870122509');
// Refresh page.
cy.reload().then(() => {
cy.wait(1000);
});
cy.get('#card-list').children().should('have.length', 9);
cy.get('#card-id-0').should('have.text', '3870122509');
});
});
});

View File

@ -0,0 +1,940 @@
import createTaskJob from '../../../fixtures/resource/task/create-task-job.json';
import task from '../../../fixtures/resource/task/task.json';
import pendingTask from '../../../fixtures/resource/task/pending-task.json';
import taskIDByTask from '../../../fixtures/resource/task/task-id-by-task.json';
import noTask from '../../../fixtures/resource/task/no-task.json';
import ImageManifest from '../../../fixtures/resource/task/image-manifest-url-task.json';
import _ from 'lodash';
describe('Clear', () => {
beforeEach(() => {
cy.signin();
cy.visit('/resource/task/clear');
cy.viewport(1440, 1080);
});
describe('when no data is loaded', () => {
it('when search by url has no data to load', () => {
cy.get('#no-task').should('not.exist');
cy.get('#light').should('exist');
cy.get('#no-task-image').should('not.exist');
// Click the Toggle Light button.
cy.get('#light').click();
cy.get('#light').should('have.class', 'Mui-selected');
// Check if it is switched to light mode.
cy.get('#main').should('have.css', 'background-color', 'rgb(244, 246, 248)');
cy.get('#no-task-image').should('exist');
cy.get('#dark-no-task-image').should('not.exist');
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: noTask,
});
},
);
cy.get('#url').click();
// Add url.
cy.get('#url').type('https://example.com/path/to/file');
cy.get('#searchByURL').click();
cy.get('#no-task').should('exist');
});
it('when search by image manifest url has no data to load', () => {
cy.get('#no-task').should('not.exist');
cy.get('#serach-image-manifest-url').click();
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
async (req) => {
await new Promise((resolve) => setTimeout(resolve, 200));
req.reply({
statusCode: 200,
body: {
image: {
layers: [
{
url: 'https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:c7c72808bf776cd122bdaf4630a4a35ea319603d6a3b6cbffddd4c7fd6d2d269',
},
{
url: 'https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:9986a736f7d3d24bb01b0a560fa0f19c4b57e56c646e1f998941529d28710e6b',
},
],
},
peers: [],
},
});
},
);
cy.get('#image-manifest-url').type('https://example.com/path/to/file{enter}');
// Shou You don't find any results!
cy.get('#no-image-manifest-URL-task').should('exist').and('contain', `You don't find any results!`);
});
});
describe('when data is loaded', () => {
it('click the `CANCEL button', () => {
cy.get('#url').click();
// 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();
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', () => {
let interceptCount = 0;
cy.get('#url').click();
// Add url.
cy.get('#url').type('https://example.com/path/to/file');
// Add piece length.
cy.get('#pieceLength').type('4');
// Add tag input.
cy.get('#tag').type('tag');
// Add tag input.
cy.get('#application').type('application');
// 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}');
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: pendingTask,
});
interceptCount++;
},
).as('cache');
cy.get('#searchByURL').click();
cy.get('#isLoading').should('be.exist');
cy.wait(59000);
// Executed every 3 seconds, it should be executed 2 times after 6 seconds.
cy.get('@cache').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(1, 0);
});
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: task,
});
},
);
cy.get('#url').click();
// Show url.
cy.get('#url').should('have.value', 'https://example.com/path/to/file');
cy.get('#tag').should('have.value', 'tag');
cy.get('#application').should('have.value', 'application');
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root')
.should('contain', 'filteredQueryParams')
.and('contain', 'X-Amz-Algorithm');
});
it('can search by task id', () => {
cy.get('#serach-task-id').click();
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: task,
});
},
);
cy.get('.MuiInputBase-root > #task-id').type(
'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916{enter}',
);
cy.get('#cache').children().should('have.length', 3);
// Go to next page.
cy.get('#pagination-0 > .MuiPagination-ul > :nth-child(4) > .MuiButtonBase-root').click();
// Check the current page number.
cy.get('#pagination-0 > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('#cache-0 > :nth-child(1) > .css-tzff0k > .MuiBox-root > .MuiTypography-root').should(
'have.text',
'dragonfly-seed-client-5',
);
cy.get('#cache-0').children().should('have.length', 2);
// Pagination should not be displayed.
cy.get('#pagination-1').should('exist');
// Pagination should be shown.
cy.get('#pagination-2').should('not.exist');
cy.get('#cache-1 > :nth-child(1)')
.should('contain', 'kind-worker3')
.and('contain', '172.18.0.2-kind-worker3-3de3df03-a97d-4784-b608-f9b04b3085f3')
.and('contain', 'Normal');
cy.get('#pagination-1 > .MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
cy.get('#cache-1').children().should('have.length', 1);
// Go back to the last page.
cy.get('#pagination-0 > .MuiPagination-ul > :nth-child(1) > .MuiButtonBase-root').click();
// Check the current data list.
cy.get('#cache-0').children().should('have.length', 5);
cy.get('.MuiInputBase-root > .MuiButtonBase-root').click();
cy.get('.MuiInputBase-root > #task-id').should('not.have.value');
cy.get('.MuiInputBase-root > #task-id').type('{enter}');
});
it('can search by content for calculating task id', () => {
cy.get('#serach-content-for-calculating-task-id').click();
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: task,
});
},
);
cy.get('#content-for-calculating-task-id').type('3870122509{enter}');
cy.get('#cache').children().should('have.length', 3);
// Go to next page.
cy.get('#pagination-0 > .MuiPagination-ul > :nth-child(4) > .MuiButtonBase-root').click();
// Check the current page number.
cy.get('#pagination-0 > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('#cache-0 > :nth-child(1) > .css-tzff0k > .MuiBox-root > .MuiTypography-root').should(
'have.text',
'dragonfly-seed-client-5',
);
cy.get('#cache-0').children().should('have.length', 2);
// Pagination should not be displayed.
cy.get('#pagination-1').should('exist');
});
it('can search by image manifest url', () => {
cy.get('#no-task').should('not.exist');
cy.get('#serach-image-manifest-url').click();
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
async (req) => {
await new Promise((resolve) => setTimeout(resolve, 200));
req.reply({
statusCode: 200,
body: ImageManifest,
});
},
);
cy.get('#image-manifest-url').type('https://example.com/path/to/file{enter}');
// Show is loading.
cy.get('#isLoading').should('exist');
// Display cache information.
cy.get('#blobs').should('have.text', 'Total: 5');
cy.get('#scheduler-id-0').should('exist', 'ID : 1');
cy.get('#isLoading').should('not.exist');
cy.get('#scheduler-1-hostname-0').should('have.text', 'kind-worker1');
cy.get('#scheduler-1-ip-0').should('have.text', '172.18.0.4');
cy.get('#scheduler-1-proportion-0').should('contain', '60.00%');
// Should display URL.
cy.get('#scheduler-1-url-0').click();
});
});
describe('should handle API error response', () => {
it('create job API error', () => {
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
// Search by URL.
cy.get('#url').click();
cy.get('#url').type('https://example.com/path/to/file');
cy.get('#searchByURL').click();
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
// Search by task id.
cy.get('#serach-task-id').click();
cy.get('.MuiInputBase-root > #task-id').type(
'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916{enter}',
);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('when the status is pending, delete cache API error response', () => {
let interceptCount = 0;
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: pendingTask,
});
interceptCount++;
},
).as('cache');
// Search by URL.
cy.get('#url').click();
cy.get('#url').type('https://example.com/path/to/file');
cy.get('#searchByURL').click();
cy.get('#isLoading').should('be.exist');
cy.wait(59000);
// Executed every 1 minute and once after 1 minute.
cy.get('@cache').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(1, 0);
});
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 401,
body: { message: 'Unauthorized' },
});
},
);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Unauthorized');
});
it('delete cache API error response', () => {
// Search by task id.
cy.get('#serach-task-id').click();
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 401,
body: { message: 'Unauthorized' },
});
},
);
cy.get('.MuiInputBase-root > #task-id').type(
'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916{enter}',
);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Unauthorized');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('search by image manifest url API error response', () => {
cy.get('#no-task').should('not.exist');
cy.get('#serach-image-manifest-url').click();
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
async (req) => {
await new Promise((resolve) => setTimeout(resolve, 200));
req.reply({
forceNetworkError: true,
});
},
);
cy.get('#image-manifest-url').type('https://example.com/path/to/file{enter}');
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
});
describe('delete', () => {
it('can delete cache searched by URL', () => {
cy.get('#url').click();
// Add url.
cy.get('#url').type('https://example.com/path/to/file');
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: task,
});
},
);
cy.get('#searchByURL').click();
cy.get(':nth-child(2) > .MuiPaper-root > .css-whqzh4 > .MuiButtonBase-root').click();
cy.get('#deletCache').type('e');
// Should display message delete cache the validation error.
cy.get('#deletCache-helper-text').should('have.text', 'Please enter "DELETE"');
cy.get('#deletCache').clear();
cy.get('#deletCache').type('DELETE');
cy.get('#deletCache-helper-text').should('not.exist');
// Click delete cache button.
cy.get('#deleteTask').click();
// Then I see that the current page is the executions id.
cy.url().should('include', '/resource/task/executions/1');
});
it('Can delete cache searched by task id', () => {
// Search by task id.
cy.get('#serach-task-id').click();
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: taskIDByTask,
});
},
);
cy.get('.MuiInputBase-root > #task-id').type(
'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916{enter}',
);
cy.get(':nth-child(2) > .MuiPaper-root > .css-whqzh4 > .MuiButtonBase-root').click();
cy.get('#deletCache').type('e');
// Should display message delete cache the validation error.
cy.get('#deletCache-helper-text').should('have.text', 'Please enter "DELETE"');
cy.get('#deletCache').clear();
cy.get('#deletCache').type('DELETE');
cy.get('#deletCache-helper-text').should('not.exist');
// Click delete cache button.
cy.get('#deleteTask').click();
// Then I see that the current page is the executions id.
cy.url().should('include', '/resource/task/executions/1');
});
it('Can delete cache searched by content for calculating task id', () => {
cy.get('#serach-content-for-calculating-task-id').click();
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: taskIDByTask,
});
},
);
cy.get('#content-for-calculating-task-id').type('3870122509{enter}');
cy.get(':nth-child(2) > .MuiPaper-root > .css-whqzh4 > .MuiButtonBase-root').click();
cy.get('#deletCache').type('e');
// Should display message delete cache the validation error.
cy.get('#deletCache-helper-text').should('have.text', 'Please enter "DELETE"');
cy.get('#deletCache').clear();
cy.get('#deletCache').type('DELETE');
cy.get('#deletCache-helper-text').should('not.exist');
// Click delete cache button.
cy.get('#deleteTask').click();
// Then I see that the current page is the executions id.
cy.url().should('include', '/resource/task/executions/1');
});
it('search by task id API error response should be handled', () => {
cy.get('#url').click();
// Add url.
cy.get('#url').type('https://example.com/path/to/file');
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: task,
});
},
);
cy.get('#searchByURL').click();
cy.get('#scheduler-id-1').should('contain', '2');
cy.get(':nth-child(2) > .MuiPaper-root > .css-whqzh4 > .MuiButtonBase-root').click();
cy.get('#deletCache').type('e');
// Should display message delete cache the validation error.
cy.get('#deletCache-helper-text').should('have.text', 'Please enter "DELETE"');
cy.get('#deletCache').clear();
cy.get('#deletCache').type('DELETE');
cy.get('#deletCache-helper-text').should('not.exist');
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
// Click delete cache button.
cy.get('#deleteTask').click();
// Then I see that the current page is the clear.
cy.url().should('include', '/resource/task/clear');
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
it('search by URL API error response should be handled', () => {
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
statusCode: 200,
body: createTaskJob,
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/1',
},
(req) => {
req.reply({
statusCode: 200,
body: task,
});
},
);
// Search by task id.
cy.get('#serach-task-id').click();
cy.get('.MuiInputBase-root > #task-id').type(
'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916{enter}',
);
cy.get('#scheduler-id-1').should('contain', '2');
cy.get(':nth-child(2) > .MuiPaper-root > .css-whqzh4 > .MuiButtonBase-root').click();
cy.get('#deletCache').type('e');
// Should display message delete cache the validation error.
cy.get('#deletCache-helper-text').should('have.text', 'Please enter "DELETE"');
cy.get('#deletCache').clear();
cy.get('#deletCache').type('DELETE');
cy.get('#deletCache-helper-text').should('not.exist');
cy.intercept(
{
method: 'post',
url: '/api/v1/jobs',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
// Click delete cache button.
cy.get('#deleteTask').click();
// Then I see that the current page is the clear.
cy.url().should('include', '/resource/task/clear');
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
});
});
describe('cannot search cache with invalid attributes', () => {
it('try to verify url', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const url = _.times(1001, () => _.sample(characters)).join('');
const tag = _.times(401, () => _.sample(characters)).join('');
const filter = _.times(101, () => _.sample(characters)).join('');
cy.get('#url').click();
// Should display message url the validation error.
cy.get('#url').type(`https://docs${url}`);
cy.get('#url-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 0-1000.');
cy.get('#searchByURL').click();
cy.get('#url').clear();
cy.get('#url').type('https://docs');
cy.get('#url-helper-text').should('not.exist');
// Should display message tag the validation error.
cy.get('#tag').type(tag);
cy.get('#tag-helper-text').should('be.visible').and('have.text', 'Fill in the characters, the length is 0-400.');
cy.get('#tag').clear();
// Should display message filter the validation error.
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('filter');
cy.get('#searchByURL').click();
cy.get('#filteredQueryParams-helper-text')
.should('be.visible')
.and('have.text', 'Please press ENTER to end the filter creation');
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').clear();
cy.get('#filteredQueryParams-helper-text').should('not.exist');
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type('filter{enter}');
cy.get('.MuiAutocomplete-root > .MuiFormControl-root > .MuiInputBase-root').type(filter);
// Show verification error message.
cy.get('#filteredQueryParams-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-100.');
cy.get('#searchByURL').click();
// Should display message application the validation error.
cy.get('#application').type(tag);
cy.get('#application-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-400.');
cy.get('#application').clear();
cy.get('#searchByURL').click();
cy.get('#serach-task-id').click();
cy.get('#task-id').type(`${tag}{enter}`);
cy.get('#task-id-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-400.');
});
it('try to verify task id', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const taskID = _.times(401, () => _.sample(characters)).join('');
cy.get('#serach-task-id').click();
cy.get('#task-id').type(`${taskID}{enter}`);
cy.get('#task-id-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-400.');
});
it('try to verify content for calculating task id', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const contentForCalculatingTaskID = _.times(401, () => _.sample(characters)).join('');
cy.get('#serach-content-for-calculating-task-id').click();
cy.get('#content-for-calculating-task-id').type(`${contentForCalculatingTaskID}{enter}`);
cy.get('#content-for-calculating-task-id-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-400.');
});
it('try to verify image manifest url', () => {
const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
const url = _.times(401, () => _.sample(characters)).join('');
cy.get('#serach-image-manifest-url').click();
cy.get('#image-manifest-url').click();
// Should display message url the validation error.
cy.get('#image-manifest-url').type(`https://docs${url}`);
cy.get('#image-manifest-url-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 1-400.');
cy.get('#image-manifest-url').clear();
cy.get('#image-manifest-url').type('https://docs');
cy.get('#image-manifest-url-helper-text').should('not.exist');
});
});
});

View File

@ -0,0 +1,422 @@
import executions from '../../../fixtures/resource/task/executions.json';
import execution from '../../../fixtures/resource/task/execution.json';
import pendingExecution from '../../../fixtures/resource/task/pending-execution.json';
import failureExecution from '../../../fixtures/resource/task/failure-execution.json';
describe('Executions', () => {
beforeEach(() => {
cy.signin();
cy.visit('/resource/task/executions/6');
cy.viewport(1440, 1080);
});
describe('when data is loaded', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&type=delete_task',
},
(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, executions, responseHeaders);
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/9',
},
(req) => {
req.reply({
statusCode: 200,
body: execution,
});
},
);
cy.visit('/resource/task/executions');
});
it('click the breadcrumb', () => {
// Show isloading.
cy.get('[data-testid="isloading"]').should('be.exist');
cy.get('#detail-9').click();
cy.url().should('include', '/resource/task/executions/9');
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol').should('exist').and('contain', 'Executions').and('contain', '9');
cy.get('.MuiBreadcrumbs-ol > :nth-child(5) > .MuiTypography-root').click();
cy.get('[data-testid="isloading"]').should('not.exist');
// Then I see that the current page is the executions page!
cy.url().should('include', '/resource/task/executions');
});
it('should display detailed execution failure information', () => {
// Click the execution details button.
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/10',
},
(req) => {
req.reply((res) => {
res.setDelay(1000);
res.send({
statusCode: 200,
body: failureExecution,
});
});
},
);
cy.get('#detail-10').click();
cy.get('[data-testid="execution-isloading"]').should('be.exist');
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol').should('exist').and('contain', 10);
// Show execution id.
cy.get('#id').should('contain', 10);
// Show execution content for calculating task id.
cy.get('#content-for-calculating-task-id').should('have.text', '-');
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('#task-id').should('contain', 'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916');
// Show execution tag.
cy.get('#tag').should('contain', 'execution-tag');
// Show execution application.
cy.get('#application').should('contain', 'execution-application');
// Show execution scheduler clusters ID.
cy.get('#scheduler-clusters-id').should('have.text', 1);
// Click the show error log button.
cy.get('#status > .MuiButtonBase-root').click();
cy.get('#error-log').should('have.text', 'Error log');
cy.get('#panel1d-header').click();
// Check error log.
cy.get('.MuiAccordionDetails-root > .MuiTypography-root')
.should('be.visible')
.and('have.text', 'rpc error: code = Aborted desc = source response 401/401 Unauthorized is not valid');
});
it('should display detailed execution success information', () => {
cy.get('#detail-9').click();
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol').should('exist').and('contain', 9);
// Show execution id.
cy.get('#id').should('contain', 9);
cy.get('[data-testid="execution-isloading"]').should('not.exist');
// Show execution status.
cy.get('#status')
.should('have.text', 'SUCCESS')
.and('have.css', 'background-color', 'rgb(34, 139, 34)')
.find('#error-log-icon')
.and('not.exist');
// 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.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// 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.
cy.reload().then(() => {
cy.wait(1000);
});
// 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"',
);
});
it('should display detailed execution pending information', () => {
let interceptCount = 0;
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/11',
},
(req) => {
req.reply({
statusCode: 200,
body: pendingExecution,
});
interceptCount++;
},
).as('execution');
cy.get('#detail-11').click();
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol').should('exist').and('contain', 11);
// Show execution id.
cy.get('#id').should('contain', 11);
// Show execution status.
cy.get('#status')
.should('have.text', 'PENDING')
.and('have.css', 'background-color', 'rgb(219, 171, 10)')
.find('#pending-icon')
.and('exist')
.find('#error-log-icon')
.and('not.exist');
cy.wait(59000);
// Check how many times the API should be executed after six seconds.
cy.get('@execution').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(2, 0);
});
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/11',
},
(req) => {
req.reply({
statusCode: 200,
body: failureExecution,
});
},
);
// 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');
// Show execution piece length.
cy.get('#piece-length').should('have.text', '4 MiB');
});
});
describe('when no data is loaded', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/6',
},
(req) => {
req.reply({
statusCode: 200,
body: {},
});
},
);
});
it('execution information should appear empty', () => {
// Show execution id.
cy.get('#id').should('have.text', 0);
// Show execution status.
cy.get('#status').should('not.exist');
// Show execution task id.
cy.get('#task-id').should('have.text', '-');
// Show execution content for calculating task id.
cy.get('#content-for-calculating-task-id').should('have.text', '-');
// Show execution url.
cy.get('#url').should('have.text', '-');
// Show execution piece length.
cy.get('#piece-length').should('have.text', '-');
// Show execution tag.
cy.get('#tag').should('have.text', '-');
// Show execution scheduler clusters ID.
cy.get('#scheduler-clusters-id').should('have.text', '-');
// Show execution Created At.
cy.get('#created-at').should('have.text', '-');
// Don't show failure tasks.
cy.get('#failure-tasks').should('not.exist');
});
});
describe('should handle API error response', () => {
beforeEach(() => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/10',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
cy.visit('/resource/task/executions/10');
});
it('show error message', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
it('execution information should appear empty', () => {
// Show execution id.
cy.get('#id').should('have.text', 0);
// Show execution status.
cy.get('#status').should('not.exist');
// Show execution task id.
cy.get('#task-id').should('have.text', '-');
// Show execution content for calculating task id.
cy.get('#content-for-calculating-task-id').should('have.text', '-');
// Show execution url.
cy.get('#url').should('have.text', '-');
// Show execution piece length.
cy.get('#piece-length').should('have.text', '-');
// Show execution tag.
cy.get('#tag').should('have.text', '-');
// Show execution scheduler clusters ID.
cy.get('#scheduler-clusters-id').should('have.text', '-');
// Show execution Created At.
cy.get('#created-at').should('have.text', '-');
// Don't show failure tasks.
cy.get('#failure-tasks').should('not.exist');
});
it('when the status is pending, execution API error response', () => {
cy.visit('/resource/task/executions/11');
let interceptCount = 0;
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/11',
},
(req) => {
req.reply({
statusCode: 200,
body: pendingExecution,
});
interceptCount++;
},
).as('execution');
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol').should('exist').and('contain', 11);
// Show execution id.
cy.get('#id').should('contain', 11);
// Show execution status.
cy.get('#status')
.should('have.text', 'PENDING')
.and('have.css', 'background-color', 'rgb(219, 171, 10)')
.find('#pending-icon')
.and('exist')
.find('#error-log-icon')
.and('not.exist');
// Show failure tasks.
cy.get('#failure-tasks').should('exist');
cy.get('#failure-tasks-list > :nth-child(1) > :nth-child(1)').should('have.text', 'kind-worker');
cy.get('#failure-tasks-list > :nth-child(1) > :nth-child(2)').should('have.text', '172.18.0.3');
cy.wait(59000);
// Check how many times the API should be executed after six seconds.
cy.get('@execution').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(2, 0);
});
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs/11',
},
(req) => {
req.reply({
statusCode: 401,
body: { message: 'Unauthorized' },
});
},
);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Unauthorized');
});
});
});

View File

@ -0,0 +1,298 @@
import executions from '../../../fixtures/resource/task/executions.json';
import paginationExecutions from '../../../fixtures/resource/task/pagination-executions.json';
import successExecutions from '../../../fixtures/resource/task/success-executions.json';
import failureExecutions from '../../../fixtures/resource/task/failure-executions.json';
import pendingExecutions from '../../../fixtures/resource/task/pending-executions.json';
describe('Executions', () => {
beforeEach(() => {
cy.signin();
cy.visit('/resource/task/executions');
cy.viewport(1440, 1080);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&type=delete_task',
},
(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, executions, responseHeaders);
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=2&per_page=10&type=delete_task',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/jobs?page=1&per_page=10>;rel=prev,</api/v1/jobs?page=2&per_page=10>;rel=next,</api/v1/jobs?page=1&per_page=10>;rel=first,</api/v1/jobs?page=2&per_page=10>;rel=last',
};
res.send(200, paginationExecutions, responseHeaders);
});
},
);
});
describe('when data is loaded', () => {
it('should display executions all list', () => {
cy.get('[data-testid="isloading"]').should('be.exist');
cy.get('.MuiTabs-flexContainer > .Mui-selected').should('be.visible').and('have.text', 'Executions');
cy.get('[data-testid="isloading"]').should('not.exist');
cy.get('#execution-11').should('exist').find('#PENDING-11').should('exist');
cy.get('.MuiList-root > :nth-child(3) > .MuiButtonBase-root').click();
// The executions status is displayed as PENDING.
cy.get('#execution-11').should('exist').find('#PENDING-11').should('exist');
cy.get('#id-11').should('have.text', 11);
cy.get('#task-id-11').should('have.text', 'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916');
// The executions status is displayed as FAILURE.
cy.get('#execution-10').should('exist').find('#FAILURE-10').should('exist');
cy.get('#task-id-10').should('have.text', 'fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916');
cy.get('#tab-clear').click();
// Then I see that the current page is the clear page!
cy.url().should('include', '/resource/task/clear');
cy.get('#tab-executions').click();
// Then I see that the current page is the executions page!
cy.url().should('include', '/resource/task/executions');
});
it('should display executions success list', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&state=SUCCESS&type=delete_task',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/jobs?page=1&per_page=10&state=SUCCESS>;rel=prev,</api/v1/jobs?page=1&per_page=10&state=SUCCESS>;rel=next,</api/v1/jobs?page=1&per_page=10&state=SUCCESS>;rel=first,</api/v1/jobs?page=1&per_page=10&state=SUCCESS>;rel=last',
};
res.send(200, successExecutions, responseHeaders);
});
},
);
cy.get('.MuiInputBase-root > #states-select').click();
cy.get('[data-value="SUCCESS"]').click();
// Check how many executions are in success status.
cy.get('#executions-list').children().should('have.length', 9);
cy.get('#executions-pagination').should('not.exist');
});
it('should display executions failure list', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&state=FAILURE&type=delete_task',
},
(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=1&per_page=10&state=SUCCESS>;rel=next,</api/v1/jobs?page=1&per_page=10&state=SUCCESS>;rel=first,</api/v1/jobs?page=1&per_page=10&state=SUCCESS>;rel=last',
};
res.send(200, failureExecutions, responseHeaders);
});
},
);
cy.get('.MuiInputBase-root > #states-select').click();
cy.get('[data-value="FAILURE"]').click();
// Check how many executions are in success failure.
cy.get('#executions-list').children().should('have.length', 1);
});
it('should display executions pending list', () => {
let interceptCount = 0;
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&state=PENDING&type=delete_task',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: '</api/v1/jobs?page=1&per_page=10&state=PENDING>;rel=prev,</api/v1/jobs?page=2&per_page=10&state=PENDING>;rel=next,</api/v1/jobs?page=1&per_page=10&state=PENDING>;rel=first,</api/v1/jobs?page=0&per_page=10&state=PENDING>;rel=last',
};
res.send(200, pendingExecutions, responseHeaders);
}),
interceptCount++;
},
).as('executions');
cy.get('.MuiInputBase-root > #states-select').click();
cy.get('[data-value="PENDING"]').click();
// Check how many executions are in pending failure.
cy.get('#executions-list').children().should('have.length', 1);
cy.wait(59000);
// The API should poll.
cy.get('@executions').then(() => {
expect(interceptCount).to.be.greaterThan(0);
expect(interceptCount).to.be.closeTo(1, 0);
});
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&state=PENDING&type=delete_task',
},
(req) => {
req.reply({
statusCode: 401,
body: { message: 'Unauthorized' },
});
},
);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Unauthorized');
});
});
it('when no data is loaded', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&type=delete_task',
},
(req) => {
req.reply((res: any) => {
const responseHeaders = {
...res.headers,
Link: `
</api/v1/jobs?page=1&per_page=10>;rel=prev,</api/v1/jobs?page=1&per_page=10>;rel=next,</api/v1/jobs?page=1&per_page=10>;rel=first,</api/v1/jobs?page=1&per_page=10>;rel=last`,
};
res.send(200, [], responseHeaders);
});
},
);
// No executions list exists.
cy.get('#executions-list').should('not.exist');
// Show You don't have any executions tasks.
cy.get('#no-executions').should('be.visible').and('contain', `You don't have any executions.`);
});
it('should handle API error response', () => {
cy.intercept(
{
method: 'GET',
url: '/api/v1/jobs?page=1&per_page=10&type=delete_task',
},
(req) => {
req.reply({
forceNetworkError: true,
});
},
);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiAlert-message').should('not.exist');
});
describe('pagination', () => {
it('pagination updates results and page number', () => {
// Check number of pagination.
cy.get('#executions-pagination > .MuiPagination-ul').children().should('have.length', 4);
cy.get('#executions-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '1');
// The executions status is displayed as PENDING.
cy.get('#execution-11').should('exist').find('#PENDING-11').should('exist');
cy.get('#id-11').should('have.text', 11);
});
it('when pagination changes, different page results are rendered', () => {
// Go to next page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// Check the current page number.
cy.get('#executions-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('#executions-list').children().should('have.length', 1);
cy.get('#list-1').should('exist').find('#SUCCESS-1').should('exist');
cy.get('.css-mu8687 > .MuiTypography-body1').should('have.text', 1);
});
it('when you click refresh, the paginated results and page numbers remain unchanged.', () => {
// Go to next page.
cy.get('.MuiPagination-ul > :nth-child(4) > .MuiButtonBase-root').click();
// Check the current page number.
cy.get('#executions-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('#list-1').should('exist').find('#SUCCESS-1').should('exist');
// Refresh page.
cy.reload().then(() => {
cy.wait(1000);
});
// Check the current page number.
cy.get('#executions-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
// Show page 1 executions task.
cy.get('#list-1').should('exist').find('#SUCCESS-1').should('exist');
});
it('when returning to the previous page, pagination and results remain unchanged.', () => {
// Go to next page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// Check the current page number.
cy.get('#executions-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('#list-1').should('exist').find('#SUCCESS-1').should('exist');
// Go to show executions page.
cy.get('#detail-1').click();
// Then I see that the current page is the show update personal-access-tokens.
cy.url().should('include', '/resource/task/executions/1');
// Go back to the last page.
cy.go('back');
// Check the current page number.
cy.get('#executions-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('#list-1').should('exist').find('#SUCCESS-1').should('exist');
});
});
});

View File

@ -17,18 +17,6 @@ describe('Scheduler', () => {
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/seed-peers?page=1&per_page=10000000&seed_peer_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: [],
});
},
);
cy.intercept(
{
method: 'GET',
@ -61,26 +49,23 @@ describe('Scheduler', () => {
});
it('click the hostname', () => {
cy.visit('/clusters/1');
cy.visit('/clusters/1/schedulers');
cy.get('#scheduler-table-body > :nth-child(1) > :nth-child(2) > .MuiTypography-root').should(
'have.text',
'scheduler-7',
);
cy.get('#table').click();
cy.get('#scheduler-table-body > :nth-child(1) > :nth-child(2) > .MuiTypography-root').click();
cy.get('#hostname-scheduler-51').should('have.text', 'scheduler-51');
cy.get('#hostname-scheduler-51').click();
// Then I see that the current page is the clusters/1/schedulers/7!
cy.url().should('include', '/clusters/1/schedulers/7');
cy.url().should('include', '/clusters/1/schedulers/51');
});
it('click the breadcrumb', () => {
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'scheduler-cluster-1');
cy.get('#cluster-id').should('be.visible').and('contain', 'scheduler-cluster-1');
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root').click();
cy.get('#cluster-id').click();
// Then I see that the current page is the clusters/1!
cy.url().should('include', '/clusters/1');
@ -88,52 +73,46 @@ describe('Scheduler', () => {
describe('when data is loaded', () => {
it('can display breadcrumb', () => {
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'scheduler-cluster-1');
// Display is loading.
cy.get('[data-testid="isloading"]').should('be.exist');
cy.get(':nth-child(7) > .MuiTypography-root').should('be.visible').and('contain', 'scheduler-7');
cy.get('#cluster-id').should('be.visible').and('contain', 'scheduler-cluster-1');
cy.get('#scheduler-host-name').should('be.visible').and('contain', 'scheduler-7');
cy.get('[data-testid="isloading"]').should('not.exist');
});
it('can display active scheduler', () => {
// Show id.
cy.get('.show_container__qetel > :nth-child(1) > .css-1n0qe7k-MuiTypography-root')
.should('be.visible')
.and('contain', '7');
// Displays the scheduler ID.
cy.get('#id').should('be.visible').and('contain', '7');
// Show hostname.
cy.get(':nth-child(2) > .css-1n0qe7k-MuiTypography-root').should('be.visible').and('contain', 'scheduler-7');
// Displays the scheduler hostname.
cy.get('#hostname').should('be.visible').and('contain', 'scheduler-7');
// Show ip.
cy.get(':nth-child(3) > .css-1n0qe7k-MuiTypography-root').should('be.visible').and('contain', '30.44.98.202');
// Displays the scheduler IP.
cy.get('#ip').should('be.visible').and('contain', '30.44.98.202');
// Show cluster id.
cy.get('.show_clusterIDContaine__Gvk7F > .css-1n0qe7k-MuiTypography-root')
.should('be.visible')
.and('contain', '1');
// Displays the scheduler cluster ID.
cy.get('#cluster-id').should('be.visible').and('contain', '1');
// Show port.
cy.get('.show_schedulerContainer__euX4O > :nth-child(1) > .css-1n0qe7k-MuiTypography-root')
.should('be.visible')
.and('contain', '8002');
// Displays the scheduler port.
cy.get('#port').should('be.visible').and('contain', '8002');
// Show Active background color.
cy.get(':nth-child(2) > .MuiChip-root')
// Displays the active background color.
cy.get('#status')
.should('be.visible')
.and('contain', 'Active')
.and('have.css', 'background-color', 'rgb(46, 143, 121)');
.and('have.css', 'background-color', 'rgb(0, 129, 112)');
// Show features.
cy.get('.show_schedulerContainer__euX4O > :nth-child(3)')
.should('be.visible')
.and('contain', 'Schedule')
.and('contain', 'Preheat');
// Displays the scheduler features.
cy.get('#features').should('be.visible').and('contain', 'Schedule').and('contain', 'Preheat');
// Show created at.
cy.get(':nth-child(4) > .MuiChip-root').should('have.text', '2023-11-09 07:09:06');
// Displays the scheduler creation time.
cy.get('#created-at').should('have.text', '2023-11-09 07:09:06');
// Show updated at.
cy.get(':nth-child(5) > .MuiChip-root').should('have.text', '2023-11-09 07:09:11');
// Displays the scheduler update time.
cy.get('#updated-at').should('have.text', '2023-11-09 07:09:11');
});
it('can display inactive scheduler', () => {
@ -152,14 +131,14 @@ describe('Scheduler', () => {
cy.visit('/clusters/1/schedulers/2');
// Show hostname.
cy.get(':nth-child(2) > .css-1n0qe7k-MuiTypography-root').should('be.visible').and('contain', 'scheduler-2');
// Displays the scheduler hostname.
cy.get('#hostname').should('be.visible').and('contain', 'scheduler-2');
// Show Inactive background color.
cy.get(':nth-child(2) > .MuiChip-root')
// Displays the inactive background color.
cy.get('#status')
.should('be.visible')
.and('contain', 'Inactive')
.and('have.css', 'background-color', 'rgb(28, 41, 58)');
.and('have.css', 'background-color', 'rgb(93, 95, 97)');
});
});
@ -174,43 +153,38 @@ describe('Scheduler', () => {
});
it('unable to display breadcrumb', () => {
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'scheduler-cluster-1');
cy.get('#cluster-id').should('be.visible').and('contain', 'scheduler-cluster-1');
cy.get(':nth-child(7) > .MuiTypography-root').should('be.visible').and('contain', '-');
cy.get('#scheduler-host-name').should('be.visible').and('contain', '-');
});
it('scheduler should render empty status', () => {
// Show ID.
cy.get('.show_container__qetel > :nth-child(1) > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the scheduler ID.
cy.get('#id').should('contain', '-');
// Show Hostname.
cy.get(':nth-child(2) > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the scheduler hostname.
cy.get('#hostname').should('contain', '-');
// Show IP.
cy.get(':nth-child(3) > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the scheduler IP.
cy.get('#ip').should('contain', '-');
// Show Cluster ID.
cy.get('.show_clusterIDContaine__Gvk7F > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the scheduler cluster ID.
cy.get('#cluster-id').should('contain', '-');
// Show Port.
cy.get('.show_schedulerContainer__euX4O > :nth-child(1) > .css-1n0qe7k-MuiTypography-root').should(
'contain',
'-',
);
// Displays the scheduler port.
cy.get('#port').should('contain', '-');
// Show Start.
cy.get('.show_schedulerContainer__euX4O > :nth-child(2)').should('contain', '-');
// Displays the scheduler status.
cy.get('#status').should('contain', '-');
// Show Features.
cy.get('.show_schedulerContainer__euX4O > :nth-child(3)').should('contain', '-');
// Displays the scheduler features.
cy.get('#features').should('contain', '-');
// Show Created At.
cy.get(':nth-child(4) > .MuiChip-root').should('not.exist');
// Displays the scheduler creation time.
cy.get('#created-at').should('contain', '-');
// Show Updated At.
cy.get(':nth-child(5) > .MuiChip-root').should('not.exist');
// Displays the scheduler update time.
cy.get('#updated-at').should('contain', '-');
});
});
@ -240,43 +214,38 @@ describe('Scheduler', () => {
});
it('unable to display breadcrumb', () => {
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'scheduler-cluster-1');
cy.get('#cluster-id').should('be.visible').and('contain', 'scheduler-cluster-1');
cy.get(':nth-child(7) > .MuiTypography-root').should('be.visible').and('contain', '-');
cy.get('#scheduler-host-name').should('be.visible').and('contain', '-');
});
it('scheduler should render empty status', () => {
// Show ID.
cy.get('.show_container__qetel > :nth-child(1) > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the scheduler ID.
cy.get('#id').should('contain', '-');
// Show Hostname.
cy.get(':nth-child(2) > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the scheduler hostname.
cy.get('#hostname').should('contain', '-');
// Show IP.
cy.get(':nth-child(3) > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the scheduler IP.
cy.get('#ip').should('contain', '-');
// Show Cluster ID.
cy.get('.show_clusterIDContaine__Gvk7F > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the scheduler cluster ID.
cy.get('#cluster-id').should('contain', '-');
// Show Port.
cy.get('.show_schedulerContainer__euX4O > :nth-child(1) > .css-1n0qe7k-MuiTypography-root').should(
'contain',
'-',
);
// Displays the scheduler port.
cy.get('#port').should('contain', '-');
// Show Start.
cy.get('.show_schedulerContainer__euX4O > :nth-child(2)').should('contain', '-');
// Displays the scheduler status.
cy.get('#status').should('contain', '-');
// Show Features.
cy.get('.show_schedulerContainer__euX4O > :nth-child(3)').should('contain', '-');
// Displays the scheduler features.
cy.get('#features').should('contain', '-');
// Show Created At.
cy.get(':nth-child(4) > .MuiChip-root').should('not.exist');
// Displays the scheduler creation time.
cy.get('#created-at').should('contain', '-');
// Show Updated At.
cy.get(':nth-child(5) > .MuiChip-root').should('not.exist');
// Displays the scheduler update time.
cy.get('#updated-at').should('contain', '-');
});
});
});

File diff suppressed because it is too large Load Diff

View File

@ -29,18 +29,6 @@ describe('Seed peer', () => {
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/schedulers?page=1&per_page=10000000&scheduler_cluster_id=1',
},
(req) => {
req.reply({
statusCode: 200,
body: [],
});
},
);
cy.intercept({ method: 'GET', url: '/api/v1/seed-peers/10' }, (req) => {
req.reply({
statusCode: 200,
@ -54,13 +42,12 @@ describe('Seed peer', () => {
});
it('click the hostname', () => {
cy.visit('/clusters/1');
cy.visit('/clusters/1/seed-peers');
cy.get('#seed-peer-table-body > :nth-child(1) > :nth-child(2) > .MuiTypography-root').should(
'have.text',
'seed-peer-10',
);
cy.get('#seed-peer-table-body > :nth-child(1) > :nth-child(2) > .MuiTypography-root').click();
cy.get('.MuiPagination-ul > :nth-child(4) > .MuiButtonBase-root').click();
cy.get('#card-hostname-seed-peer-10').should('have.text', 'seed-peer-10');
cy.get('#card-hostname-seed-peer-10').click();
// Then I see that the current page is the clusters/1/seed-peers/10!
cy.url().should('include', '/clusters/1/seed-peers/10');
@ -68,11 +55,9 @@ describe('Seed peer', () => {
it('click the breadcrumb', () => {
// Check for breadcrumb.
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'seed-peer-cluster-1');
cy.get('#seed-peer-cluster-id').should('be.visible').and('contain', 'seed-peer-cluster-1');
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root').click();
cy.get('#seed-peer-cluster-id').click();
// Then I see that the current page is the clusters/1!
cy.url().should('include', '/clusters/1');
@ -80,53 +65,51 @@ describe('Seed peer', () => {
describe('when data is loaded', () => {
it('can display breadcrumb', () => {
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'seed-peer-cluster-1');
// Show isloading.
cy.get('[data-testid="isloading"]').should('be.exist');
cy.get('#seed-peer-cluster-id').should('be.visible').and('contain', 'seed-peer-cluster-1');
cy.get('.MuiBreadcrumbs-ol > :nth-child(7) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'seed-peer-10');
cy.get('#seed-peer-hostname').should('be.visible').and('contain', 'seed-peer-10');
cy.get('[data-testid="isloading"]').should('not.exist');
});
it('can display active seed peer', () => {
// Show ID.
cy.get('.show_container__nkAxK > :nth-child(1)').should('be.visible').and('contain', '10');
// Displays the seed peer ID.
cy.get('#id').should('be.visible').and('contain', '10');
// Show Hostname.
cy.get('.show_container__nkAxK > :nth-child(2)').should('be.visible').and('contain', 'seed-peer-10');
// Displays the seed peer hostname.
cy.get('#hostname').should('be.visible').and('contain', 'seed-peer-10');
// Show IP.
cy.get('.show_container__nkAxK > :nth-child(3)').should('be.visible').and('contain', '33.149.137.183');
// Displays the seed peer IP.
cy.get('#ip').should('be.visible').and('contain', '33.149.137.183');
// Show Cluster ID.
cy.get('.show_clusterIDContaine__GdZwH').should('be.visible').and('contain', '1');
// Displays the seed peer cluster ID.
cy.get('#cluster-id').should('be.visible').and('contain', '1');
// Show Port.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(1)').should('be.visible').and('contain', '65006');
// Displays the seed peer port.
cy.get('#port').should('be.visible').and('contain', '65006');
// Show Download Port.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(2)').should('be.visible').and('contain', '65002');
// Displays the seed peer Download Port.
cy.get('#download-port').should('be.visible').and('contain', '65002');
// Show Object Storage Port.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(3) > .css-1n0qe7k-MuiTypography-root')
.should('be.visible')
.and('contain', '443');
// Displays the seed peer Object Storage Port.
cy.get('#object-storage-port').should('be.visible').and('contain', '443');
// Show Type.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(4)').should('be.visible').and('contain', 'Supe');
// Displays the seed peer Type.
cy.get('#type').should('be.visible').and('contain', 'Supe');
// Show Active background color.
cy.get(':nth-child(5) > .MuiChip-root')
// Displays the seed peer Active background color.
cy.get('#status')
.should('be.visible')
.and('contain', 'Active')
.and('have.css', 'background-color', 'rgb(46, 143, 121)');
.and('have.css', 'background-color', 'rgb(0, 129, 112)');
// Show Created At.
cy.get(':nth-child(6) > .MuiChip-root > .MuiChip-label').should('have.text', '2023-11-11 20:09:08');
// Displays the seed peer Created At.
cy.get('#created-at').should('have.text', '2023-11-11 20:09:08');
// Show Updated At.
cy.get(':nth-child(7) > .MuiChip-root > .MuiChip-label').should('have.text', '2023-11-11 20:09:13');
// Displays the seed peer Updated At.
cy.get('#updated-at').should('have.text', '2023-11-11 20:09:13');
});
it('can display inactive seed peer', () => {
@ -139,14 +122,14 @@ describe('Seed peer', () => {
cy.visit('/clusters/1/seed-peers/11');
// Show Hostname.
cy.get('.show_container__nkAxK > :nth-child(2)').should('be.visible').and('contain', 'seed-peer-11');
// Displays the seed peer hostname.
cy.get('#hostname').should('be.visible').and('contain', 'seed-peer-11');
// Show Inactive background color.
cy.get(':nth-child(5) > .MuiChip-root')
// Displays the seed peer Inactive background color.
cy.get('#status')
.should('be.visible')
.and('contain', 'Inactive')
.and('have.css', 'background-color', 'rgb(28, 41, 58)');
.and('have.css', 'background-color', 'rgb(93, 95, 97)');
});
});
@ -162,46 +145,44 @@ describe('Seed peer', () => {
});
it('unable to display breadcrumb', () => {
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'seed-peer-cluster-1');
cy.get('#seed-peer-cluster-id').should('be.visible').and('contain', 'seed-peer-cluster-1');
cy.get('.MuiBreadcrumbs-ol > :nth-child(7) > .MuiTypography-root').should('be.visible').and('contain', '-');
cy.get('#seed-peer-hostname').should('be.visible').and('contain', '-');
});
it('seed peer should render empty status', () => {
// Show ID.
cy.get('.show_container__nkAxK > :nth-child(1)').should('contain', '-');
// Displays the seed peer ID.
cy.get('#id').should('contain', '-');
// Show Hostname.
cy.get('.show_container__nkAxK > :nth-child(2)').should('contain', '-');
// Displays the seed peer hostname.
cy.get('#hostname').should('contain', '-');
// Show IP.
cy.get('.show_container__nkAxK > :nth-child(3)').should('contain', '-');
// Displays the seed peer IP.
cy.get('#ip').should('contain', '-');
// Show Cluster ID.
cy.get('.show_clusterIDContaine__GdZwH').should('contain', '-');
// Displays the seed peer cluster ID.
cy.get('#cluster-id').should('contain', '-');
// Show Port.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(1)').should('contain', '-');
// Displays the seed peer port.
cy.get('#port').should('contain', '-');
// Show Download Port.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(2)').should('contain', '-');
// Displays the seed peer Download Port.
cy.get('#download-port').should('contain', '-');
// Show Object Storage Port.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(3) > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the seed peer Object Storage Port.
cy.get('#object-storage-port').should('contain', '-');
// Show Type.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(4)').should('contain', '-');
// Displays the seed peer Type.
cy.get('#type').should('contain', '-');
// Show Start.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(5)').should('contain', '-');
cy.get('#status').should('contain', '-');
// Show Created At.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(6)').should('contain', '-');
// Displays the seed peer Created At.
cy.get('#created-at').should('contain', '-');
// Show Updated At.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(7)').should('contain', '-');
// Displays the seed peer Updated At.
cy.get('#updated-at').should('contain', '-');
});
});
@ -226,46 +207,44 @@ describe('Seed peer', () => {
});
it('unable to display breadcrumb', () => {
cy.get('.MuiBreadcrumbs-ol > :nth-child(3) > .MuiTypography-root')
.should('be.visible')
.and('contain', 'seed-peer-cluster-1');
cy.get('#seed-peer-cluster-id').should('be.visible').and('contain', 'seed-peer-cluster-1');
cy.get('.MuiBreadcrumbs-ol > :nth-child(7) > .MuiTypography-root').should('be.visible').and('contain', '-');
cy.get('#seed-peer-hostname').should('be.visible').and('contain', '-');
});
it('seed peer should render empty status', () => {
// Show ID.
cy.get('.show_container__nkAxK > :nth-child(1)').should('contain', '-');
// Displays the seed peer ID.
cy.get('#id').should('contain', '-');
// Show Hostname.
cy.get('.show_container__nkAxK > :nth-child(2)').should('contain', '-');
// Displays the seed peer hostname.
cy.get('#hostname').should('contain', '-');
// Show IP.
cy.get('.show_container__nkAxK > :nth-child(3)').should('contain', '-');
// Displays the seed peer IP.
cy.get('#ip').should('contain', '-');
// Show Cluster ID.
cy.get('.show_clusterIDContaine__GdZwH').should('contain', '-');
// Displays the seed peer cluster ID.
cy.get('#cluster-id').should('contain', '-');
// Show Port.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(1)').should('contain', '-');
// Displays the seed peer port.
cy.get('#port').should('contain', '-');
// Show Download Port.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(2)').should('contain', '-');
// Displays the seed peer Download Port.
cy.get('#download-port').should('contain', '-');
// Show Object Storage Port.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(3) > .css-1n0qe7k-MuiTypography-root').should('contain', '-');
// Displays the seed peer Object Storage Port.
cy.get('#object-storage-port').should('contain', '-');
// Show Type.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(4)').should('contain', '-');
// Displays the seed peer Type.
cy.get('#type').should('contain', '-');
// Show Start.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(5)').should('contain', '-');
cy.get('#status').should('contain', '-');
// Show Created At.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(6)').should('contain', '-');
// Displays the seed peer Created At.
cy.get('#created-at').should('contain', '-');
// Show Updated At.
cy.get('.show_seedPeerContainer__X4hKN > :nth-child(7)').should('contain', '-');
// Displays the seed peer Updated At.
cy.get('#updated-at').should('contain', '-');
});
});
});

File diff suppressed because it is too large Load Diff

View File

@ -73,11 +73,11 @@ describe('Signin', () => {
cy.location('pathname').should('eq', '/clusters');
// Prompt message: Please change your password promptly when logging in for the first time!
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('exist');
cy.get('#change-password-warning').should('exist');
// Close the prompt message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
cy.get('#change-password-warning').should('not.exist');
// Menu exists users.
cy.get('[href="/users"]').should('exist');
@ -91,7 +91,7 @@ describe('Signin', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Unauthorized');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
cy.get('.MuiAlert-message').should('not.exist');
});
it('try to signin with invalid account', () => {
@ -102,7 +102,7 @@ describe('Signin', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Unauthorized');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
cy.get('.MuiAlert-message').should('not.exist');
});
it('try to signin with guest user', () => {
@ -136,12 +136,12 @@ describe('Signin', () => {
});
it('click the `Create an account` button', () => {
cy.get('.MuiTypography-inherit > .MuiTypography-root').click();
cy.get('#create-account').click();
// Then I see that the current page is the signup!
cy.url().should('include', '/signup');
cy.get('.MuiTypography-inherit > .MuiTypography-root').click();
cy.get('#sign-in').click();
// Then I see that the current page is the signin!
cy.url().should('include', '/signin');
@ -151,10 +151,10 @@ describe('Signin', () => {
cy.get('#account').type('root');
cy.get('#password').type(`dragonfly`);
cy.get('.MuiInputBase-root > .MuiButtonBase-root').click();
cy.get('#visibility-off').click();
cy.get('#password').should('have.value', 'dragonfly');
cy.get('.MuiInputBase-root > .MuiButtonBase-root').click();
cy.get('#visibility').click();
cy.get('#password').should('not.have.text', 'dragonfly');
});
@ -174,7 +174,7 @@ describe('Signin', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
cy.get('.MuiAlert-message').should('not.exist');
});
it('try to verify account and password', () => {
@ -183,11 +183,14 @@ describe('Signin', () => {
const passwordLengthExceeds = _.times(17, () => _.sample('abcdefghijklmnopqrstuvwxyz')).join('');
cy.get('#account').type(nameNotLongEnough);
// Show account help text.
cy.get('#account-helper-text').should('be.visible').and('contain', 'Fill in the characters, the length is 3-10.');
cy.get('#account').type(nameLengthExceeds);
cy.get('#account-helper-text').should('be.visible').and('contain', 'Fill in the characters, the length is 3-10.');
// Show password help text.
cy.get('#password').type(passwordLengthExceeds);
cy.get('#password-helper-text')
.should('be.visible')

View File

@ -43,7 +43,7 @@ describe('Signup', () => {
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
cy.get('.MuiAlert-message').should('not.exist');
});
it('cannot create account with existing account', () => {
@ -55,23 +55,32 @@ describe('Signup', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Conflict');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
cy.get('.MuiAlert-message').should('not.exist');
});
it('click the password hide butto and confirm password hide butto', () => {
cy.get('#password').type('dragonfly1');
cy.get('#confirmPassword').type(`dragonfly1{enter}`);
cy.get('.MuiInputBase-root > .MuiButtonBase-root > [data-testid="VisibilityOffIcon"] > path').click();
cy.get('#confirmPassword').should('have.value', 'dragonfly1');
// Click the password hide butto.
cy.get('#visibility-off').click();
cy.get('[data-testid="VisibilityOffIcon"]').click();
// Can show password.
cy.get('#confirmPassword').should('have.value', 'dragonfly1');
cy.get('#visibility').should('be.visible');
// Click the password hide butto.
cy.get('#confirm-password-visibility-off').click();
// // Can show confirm password.
cy.get('#confirmPassword').should('have.value', 'dragonfly1');
cy.get('#confirm-password-visibility').should('be.visible');
});
it('cannot signup without required attributes', () => {
cy.get('.MuiButton-root').click();
// The help text should be displayed.
cy.get('#account-helper-text').should('be.visible').and('contain', 'Fill in the characters, the length is 3-10.');
cy.get('#email-helper-text').should('be.visible').and('contain', 'Email is invalid or already taken.');
cy.get('#confirmPassword-helper-text').should('be.visible').and('contain', 'Please enter the same password.');
@ -86,6 +95,7 @@ describe('Signup', () => {
});
});
// Fill in the form.
cy.get('#account').type('root-1');
cy.get('#email').type('root@console.com');
cy.get('#password').type('dragonfly1');
@ -94,16 +104,16 @@ describe('Signup', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
cy.get('.MuiAlert-message').should('not.exist');
});
it('click the `Sign in` button', () => {
cy.get('.MuiTypography-inherit > .MuiTypography-root').click();
cy.get('#sign-in').click();
// Then I see that the current page is the signin!
cy.url().should('include', '/signin');
cy.get('.MuiTypography-inherit > .MuiTypography-root').click();
cy.get('#create-account').click();
// Then I see that the current page is the signup!
cy.url().should('include', '/signup');

View File

@ -0,0 +1,252 @@
import _ from 'lodash';
import createUsers from '../../fixtures/users/create-user.json';
import users from '../../fixtures/users/users.json';
describe('Create user', () => {
beforeEach(() => {
cy.signin();
cy.visit('/users/new');
cy.viewport(1440, 1080);
});
it('can create user', () => {
cy.visit('/users');
cy.intercept(
{
method: 'GET',
url: '/api/v1/users?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: users,
});
},
);
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// There is only one piece of data on the last pag.
cy.get('#user-table-body').children().should('have.length', 1);
cy.get('#create-user').click();
// Then I see that the current page is the New user!
cy.url().should('include', '/users/new');
cy.get('.MuiBreadcrumbs-ol').should('contain', 'New user');
cy.get('#account').type('billy');
cy.get('#email').type('billy@example.com');
cy.get('#bio').type('I am billy');
cy.get('#phone').type('18012341234');
cy.get('#location').type('ParisFrance');
cy.get('#password').type('Dragonfly1');
cy.get('#confirmPassword').type('Dragonfly1');
cy.intercept('POST', '/api/v1/users/signup', (req) => {
req.reply({
statusCode: 200,
body: [],
});
});
cy.intercept(
{
method: 'GET',
url: '/api/v1/users?page=1&per_page=10000000',
},
(req) => {
req.reply({
statusCode: 200,
body: createUsers,
});
},
);
cy.get('#save').click();
// Go to last page.
cy.get('.MuiPagination-ul > :nth-child(3) > .MuiButtonBase-root').click();
// There is only one piece of data on the last pag.
cy.get('#user-table-body').children().should('have.length', 2);
cy.get('#user-table-body > :nth-child(2) > :nth-child(2)').should('have.text', 'billy');
});
it('cannot create account with existing email', () => {
cy.intercept('POST', '/api/v1/users/signup', (req) => {
req.reply({
statusCode: 409,
body: {
message: 'Conflict',
},
});
});
cy.get('#account').type('root-1');
cy.get('#email').type('lucy@example.com');
cy.get('#phone').type('18012341234');
cy.get('#password').type('dragonfly1');
cy.get('#confirmPassword').type(`dragonfly1{enter}`);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Conflict');
// Close error message.
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
});
it('cannot create account with existing account', () => {
cy.intercept('POST', '/api/v1/users/signup', (req) => {
req.reply({
statusCode: 409,
body: {
message: 'Conflict',
},
});
});
cy.get('#account').type('root');
cy.get('#email').type('root@console.co');
cy.get('#phone').type('18012341234');
cy.get('#password').type('dragonfly1');
cy.get('#confirmPassword').type(`dragonfly1{enter}`);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Conflict');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
});
it('click the password hide butto and confirm password hide butto', () => {
cy.get('#password').type('dragonfly1');
cy.get('#confirmPassword').type(`dragonfly1{enter}`);
cy.get('.MuiInputBase-root > .MuiButtonBase-root > [data-testid="VisibilityOffIcon"] > path').click();
cy.get('#confirmPassword').should('have.value', 'dragonfly1');
cy.get('[data-testid="VisibilityOffIcon"]').click();
cy.get('#confirmPassword').should('have.value', 'dragonfly1');
});
it('should handle API error response', () => {
cy.intercept('POST', '/api/v1/users/signup', (req) => {
req.reply({
forceNetworkError: true,
});
});
cy.get('#account').type('root-1');
cy.get('#email').type('root@console.com');
cy.get('#phone').type('18012341234');
cy.get('#password').type('dragonfly1');
cy.get('#confirmPassword').type(`dragonfly1{enter}`);
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('contain', 'Failed to fetch');
cy.get('.MuiAlert-action > .MuiButtonBase-root').click();
cy.get('.MuiSnackbar-root > .MuiPaper-root').should('not.exist');
});
it('click the `CANCEL button', () => {
cy.get('#cancel').click();
// Then I see that the current page is the users!
cy.url().should('include', '/users');
});
it('cannot signup with invalid attributes', () => {
const nameNotLongEnough = _.times(2, () => _.sample('abcdefghijklmnopqrstuvwxyz')).join('');
const nameLengthExceeds = _.times(11, () => _.sample('abcdefghijklmnopqrstuvwxyz')).join('');
const passsword = _.times(8, () => _.sample('abcdefghijklmnopqrstuvwxyz')).join('');
const location = _.times(101, () => _.sample('abcdefghijklmnopqrstuvwxyz')).join('');
// Should display message account the validation error.
cy.get('#account').type(nameNotLongEnough);
cy.get('#account-helper-text').should('be.visible').and('contain', 'Fill in the characters, the length is 3-10.');
cy.get('#account').type(nameLengthExceeds);
cy.get('#account-helper-text').should('be.visible').and('contain', 'Fill in the characters, the length is 3-10.');
cy.get('#account').clear();
cy.get('#account').type('root');
// Verification passed.
cy.get('#account-helper-text').should('not.exist');
// Should display message email the validation error.
cy.get('#email').type('root');
cy.get('#email-helper-text').should('be.visible').and('contain', 'Email is invalid or already taken.');
cy.get('#email').clear();
cy.get('#email').type('root@console.com');
// Verification passed.
cy.get('#email-helper-text').should('not.exist');
// Should display message phone the validation error.
cy.get('#phone').type('001');
cy.get('#phone-helper-text').should('be.visible').and('contain', 'Enter a valid phone number.');
cy.get('#phone').clear();
cy.get('#phone').type('+86 19101011212');
cy.get('#phone-helper-text').should('not.exist');
// Should display message location the validation error.
cy.get('#location').clear();
cy.get('#location').type(location);
// Show verification error message.
cy.get('#location-helper-text')
.should('be.visible')
.and('have.text', 'Fill in the characters, the length is 0-100.');
cy.get('#location').clear();
cy.get('#location').type('Shanghai');
cy.get('#location-helper-text').should('not.exist');
// Should display message password the validation error.
cy.get('#password').type(passsword);
// Missing number.
cy.get('#password-helper-text')
.should('be.visible')
.and('contain', 'At least 8-16 characters, with at least 1 lowercase letter and 1 number.');
cy.get('#password').clear();
cy.get('#password').type('dragonfly1');
// Verification passed.
cy.get('#password-helper-text').should('not.exist');
// Should display message confirm password the validation error.
cy.get('#confirmPassword').type(`dragonfly`);
// Confirm password verification error when the two passwords are not the same.
cy.get('#confirmPassword-helper-text').should('be.visible').and('contain', 'Please enter the same password.');
cy.get('#confirmPassword').clear();
cy.get('#confirmPassword').type('dragonfly1');
// verification passed.
cy.get('#confirmPassword-helper-text').should('not.exist');
});
});

View File

@ -39,18 +39,6 @@ describe('Users', () => {
});
},
);
cy.intercept(
{
method: 'GET',
url: '/api/v1/users/3',
},
(req) => {
req.reply({
statusCode: 200,
body: guestUser,
});
},
);
cy.intercept(
{
method: 'GET',
@ -78,6 +66,9 @@ describe('Users', () => {
});
it('can display users table', () => {
// Show isloading.
cy.get('[data-testid="isloading"]').should('be.exist');
// Show root user information.
cy.get('.MuiTableBody-root > :nth-child(1) > :nth-child(2)').should('be.visible').and('have.text', 'root');
@ -86,7 +77,7 @@ describe('Users', () => {
.should('be.visible')
.and('have.text', 'root@example.com');
// Show root user location.
// Show root user #location.
cy.get('.MuiTableBody-root > :nth-child(1) > :nth-child(4)').should('be.visible').and('have.text', 'Shanghai');
// Show root user state.
@ -95,8 +86,13 @@ describe('Users', () => {
// The update role button for the root user is not displayed.
cy.get('#edit-root > .MuiBox-root').should('not.exist');
// Does not show isloading.
cy.get('[data-testid="isloading"]').should('not.exist');
cy.get('#action-root').click();
// Show root user detail button.
cy.get('#detail-root > .MuiBox-root').should('exist');
cy.get('#detail-root').should('exist');
// Show lucy user information.
cy.get('.MuiTableBody-root > :nth-child(2) > :nth-child(2)').should('be.visible').and('have.text', 'lucy');
@ -108,9 +104,12 @@ describe('Users', () => {
cy.get('.MuiTableBody-root > :nth-child(2) > :nth-child(4)').should('be.visible').and('have.text', 'Hangzhou');
cy.get('.MuiTableBody-root > :nth-child(2) > :nth-child(5)').should('be.visible').and('have.text', 'Enable');
cy.get('body').click('topLeft');
cy.get('#edit-lucy > .MuiBox-root').should('exist');
cy.get('#detail-lucy > .MuiBox-root').should('exist');
cy.get('#action-lucy').click();
cy.get('#edit-lucy').should('exist');
cy.get('#detail-lucy').should('exist');
// Show jack user information.
cy.get('.MuiTableBody-root > :nth-child(3) > :nth-child(2)').should('be.visible').and('have.text', 'jack');
@ -123,52 +122,81 @@ describe('Users', () => {
cy.get('.MuiTableBody-root > :nth-child(3) > :nth-child(5)').should('be.visible').and('have.text', 'Enable');
cy.get('#edit-jack > .MuiBox-root').should('exist');
cy.get('#detail-jack > .MuiBox-root').should('exist');
// Close menu.
cy.get('body').click('topLeft');
cy.get('#action-jack').click();
cy.get('#edit-jack').should('exist');
cy.get('#detail-jack').should('exist');
});
it('can display user detail', () => {
// Click detail button.
cy.get('#detail-root > .MuiBox-root').click();
cy.get('#action-root').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #detail-root').click();
// Display user lucy details.
cy.get('.MuiDrawer-root > .MuiPaper-root').should('be.visible');
cy.get(':nth-child(3) > .css-e784if-MuiTypography-root').should('have.text', 1);
cy.get(':nth-child(5) > .css-e784if-MuiTypography-root').should('have.text', 'root');
cy.get('.css-e784if-MuiTypography-root > .MuiChip-root').should('have.text', 'root');
cy.get(':nth-child(9) > .css-e784if-MuiTypography-root').should('have.text', 'root@example.com');
cy.get(':nth-child(11) > .css-e784if-MuiTypography-root').should('have.text', '1234567890');
cy.get('.users_emailContent__jraG8 > .MuiTypography-root').should('have.text', 'Hangzhou');
cy.get('.MuiList-root > :nth-child(15)').should('contain', '2023-11-06 06:09:04');
cy.get('.MuiList-root > :nth-child(17)').should('contain', '2023-11-06 06:09:04');
cy.get('#id').should('have.text', 1);
cy.get('#name').should('have.text', 'root');
cy.get('#role').should('have.text', 'root');
cy.get('#email').should('have.text', 'root@example.com');
cy.get('#phone').should('have.text', '+86 153 1234 5678');
cy.get('#location').should('have.text', 'Hangzhou');
cy.get('#created-at').should('contain', '2023-11-06 06:09:04');
cy.get('#updated-at').should('contain', '2023-11-06 06:09:04');
// closure user details.
cy.get('.MuiListSubheader-root > .MuiButtonBase-root').click();
cy.get('#closure-user-detail').click();
cy.get('#detail-jack').click();
cy.get('#action-jack').click();
cy.intercept(
{
method: 'GET',
url: '/api/v1/users/3',
},
(req) => {
req.reply((res) => {
res.setDelay(1000);
res.send({
statusCode: 200,
body: guestUser,
});
});
},
);
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #detail-jack').click();
cy.get('[data-testid="detail-isloading"]').should('be.exist');
// Display user jack details.
cy.get('.MuiDrawer-root > .MuiPaper-root').should('be.visible');
cy.get(':nth-child(3) > .css-e784if-MuiTypography-root').should('have.text', 2);
cy.get(':nth-child(5) > .css-e784if-MuiTypography-root').should('have.text', 'jack');
cy.get('.css-e784if-MuiTypography-root > .MuiChip-root').should('have.text', 'guest');
cy.get(':nth-child(9) > .css-e784if-MuiTypography-root').should('have.text', 'jack@example.com');
cy.get(':nth-child(11) > .css-e784if-MuiTypography-root').should('have.text', '1234567890');
cy.get('.users_emailContent__jraG8 > .MuiTypography-root').should('have.text', 'Shanghai');
cy.get('.MuiList-root > :nth-child(15)').should('contain', '2023-11-07 06:09:04');
cy.get('.MuiList-root > :nth-child(17)').should('contain', '2023-11-07 06:09:04');
cy.get('#id').should('have.text', 2);
cy.get('#name').should('have.text', 'jack');
cy.get('#role').should('have.text', 'guest');
cy.get('#email').should('have.text', 'jack@example.com');
cy.get('#phone').should('have.text', '+86 153 1234 5678');
cy.get('#location').should('have.text', 'Shanghai');
cy.get('#created-at').should('contain', '2023-11-07 06:09:04');
cy.get('#updated-at').should('contain', '2023-11-07 06:09:04');
cy.get('[data-testid="detail-isloading"]').should('not.exist');
});
it('can display update user', () => {
// Click update user button.
cy.get('#edit-lucy > .MuiBox-root').click();
cy.get('#action-lucy').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-lucy').click();
// Check role.
cy.get('#role-root').should('be.checked').check({ force: true });
cy.get('#role-guest');
cy.get('body').click('topLeft');
cy.get('#edit-jack > .MuiBox-root').click();
cy.get('#action-jack').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-jack').click();
cy.get('#role-root').should('not.be.checked');
cy.get('#role-guest').should('be.checked').check({ force: true });
@ -227,8 +255,8 @@ describe('Users', () => {
cy.guestSignin();
// The 404 page is displayed and the user page does not exist.
cy.get('.MuiTypography-h4').should('have.text', 'Something gone wrong!');
cy.get('.MuiTypography-body1').should('have.text', `The page you were looking for doesn't exist.`);
cy.get('#something-went-wrong').should('have.text', 'Something gone wrong!');
cy.get('#404-help-text').should('have.text', `The page you were looking for doesn't exist.`);
});
describe('get role API error response', () => {
@ -272,17 +300,18 @@ describe('Users', () => {
},
);
cy.get('#detail-jack').click();
cy.get('#action-jack').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #detail-jack').click();
// Display user jack details.
cy.get(':nth-child(3) > .css-e784if-MuiTypography-root').should('have.text', 0);
cy.get(':nth-child(5) > .css-e784if-MuiTypography-root').should('have.text', '-');
cy.get('#id').should('have.text', 0);
cy.get('#name').should('have.text', '-');
cy.get('.MuiList-root > :nth-child(7)').should('contain', '-');
cy.get(':nth-child(9) > .css-e784if-MuiTypography-root').should('have.text', '-');
cy.get(':nth-child(11) > .css-e784if-MuiTypography-root').should('have.text', '-');
cy.get('.users_emailContent__jraG8 > .MuiTypography-root').should('have.text', '-');
cy.get('.MuiList-root > :nth-child(15)').should('contain', '-');
cy.get('.MuiList-root > :nth-child(17)').should('contain', '-');
cy.get('#email').should('have.text', '-');
cy.get('#phone').should('have.text', '-');
cy.get('#location').should('have.text', '-');
cy.get('#created-at').should('contain', '-');
cy.get('#updated-at').should('contain', '-');
});
});
@ -346,7 +375,7 @@ describe('Users', () => {
// Check the current page number.
cy.get('#user-pagination > .MuiPagination-ul .Mui-selected').should('have.text', '2');
cy.get('[href="/clusters"]').click();
cy.get('#clusters').click();
// Then I see that the current page is the show update personal-access-tokens.
cy.url().should('include', '/clusters');
@ -401,7 +430,8 @@ describe('Users', () => {
},
);
cy.get('#edit-lucy > .MuiBox-root').click();
cy.get('#action-lucy').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-lucy').click();
cy.get('#role-root').should('be.checked').check({ force: true });
cy.get('#role-guest').should('not.be.checked');
@ -424,7 +454,8 @@ describe('Users', () => {
},
);
cy.get('#edit-lucy > .MuiBox-root').click();
cy.get('#action-lucy').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-lucy').click();
// Change success message.
cy.get('.MuiAlert-message').should('be.visible').and('have.text', 'Submission successful!');
@ -472,7 +503,8 @@ describe('Users', () => {
},
);
cy.get('#edit-jack > .MuiBox-root').click();
cy.get('#action-jack').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-jack').click();
// Check if role is guest.
cy.get('#role-root').should('not.be.checked');
@ -496,7 +528,8 @@ describe('Users', () => {
},
);
cy.get('#edit-jack > .MuiBox-root').click();
cy.get('#action-jack').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-jack').click();
// Check if role is root.
cy.get('#role-root').should('be.checked').check({ force: true });
@ -557,7 +590,8 @@ describe('Users', () => {
);
// Click edit button.
cy.get('#edit-lucy > .MuiBox-root').click();
cy.get('#action-lucy').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-lucy').click();
cy.get('#role-root').should('be.checked').check({ force: true });
cy.get('#role-guest').should('not.be.checked');
@ -582,7 +616,8 @@ describe('Users', () => {
},
);
cy.get('#edit-lucy > .MuiBox-root').click();
cy.get('#action-lucy').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-lucy').click();
// Check role.
cy.get('#role-root').should('not.be.checked');
@ -608,16 +643,6 @@ describe('Users', () => {
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('have.text', 'permission deny');
// Refresh page.
cy.reload().then(() => {
cy.wait(2000);
});
// When the user role is guest, the user page will no longer be displayed.
cy.get('.MuiTypography-body1')
.should('be.visible')
.and('have.text', `The page you were looking for doesn't exist.`);
});
it('get role API error response', () => {
@ -633,7 +658,8 @@ describe('Users', () => {
},
);
cy.get('#edit-lucy > .MuiBox-root').click();
cy.get('#action-lucy').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-lucy').click();
// Show error message.
cy.get('.MuiAlert-message').should('be.visible').and('have.text', 'Failed to fetch');
@ -679,7 +705,8 @@ describe('Users', () => {
},
);
cy.get('#edit-lucy > .MuiBox-root').click();
cy.get('#action-lucy').click();
cy.get(':nth-child(12) > .MuiPaper-root > .MuiList-root > .users_menu__4L0WC > #edit-lucy').click();
// Check if role is root.
cy.get('#role-root').should('be.checked').check({ force: true });
@ -693,4 +720,34 @@ describe('Users', () => {
cy.get('.MuiAlert-message').should('be.visible').and('have.text', 'Failed to fetch');
});
});
describe('search', () => {
it('can search for user name', () => {
cy.get('#user-table-body').children().should('have.length', 10);
// Enter user name root.
cy.get('#search-user').type('root');
// Check table.
cy.get('#user-table-body').children().should('have.length', 1);
cy.get('#user-name-root').should('have.text', 'root');
});
it('should be queried based on the query string', () => {
cy.visit('/users?search=jack');
// The search box should be jack.
cy.get('#search-user').should('have.value', 'jack');
cy.get('#user-name-jack').should('have.text', 'jack');
});
it('should search for non-existent user name', () => {
cy.get('#search-user').type('dragonfly');
// No users.
cy.get('#no-user-table').should('have.text', `You don't have user.`);
});
});
});

View File

@ -0,0 +1,17 @@
[
{
"id": 12,
"created_at": "2025-05-21T02:34:11.025Z",
"updated_at": "2025-05-21T02:34:11.025Z",
"is_del": 0,
"actor_type": "PAT",
"actor_name": "unknown",
"event_type": "API",
"operation": "POST",
"operated_at": "2025-05-21T02:34:07Z",
"state": "SUCCESS",
"path": "/api/v1/users/signin",
"status_code": 200,
"detail": null
}
]

View File

@ -0,0 +1,47 @@
[
{
"id": 7,
"created_at": "2025-05-26T03:19:08.613Z",
"updated_at": "2025-05-26T03:19:08.613Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users/1",
"status_code": 200,
"detail": null
},
{
"id": 10,
"created_at": "2025-05-21T02:34:11.025Z",
"updated_at": "2025-05-21T02:34:11.025Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "unknown",
"event_type": "API",
"operation": "POST",
"operated_at": "2025-05-21T02:34:07Z",
"state": "SUCCESS",
"path": "/api/v1/users/signin",
"status_code": 200,
"detail": null
},
{
"id": 11,
"created_at": "2025-05-20T02:34:44.139Z",
"updated_at": "2025-05-20T02:34:44.139Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "unknown",
"event_type": "API",
"operation": "POST",
"operated_at": "2025-05-20T02:34:41Z",
"state": "FAILURE",
"path": "/api/v1/users/signin",
"status_code": 401,
"detail": null
}
]

View File

@ -0,0 +1,137 @@
[
{
"id": 1,
"created_at": "2025-05-26T03:19:25.585Z",
"updated_at": "2025-05-26T03:19:25.585Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:23Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 2,
"created_at": "2025-05-26T03:19:20.594Z",
"updated_at": "2025-05-26T03:19:20.594Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:16Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 3,
"created_at": "2025-05-26T03:19:18.583Z",
"updated_at": "2025-05-26T03:19:18.583Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:17Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 4,
"created_at": "2025-05-26T03:19:13.659Z",
"updated_at": "2025-05-26T03:19:13.659Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:09Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 5,
"created_at": "2025-05-26T03:19:08.822Z",
"updated_at": "2025-05-26T03:19:08.822Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 6,
"created_at": "2025-05-26T03:19:08.822Z",
"updated_at": "2025-05-26T03:19:08.822Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 8,
"created_at": "2025-05-26T03:19:08.613Z",
"updated_at": "2025-05-26T03:19:08.613Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users/1",
"status_code": 200,
"detail": null
},
{
"id": 9,
"created_at": "2025-05-26T03:19:08.613Z",
"updated_at": "2025-05-26T03:19:08.613Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 13,
"created_at": "2025-05-19T08:09:16.26Z",
"updated_at": "2025-05-19T08:09:16.26Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-19T08:09:14Z",
"state": "SUCCESS",
"path": "/api/v1/users/3",
"status_code": 200,
"detail": null
}
]

View File

@ -0,0 +1,152 @@
[
{
"id": 1,
"created_at": "2025-05-26T03:19:25.585Z",
"updated_at": "2025-05-26T03:19:25.585Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:23Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 2,
"created_at": "2025-05-26T03:19:20.594Z",
"updated_at": "2025-05-26T03:19:20.594Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:16Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 3,
"created_at": "2025-05-26T03:19:18.583Z",
"updated_at": "2025-05-26T03:19:18.583Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:17Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 4,
"created_at": "2025-05-26T03:19:13.659Z",
"updated_at": "2025-05-26T03:19:13.659Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:09Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 5,
"created_at": "2025-05-26T03:19:08.822Z",
"updated_at": "2025-05-26T03:19:08.822Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 6,
"created_at": "2025-05-26T03:19:08.822Z",
"updated_at": "2025-05-26T03:19:08.822Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 7,
"created_at": "2025-05-26T03:19:08.613Z",
"updated_at": "2025-05-26T03:19:08.613Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users/1",
"status_code": 200,
"detail": null
},
{
"id": 8,
"created_at": "2025-05-26T03:19:08.613Z",
"updated_at": "2025-05-26T03:19:08.613Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users/1",
"status_code": 200,
"detail": null
},
{
"id": 9,
"created_at": "2025-05-26T03:19:08.613Z",
"updated_at": "2025-05-26T03:19:08.613Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 10,
"created_at": "2025-05-21T02:34:11.025Z",
"updated_at": "2025-05-21T02:34:11.025Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "unknown",
"event_type": "API",
"operation": "POST",
"operated_at": "2025-05-21T02:34:07Z",
"state": "SUCCESS",
"path": "/api/v1/users/signin",
"status_code": 200,
"detail": null
}
]

View File

@ -0,0 +1,32 @@
[
{
"id": 11,
"created_at": "2025-05-20T02:34:44.139Z",
"updated_at": "2025-05-20T02:34:44.139Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "unknown",
"event_type": "API",
"operation": "POST",
"operated_at": "2025-05-20T02:34:41Z",
"state": "FAILURE",
"path": "/api/v1/users/signin",
"status_code": 401,
"detail": null
},
{
"id": 14,
"created_at": "2025-05-19T08:09:30.125Z",
"updated_at": "2025-05-19T08:09:30.125Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "PATCH",
"operated_at": "2025-05-19T08:09:28Z",
"state": "FAILURE",
"path": "/api/v1/clusters/1",
"status_code": 401,
"detail": null
}
]

View File

@ -0,0 +1,17 @@
[
{
"id": 15,
"created_at": "2025-05-21T09:03:51.518Z",
"updated_at": "2025-05-21T09:03:51.518Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "DELETE",
"operated_at": "2025-05-21T09:03:50Z",
"state": "SUCCESS",
"path": "/api/v1/personal-access-tokens/1",
"status_code": 200,
"detail": null
}
]

View File

@ -0,0 +1,152 @@
[
{
"id": 1,
"created_at": "2025-05-26T03:19:25.585Z",
"updated_at": "2025-05-26T03:19:25.585Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:23Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 2,
"created_at": "2025-05-26T03:19:20.594Z",
"updated_at": "2025-05-26T03:19:20.594Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:16Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 3,
"created_at": "2025-05-26T03:19:18.583Z",
"updated_at": "2025-05-26T03:19:18.583Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:17Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 4,
"created_at": "2025-05-26T03:19:13.659Z",
"updated_at": "2025-05-26T03:19:13.659Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:09Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 5,
"created_at": "2025-05-26T03:19:08.822Z",
"updated_at": "2025-05-26T03:19:08.822Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 6,
"created_at": "2025-05-26T03:19:08.822Z",
"updated_at": "2025-05-26T03:19:08.822Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 7,
"created_at": "2025-05-26T03:19:08.613Z",
"updated_at": "2025-05-26T03:19:08.613Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users/1",
"status_code": 200,
"detail": null
},
{
"id": 8,
"created_at": "2025-05-26T03:19:08.613Z",
"updated_at": "2025-05-26T03:19:08.613Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users/1",
"status_code": 200,
"detail": null
},
{
"id": 9,
"created_at": "2025-05-26T03:19:08.613Z",
"updated_at": "2025-05-26T03:19:08.613Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/audits",
"status_code": 200,
"detail": null
},
{
"id": 13,
"created_at": "2025-05-19T08:09:16.26Z",
"updated_at": "2025-05-19T08:09:16.26Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-19T08:09:14Z",
"state": "SUCCESS",
"path": "/api/v1/users/3",
"status_code": 200,
"detail": null
}
]

View File

@ -0,0 +1,17 @@
[
{
"id": 14,
"created_at": "2025-05-19T08:09:30.125Z",
"updated_at": "2025-05-19T08:09:30.125Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "PATCH",
"operated_at": "2025-05-19T08:09:28Z",
"state": "FAILURE",
"path": "/api/v1/clusters/1",
"status_code": 401,
"detail": null
}
]

View File

@ -0,0 +1,47 @@
[
{
"id": 10,
"created_at": "2025-05-21T02:34:11.025Z",
"updated_at": "2025-05-21T02:34:11.025Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "unknown",
"event_type": "API",
"operation": "POST",
"operated_at": "2025-05-21T02:34:07Z",
"state": "SUCCESS",
"path": "/api/v1/users/signin",
"status_code": 200,
"detail": null
},
{
"id": 11,
"created_at": "2025-05-20T02:34:44.139Z",
"updated_at": "2025-05-20T02:34:44.139Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "unknown",
"event_type": "API",
"operation": "POST",
"operated_at": "2025-05-20T02:34:41Z",
"state": "FAILURE",
"path": "/api/v1/users/signin",
"status_code": 401,
"detail": null
},
{
"id": 12,
"created_at": "2025-05-21T02:34:11.025Z",
"updated_at": "2025-05-21T02:34:11.025Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "unknown",
"event_type": "PAT",
"operation": "POST",
"operated_at": "2025-05-21T02:34:07Z",
"state": "SUCCESS",
"path": "/api/v1/users/signin",
"status_code": 200,
"detail": null
}
]

View File

@ -0,0 +1,17 @@
[
{
"id": 16,
"created_at": "2025-05-21T09:16:16.348Z",
"updated_at": "2025-05-21T09:16:16.348Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "PUT",
"operated_at": "2025-05-21T09:16:15Z",
"state": "SUCCESS",
"path": "/api/v1/users/2/roles/root",
"status_code": 200,
"detail": null
}
]

View File

@ -0,0 +1,92 @@
[
{
"id": 11,
"created_at": "2025-05-20T02:34:44.139Z",
"updated_at": "2025-05-20T02:34:44.139Z",
"is_del": 0,
"actor_type": "UNKNOWN",
"actor_name": "unknown",
"event_type": "API",
"operation": "POST",
"operated_at": "2025-05-20T02:34:41Z",
"state": "FAILURE",
"path": "/api/v1/users/signin",
"status_code": 401,
"detail": null
},
{
"id": 12,
"created_at": "2025-05-21T02:34:11.025Z",
"updated_at": "2025-05-21T02:34:11.025Z",
"is_del": 0,
"actor_type": "PAT",
"actor_name": "unknown",
"event_type": "API",
"operation": "POST",
"operated_at": "2025-05-21T02:34:07Z",
"state": "SUCCESS",
"path": "/api/v1/users/signin",
"status_code": 200,
"detail": null
},
{
"id": 13,
"created_at": "2025-05-19T08:09:16.26Z",
"updated_at": "2025-05-19T08:09:16.26Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-19T08:09:14Z",
"state": "SUCCESS",
"path": "/api/v1/users/3",
"status_code": 200,
"detail": null
},
{
"id": 14,
"created_at": "2025-05-19T08:09:30.125Z",
"updated_at": "2025-05-19T08:09:30.125Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "PATCH",
"operated_at": "2025-05-19T08:09:28Z",
"state": "FAILURE",
"path": "/api/v1/clusters/1",
"status_code": 401,
"detail": null
},
{
"id": 15,
"created_at": "2025-05-21T09:03:51.518Z",
"updated_at": "2025-05-21T09:03:51.518Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "DELETE",
"operated_at": "2025-05-21T09:03:50Z",
"state": "SUCCESS",
"path": "/api/v1/personal-access-tokens/1",
"status_code": 200,
"detail": null
},
{
"id": 16,
"created_at": "2025-05-21T09:16:16.348Z",
"updated_at": "2025-05-21T09:16:16.348Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "root",
"event_type": "API",
"operation": "PUT",
"operated_at": "2025-05-21T09:16:15Z",
"state": "SUCCESS",
"path": "/api/v1/users/2/roles/root",
"status_code": 200,
"detail": null
}
]

View File

@ -0,0 +1,47 @@
[
{
"id": 5,
"created_at": "2025-05-26T03:19:08.822Z",
"updated_at": "2025-05-26T03:19:08.822Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-26T03:19:08Z",
"state": "SUCCESS",
"path": "/api/v1/users",
"status_code": 200,
"detail": null
},
{
"id": 13,
"created_at": "2025-05-19T08:09:16.26Z",
"updated_at": "2025-05-19T08:09:16.26Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "GET",
"operated_at": "2025-05-19T08:09:14Z",
"state": "SUCCESS",
"path": "/api/v1/users/3",
"status_code": 200,
"detail": null
},
{
"id": 14,
"created_at": "2025-05-19T08:09:30.125Z",
"updated_at": "2025-05-19T08:09:30.125Z",
"is_del": 0,
"actor_type": "USER",
"actor_name": "jack",
"event_type": "API",
"operation": "PATCH",
"operated_at": "2025-05-19T08:09:28Z",
"state": "FAILURE",
"path": "/api/v1/clusters/1",
"status_code": 401,
"detail": null
}
]

View File

@ -3,16 +3,17 @@
"name": "cluster-1",
"bio": "Cluster-1 is a high-performance computing cluster located in China, specifically in Hangzhou and Beijing data centers.",
"scopes": {
"idc": "Hangzhou|Shanghai|Beijing|Xiamen",
"idc": "Hangzhou|Shanghai|Beijing|Xiamen|Nanchang",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12", "173.16.0.1/11"],
"cidrs": ["10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12", "173.16.0.1/11", "171.18.2.1/21"],
"hostnames": ["cluster-1", "cluster-2", "cluster-3", "cluster-4"]
},
"scheduler_cluster_id": 1,
"seed_peer_cluster_id": 1,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
"filter_parent_limit": 40,
"job_rate_limit": 15
},
"seed_peer_cluster_config": {
"load_limit": 300

View File

@ -12,7 +12,8 @@
"seed_peer_cluster_id": 10,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300

View File

@ -7,13 +7,14 @@
"idc": "Hangzhou|Shanghai|Beijing",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12"],
"hostnames": ["cluster-1"]
"hostnames": null
},
"scheduler_cluster_id": 1,
"seed_peer_cluster_id": 1,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
@ -53,7 +54,7 @@
{
"id": 3,
"name": "cluster-3",
"bio": "Cluster-3 is a high-performance computing cluster located in Korea, specifically in Seoul data centers. ",
"bio": "Cluster-3 is a high-performance computing cluster located in Korea, specifically in Seoul data centers.",
"scopes": {
"idc": "Korea",
"location": "Seoul|Korea",
@ -78,7 +79,7 @@
{
"id": 4,
"name": "cluster-4",
"bio": "Cluster-4 is a high-performance computing cluster located in China, specifically in Hangzhou data centers. ",
"bio": "Cluster-4 is a high-performance computing cluster located in China, specifically in Hangzhou data centers.",
"scopes": {
"idc": "hz|dl",
"location": "China|Hang|Zhou",
@ -103,7 +104,7 @@
{
"id": 5,
"name": "cluster-5",
"bio": "Cluster-5 is a high-performance computing cluster located in China, specifically in Chongqing data centers. ",
"bio": "Cluster-5 is a high-performance computing cluster located in China, specifically in Chongqing data centers.",
"scopes": {
"idc": "cq|cd",
"location": "China|Chong|Qing",
@ -128,7 +129,7 @@
{
"id": 6,
"name": "cluster-6",
"bio": "Cluster-6 is a high-performance computing cluster located in China, specifically in Chongdu data centers. ",
"bio": "Cluster-6 is a high-performance computing cluster located in China, specifically in Chongdu data centers.",
"scopes": {
"idc": "cq|cd",
"location": "China|Chong|Du",
@ -153,7 +154,7 @@
{
"id": 7,
"name": "cluster-7",
"bio": "Cluster-7 is a high-performance computing cluster located in China, specifically in Chongdu data centers. ",
"bio": "Cluster-7 is a high-performance computing cluster located in China, specifically in Chongdu data centers.",
"scopes": {
"idc": "cd",
"location": "China|Cheng|Du",
@ -178,7 +179,7 @@
{
"id": 8,
"name": "cluster-8",
"bio": "Cluster-8 is a high-performance computing cluster located in China, specifically in Jiangsu data centers. ",
"bio": "Cluster-8 is a high-performance computing cluster located in China, specifically in Jiangsu data centers.",
"scopes": {
"idc": "js",
"location": "China|Jiang|Su",
@ -203,7 +204,7 @@
{
"id": 9,
"name": "cluster-9",
"bio": "Cluster-9 is a high-performance computing cluster located in China, specifically in Hangzhou data centers. ",
"bio": "Cluster-9 is a high-performance computing cluster located in China, specifically in Hangzhou data centers.",
"scopes": {
"idc": "hz|hf",
"location": "China|Hang|Zhou",
@ -249,5 +250,655 @@
"created_at": "2023-11-01T10:19:36Z",
"updated_at": "2023-11-01T10:19:36Z",
"is_default": false
},
{
"id": 12,
"name": "cluster-12",
"bio": "Cluster-12 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 12,
"seed_peer_cluster_id": 12,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-01T10:19:36Z",
"updated_at": "2023-12-01T10:19:36Z",
"is_default": false
},
{
"id": 13,
"name": "cluster-13",
"bio": "Cluster-13 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 13,
"seed_peer_cluster_id": 13,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-03T10:19:36Z",
"updated_at": "2023-12-03T10:19:36Z",
"is_default": false
},
{
"id": 14,
"name": "cluster-14",
"bio": "Cluster-14 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 14,
"seed_peer_cluster_id": 14,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-04T10:19:36Z",
"updated_at": "2023-12-04T10:19:36Z",
"is_default": false
},
{
"id": 15,
"name": "cluster-15",
"bio": "Cluster-15 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 15,
"seed_peer_cluster_id": 15,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-05T10:19:36Z",
"updated_at": "2023-12-05T10:19:36Z",
"is_default": false
},
{
"id": 16,
"name": "cluster-16",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 16,
"seed_peer_cluster_id": 16,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 17,
"name": "cluster-17",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 17,
"seed_peer_cluster_id": 17,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 18,
"name": "cluster-18",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 18,
"seed_peer_cluster_id": 18,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 19,
"name": "cluster-19",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.198.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 19,
"seed_peer_cluster_id": 19,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 20,
"name": "cluster-20",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.208.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 20,
"seed_peer_cluster_id": 20,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 21,
"name": "cluster-21",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.218.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 21,
"seed_peer_cluster_id": 21,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 22,
"name": "cluster-22",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.228.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 22,
"seed_peer_cluster_id": 22,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 23,
"name": "cluster-23",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.238.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 23,
"seed_peer_cluster_id": 23,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 24,
"name": "cluster-24",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.248.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 24,
"seed_peer_cluster_id": 24,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 25,
"name": "cluster-25",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.258.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 25,
"seed_peer_cluster_id": 25,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 26,
"name": "cluster-26",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.268.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 26,
"seed_peer_cluster_id": 26,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 27,
"name": "cluster-27",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.278.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 27,
"seed_peer_cluster_id": 27,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 28,
"name": "cluster-28",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.288.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 28,
"seed_peer_cluster_id": 28,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 29,
"name": "cluster-29",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.298.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 29,
"seed_peer_cluster_id": 29,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 30,
"name": "cluster-30",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.308.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 30,
"seed_peer_cluster_id": 30,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 31,
"name": "cluster-31",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.318.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 31,
"seed_peer_cluster_id": 31,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 32,
"name": "cluster-32",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.328.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 32,
"seed_peer_cluster_id": 32,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 33,
"name": "cluster-33",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.338.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 33,
"seed_peer_cluster_id": 33,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 34,
"name": "cluster-34",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.348.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 34,
"seed_peer_cluster_id": 34,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 35,
"name": "cluster-35",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.358.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 35,
"seed_peer_cluster_id": 35,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 36,
"name": "cluster-36",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.368.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 36,
"seed_peer_cluster_id": 36,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 37,
"name": "cluster-37",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.378.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 37,
"seed_peer_cluster_id": 37,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
}
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,8 @@
"seed_peer_cluster_id": 1,
"scheduler_cluster_config": {
"candidate_parent_limit": 5,
"filter_parent_limit": 50
"filter_parent_limit": 50,
"job_rate_limit": 20
},
"seed_peer_cluster_config": {
"load_limit": 400

View File

@ -13,7 +13,8 @@
"seed_peer_cluster_id": 1,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
@ -274,5 +275,655 @@
"created_at": "2023-11-01T10:19:36Z",
"updated_at": "2023-11-01T10:19:36Z",
"is_default": false
},
{
"id": 12,
"name": "cluster-12",
"bio": "Cluster-12 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 12,
"seed_peer_cluster_id": 12,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-01T10:19:36Z",
"updated_at": "2023-12-01T10:19:36Z",
"is_default": false
},
{
"id": 13,
"name": "cluster-13",
"bio": "Cluster-13 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 13,
"seed_peer_cluster_id": 13,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-03T10:19:36Z",
"updated_at": "2023-12-03T10:19:36Z",
"is_default": false
},
{
"id": 14,
"name": "cluster-14",
"bio": "Cluster-14 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 14,
"seed_peer_cluster_id": 14,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-04T10:19:36Z",
"updated_at": "2023-12-04T10:19:36Z",
"is_default": false
},
{
"id": 15,
"name": "cluster-15",
"bio": "Cluster-15 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 15,
"seed_peer_cluster_id": 15,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-05T10:19:36Z",
"updated_at": "2023-12-05T10:19:36Z",
"is_default": false
},
{
"id": 16,
"name": "cluster-16",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 16,
"seed_peer_cluster_id": 16,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 17,
"name": "cluster-17",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 17,
"seed_peer_cluster_id": 17,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 18,
"name": "cluster-18",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 18,
"seed_peer_cluster_id": 18,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 19,
"name": "cluster-19",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.198.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 19,
"seed_peer_cluster_id": 19,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 20,
"name": "cluster-20",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.208.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 20,
"seed_peer_cluster_id": 20,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 21,
"name": "cluster-21",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.218.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 21,
"seed_peer_cluster_id": 21,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 22,
"name": "cluster-22",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.228.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 22,
"seed_peer_cluster_id": 22,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 23,
"name": "cluster-23",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.238.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 23,
"seed_peer_cluster_id": 23,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 24,
"name": "cluster-24",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.248.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 24,
"seed_peer_cluster_id": 24,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 25,
"name": "cluster-25",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.258.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 25,
"seed_peer_cluster_id": 25,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 26,
"name": "cluster-26",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.268.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 26,
"seed_peer_cluster_id": 26,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 27,
"name": "cluster-27",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.278.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 27,
"seed_peer_cluster_id": 27,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 28,
"name": "cluster-28",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.288.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 28,
"seed_peer_cluster_id": 28,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 29,
"name": "cluster-29",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.298.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 29,
"seed_peer_cluster_id": 29,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 30,
"name": "cluster-30",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.308.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 30,
"seed_peer_cluster_id": 30,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 31,
"name": "cluster-31",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.318.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 31,
"seed_peer_cluster_id": 31,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 32,
"name": "cluster-32",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.328.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 32,
"seed_peer_cluster_id": 32,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 33,
"name": "cluster-33",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.338.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 33,
"seed_peer_cluster_id": 33,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 34,
"name": "cluster-34",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.348.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 34,
"seed_peer_cluster_id": 34,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 35,
"name": "cluster-35",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.358.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 35,
"seed_peer_cluster_id": 35,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 36,
"name": "cluster-36",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.368.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 36,
"seed_peer_cluster_id": 36,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 37,
"name": "cluster-37",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.378.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 37,
"seed_peer_cluster_id": 37,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
}
]

View File

@ -1,314 +1,27 @@
[
{
"id": 1,
"name": "cluster-1",
"bio": "Cluster-1 is a high-performance computing cluster located in China, specifically in Hangzhou and Beijing data centers.",
"scopes": {
"idc": "Hangzhou|Shanghai|Beijing",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12"],
"hostnames": null
},
"scheduler_cluster_id": 1,
"seed_peer_cluster_id": 1,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 51
},
"created_at": "2023-10-31T07:48:35Z",
"updated_at": "2023-10-31T07:48:35Z",
"is_default": true
{
"id": 38,
"name": "cluster-38",
"bio": "Add new cluster case",
"scopes": {
"idc": "hz|sh",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
"hostnames": []
},
{
"id": 2,
"name": "cluster-2",
"bio": "",
"scopes": {
"idc": "",
"location": "",
"cidrs": [],
"hostnames": []
},
"scheduler_cluster_id": 2,
"seed_peer_cluster_id": 2,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-10-31T17:48:35Z",
"updated_at": "2023-10-31T17:48:35Z",
"is_default": false
"scheduler_cluster_id": 17,
"seed_peer_cluster_id": 17,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
{
"id": 3,
"name": "cluster-3",
"bio": "Cluster-3 is a high-performance computing cluster located in Korea, specifically in Seoul data centers.",
"scopes": {
"idc": "Korea",
"location": "Seoul|Korea",
"cidrs": ["192.168.0.0/16", "172.16.0.0/12"],
"hostnames": []
},
"scheduler_cluster_id": 3,
"seed_peer_cluster_id": 3,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-08T11:19:36Z",
"updated_at": "2023-11-08T11:19:36Z",
"is_default": true
"seed_peer_cluster_config": {
"load_limit": 300
},
{
"id": 4,
"name": "cluster-4",
"bio": "Cluster-4 is a high-performance computing cluster located in China, specifically in Hangzhou data centers.",
"scopes": {
"idc": "hz|dl",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16"],
"hostnames": []
},
"scheduler_cluster_id": 4,
"seed_peer_cluster_id": 4,
"scheduler_cluster_config": {
"candidate_parent_limit": 5,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-09T18:19:36Z",
"updated_at": "2023-11-09T18:19:36Z",
"is_default": true
"peer_cluster_config": {
"load_limit": 50
},
{
"id": 5,
"name": "cluster-5",
"bio": "Cluster-5 is a high-performance computing cluster located in China, specifically in Chongqing data centers.",
"scopes": {
"idc": "cq|cd",
"location": "China|Chong|Qing",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16"],
"hostnames": []
},
"scheduler_cluster_id": 5,
"seed_peer_cluster_id": 5,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-01T10:19:36Z",
"updated_at": "2023-11-01T10:19:36Z",
"is_default": false
},
{
"id": 6,
"name": "cluster-6",
"bio": "Cluster-6 is a high-performance computing cluster located in China, specifically in Chongdu data centers.",
"scopes": {
"idc": "cq|cd",
"location": "China|Chong|Du",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16"],
"hostnames": []
},
"scheduler_cluster_id": 6,
"seed_peer_cluster_id": 6,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-09T20:12:36Z",
"updated_at": "2023-11-09T20:12:36Z",
"is_default": true
},
{
"id": 7,
"name": "cluster-7",
"bio": "Cluster-7 is a high-performance computing cluster located in China, specifically in Chongdu data centers.",
"scopes": {
"idc": "cd",
"location": "China|Cheng|Du",
"cidrs": ["10.0.0.0/8", "172.16.0.0/19"],
"hostnames": []
},
"scheduler_cluster_id": 7,
"seed_peer_cluster_id": 7,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-11T10:19:36Z",
"updated_at": "2023-11-11T10:19:36Z",
"is_default": true
},
{
"id": 8,
"name": "cluster-8",
"bio": "Cluster-8 is a high-performance computing cluster located in China, specifically in Jiangsu data centers.",
"scopes": {
"idc": "js",
"location": "China|Jiang|Su",
"cidrs": ["10.0.0.0/5", "172.16.0.0/19"],
"hostnames": []
},
"scheduler_cluster_id": 8,
"seed_peer_cluster_id": 8,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-11T13:19:36Z",
"updated_at": "2023-11-11T13:19:36Z",
"is_default": false
},
{
"id": 9,
"name": "cluster-9",
"bio": "Cluster-9 is a high-performance computing cluster located in China, specifically in Hangzhou data centers.",
"scopes": {
"idc": "hz|hf",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16"],
"hostnames": []
},
"scheduler_cluster_id": 9,
"seed_peer_cluster_id": 9,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-11T10:29:36Z",
"updated_at": "2023-11-11T10:29:36Z",
"is_default": true
},
{
"id": 10,
"name": "cluster-10",
"bio": "Cluster-10 is a high-performance computing cluster located in England, specifically in London data centers.",
"scopes": {
"idc": "London",
"location": "London|England",
"cidrs": ["192.168.255.255"],
"hostnames": []
},
"scheduler_cluster_id": 10,
"seed_peer_cluster_id": 10,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-15T05:19:36Z",
"updated_at": "2023-11-15T05:19:36Z",
"is_default": true
},
{
"id": 11,
"name": "cluster-11",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"],
"hostnames": []
},
"scheduler_cluster_id": 11,
"seed_peer_cluster_id": 11,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-01T10:19:36Z",
"updated_at": "2023-11-01T10:19:36Z",
"is_default": false
},
{
"id": 12,
"name": "cluster-12",
"bio": "Add new cluster case",
"scopes": {
"idc": "hz|sh",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
"hostnames": []
},
"scheduler_cluster_id": 12,
"seed_peer_cluster_id": 12,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-21T06:49:41Z",
"updated_at": "2023-11-21T06:49:41Z",
"is_default": true
}
]
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
}

View File

@ -0,0 +1,993 @@
[
{
"id": 1,
"name": "cluster-1",
"bio": "Cluster-1 is a high-performance computing cluster located in China, specifically in Hangzhou and Beijing data centers.",
"scopes": {
"idc": "Hangzhou|Shanghai|Beijing",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12"],
"hostnames": null
},
"scheduler_cluster_id": 1,
"seed_peer_cluster_id": 1,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 51
},
"created_at": "2023-10-31T07:48:35Z",
"updated_at": "2023-10-31T07:48:35Z",
"is_default": true
},
{
"id": 2,
"name": "cluster-2",
"bio": "",
"scopes": {
"idc": "",
"location": "",
"cidrs": []
},
"scheduler_cluster_id": 2,
"seed_peer_cluster_id": 2,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-10-31T17:48:35Z",
"updated_at": "2023-10-31T17:48:35Z",
"is_default": false
},
{
"id": 3,
"name": "cluster-3",
"bio": "Cluster-3 is a high-performance computing cluster located in Korea, specifically in Seoul data centers.",
"scopes": {
"idc": "Korea",
"location": "Seoul|Korea",
"cidrs": ["192.168.0.0/16", "172.16.0.0/12"]
},
"scheduler_cluster_id": 3,
"seed_peer_cluster_id": 3,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-08T11:19:36Z",
"updated_at": "2023-11-08T11:19:36Z",
"is_default": true
},
{
"id": 4,
"name": "cluster-4",
"bio": "Cluster-4 is a high-performance computing cluster located in China, specifically in Hangzhou data centers.",
"scopes": {
"idc": "hz|dl",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16"]
},
"scheduler_cluster_id": 4,
"seed_peer_cluster_id": 4,
"scheduler_cluster_config": {
"candidate_parent_limit": 5,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-09T18:19:36Z",
"updated_at": "2023-11-09T18:19:36Z",
"is_default": true
},
{
"id": 5,
"name": "cluster-5",
"bio": "Cluster-5 is a high-performance computing cluster located in China, specifically in Chongqing data centers.",
"scopes": {
"idc": "cq|cd",
"location": "China|Chong|Qing",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16"]
},
"scheduler_cluster_id": 5,
"seed_peer_cluster_id": 5,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-01T10:19:36Z",
"updated_at": "2023-11-01T10:19:36Z",
"is_default": false
},
{
"id": 6,
"name": "cluster-6",
"bio": "Cluster-6 is a high-performance computing cluster located in China, specifically in Chongdu data centers.",
"scopes": {
"idc": "cq|cd",
"location": "China|Chong|Du",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16"]
},
"scheduler_cluster_id": 6,
"seed_peer_cluster_id": 6,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-09T20:12:36Z",
"updated_at": "2023-11-09T20:12:36Z",
"is_default": true
},
{
"id": 7,
"name": "cluster-7",
"bio": "Cluster-7 is a high-performance computing cluster located in China, specifically in Chongdu data centers.",
"scopes": {
"idc": "cd",
"location": "China|Cheng|Du",
"cidrs": ["10.0.0.0/8", "172.16.0.0/19"]
},
"scheduler_cluster_id": 7,
"seed_peer_cluster_id": 7,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-11T10:19:36Z",
"updated_at": "2023-11-11T10:19:36Z",
"is_default": true
},
{
"id": 8,
"name": "cluster-8",
"bio": "Cluster-8 is a high-performance computing cluster located in China, specifically in Jiangsu data centers.",
"scopes": {
"idc": "js",
"location": "China|Jiang|Su",
"cidrs": ["10.0.0.0/5", "172.16.0.0/19"]
},
"scheduler_cluster_id": 8,
"seed_peer_cluster_id": 8,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-11T13:19:36Z",
"updated_at": "2023-11-11T13:19:36Z",
"is_default": false
},
{
"id": 9,
"name": "cluster-9",
"bio": "Cluster-9 is a high-performance computing cluster located in China, specifically in Hangzhou data centers.",
"scopes": {
"idc": "hz|hf",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16"]
},
"scheduler_cluster_id": 9,
"seed_peer_cluster_id": 9,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-11T10:29:36Z",
"updated_at": "2023-11-11T10:29:36Z",
"is_default": true
},
{
"id": 10,
"name": "cluster-10",
"bio": "Cluster-10 is a high-performance computing cluster located in England, specifically in London data centers.",
"scopes": {
"idc": "London",
"location": "London|England",
"cidrs": ["192.168.255.255"]
},
"scheduler_cluster_id": 10,
"seed_peer_cluster_id": 10,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-15T05:19:36Z",
"updated_at": "2023-11-15T05:19:36Z",
"is_default": true
},
{
"id": 11,
"name": "cluster-11",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 11,
"seed_peer_cluster_id": 11,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-11-01T10:19:36Z",
"updated_at": "2023-11-01T10:19:36Z",
"is_default": false
},
{
"id": 12,
"name": "cluster-12",
"bio": "Cluster-12 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 12,
"seed_peer_cluster_id": 12,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-01T10:19:36Z",
"updated_at": "2023-12-01T10:19:36Z",
"is_default": false
},
{
"id": 13,
"name": "cluster-13",
"bio": "Cluster-13 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 13,
"seed_peer_cluster_id": 13,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-03T10:19:36Z",
"updated_at": "2023-12-03T10:19:36Z",
"is_default": false
},
{
"id": 14,
"name": "cluster-14",
"bio": "Cluster-14 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 14,
"seed_peer_cluster_id": 14,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-04T10:19:36Z",
"updated_at": "2023-12-04T10:19:36Z",
"is_default": false
},
{
"id": 15,
"name": "cluster-15",
"bio": "Cluster-15 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 15,
"seed_peer_cluster_id": 15,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-05T10:19:36Z",
"updated_at": "2023-12-05T10:19:36Z",
"is_default": false
},
{
"id": 16,
"name": "cluster-16",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 16,
"seed_peer_cluster_id": 16,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 17,
"name": "cluster-17",
"bio": "Add new cluster case",
"scopes": {
"idc": "hz|sh",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
"hostnames": []
},
"scheduler_cluster_id": 17,
"seed_peer_cluster_id": 17,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 18,
"name": "cluster-18",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.168.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 18,
"seed_peer_cluster_id": 18,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 19,
"name": "cluster-19",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.198.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 19,
"seed_peer_cluster_id": 19,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 20,
"name": "cluster-20",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.208.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 20,
"seed_peer_cluster_id": 20,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 21,
"name": "cluster-21",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.218.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 21,
"seed_peer_cluster_id": 21,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 22,
"name": "cluster-22",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.228.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 22,
"seed_peer_cluster_id": 22,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 23,
"name": "cluster-23",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.238.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 23,
"seed_peer_cluster_id": 23,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 24,
"name": "cluster-24",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.248.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 24,
"seed_peer_cluster_id": 24,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 25,
"name": "cluster-25",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.258.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 25,
"seed_peer_cluster_id": 25,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 26,
"name": "cluster-26",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.268.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 26,
"seed_peer_cluster_id": 26,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 27,
"name": "cluster-27",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.278.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 27,
"seed_peer_cluster_id": 27,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 28,
"name": "cluster-28",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.288.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 28,
"seed_peer_cluster_id": 28,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 29,
"name": "cluster-29",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.298.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 29,
"seed_peer_cluster_id": 29,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 30,
"name": "cluster-30",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.308.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 30,
"seed_peer_cluster_id": 30,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 31,
"name": "cluster-31",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.318.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 31,
"seed_peer_cluster_id": 31,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
},
{
"id": 32,
"name": "cluster-32",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.328.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 32,
"seed_peer_cluster_id": 32,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 33,
"name": "cluster-33",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.338.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 33,
"seed_peer_cluster_id": 33,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 34,
"name": "cluster-34",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.348.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 34,
"seed_peer_cluster_id": 34,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 35,
"name": "cluster-35",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.358.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 35,
"seed_peer_cluster_id": 35,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 36,
"name": "cluster-36",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.368.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 36,
"seed_peer_cluster_id": 36,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 37,
"name": "cluster-37",
"bio": "Cluster-10 is a high-performance computing cluster located in France, specifically in Paris data centers.",
"scopes": {
"idc": "Paris",
"location": "Paris|France",
"cidrs": ["192.378.0.0", "10.0.0.0"]
},
"scheduler_cluster_id": 37,
"seed_peer_cluster_id": 37,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": false
},
{
"id": 38,
"name": "cluster-38",
"bio": "Add new cluster case",
"scopes": {
"idc": "hz|sh",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],
"hostnames": []
},
"scheduler_cluster_id": 17,
"seed_peer_cluster_id": 17,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40,
"job_rate_limit": 10
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 50
},
"created_at": "2023-12-06T10:19:36Z",
"updated_at": "2023-12-06T10:19:36Z",
"is_default": true
}
]

View File

@ -1,28 +0,0 @@
[
{
"id": 1,
"name": "cluster-1",
"bio": "Cluster-1 is a high-performance computing cluster located in China, specifically in Hangzhou and Beijing data centers.",
"scopes": {
"idc": "Hangzhou|Shanghai|Beijing",
"location": "China|Hang|Zhou",
"cidrs": ["10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12"],
"hostnames": null
},
"scheduler_cluster_id": 1,
"seed_peer_cluster_id": 1,
"scheduler_cluster_config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"seed_peer_cluster_config": {
"load_limit": 300
},
"peer_cluster_config": {
"load_limit": 51
},
"created_at": "2023-10-31T07:48:35Z",
"updated_at": "2023-10-31T07:48:35Z",
"is_default": true
}
]

View File

@ -5,9 +5,9 @@
"updated_at": "2023-12-04T10:34:12Z",
"is_del": 0,
"name": "root-1",
"bio": "root-1 token,it's used for preheating of harbor.",
"bio": "root-1 token, used to control the cluster.",
"token": "MTk3OTY5NTMtZjlkZi00YWVhLWI5OGEtZTc0YWVhMWZmYmQz",
"scopes": ["preheat"],
"scopes": ["cluster"],
"state": "active",
"expired_at": "2033-12-01T10:34:08Z",
"user_id": 3,
@ -194,7 +194,7 @@
"updated_at": "2023-12-04T11:49:31Z",
"is_del": 0,
"name": "root-8",
"bio": "root-8 token,it's used for preheating of harbor.",
"bio": "root-8 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["cluster"],
"state": "active",
@ -221,9 +221,9 @@
"updated_at": "2023-12-05T10:41:31Z",
"is_del": 0,
"name": "root-9",
"bio": "root-9 token,it's used for preheating of harbor.",
"bio": "root-9 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["preheat"],
"scopes": ["cluster"],
"state": "active",
"expired_at": "2033-12-01T10:34:08Z",
"user_id": 2,

View File

@ -167,7 +167,7 @@
"updated_at": "2023-12-04T11:49:31Z",
"is_del": 0,
"name": "root-8",
"bio": "root-8 token,it's used for preheating of harbor.",
"bio": "root-8 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["cluster"],
"state": "active",
@ -194,9 +194,9 @@
"updated_at": "2023-12-05T10:41:31Z",
"is_del": 0,
"name": "root-9",
"bio": "root-9 token,it's used for preheating of harbor.",
"bio": "root-9 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["preheat"],
"scopes": ["cluster"],
"state": "active",
"expired_at": "2033-12-01T10:34:08Z",
"user_id": 2,

View File

@ -5,9 +5,9 @@
"updated_at": "2023-12-04T10:34:12Z",
"is_del": 0,
"name": "root-1",
"bio": "root-1 token,it's used for preheating of harbor.",
"bio": "root-1 token, used to control the cluster.",
"token": "MTk3OTY5NTMtZjlkZi00YWVhLWI5OGEtZTc0YWVhMWZmYmQz",
"scopes": ["preheat"],
"scopes": ["cluster"],
"state": "active",
"expired_at": "2033-12-01T10:34:08Z",
"user_id": 3,
@ -194,7 +194,7 @@
"updated_at": "2023-12-04T11:49:31Z",
"is_del": 0,
"name": "root-8",
"bio": "root-8 token,it's used for preheating of harbor.",
"bio": "root-8 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["cluster"],
"state": "active",
@ -221,9 +221,9 @@
"updated_at": "2023-12-05T10:41:31Z",
"is_del": 0,
"name": "root-9",
"bio": "root-9 token,it's used for preheating of harbor.",
"bio": "root-9 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["preheat"],
"scopes": ["cluster"],
"state": "active",
"expired_at": "2033-12-01T10:34:08Z",
"user_id": 2,

View File

@ -5,9 +5,9 @@
"updated_at": "2023-12-04T10:34:12Z",
"is_del": 0,
"name": "root-1",
"bio": "root-1 token,it's used for preheating of harbor.",
"bio": "root-1 token, used to control the cluster.",
"token": "MTk3OTY5NTMtZjlkZi00YWVhLWI5OGEtZTc0YWVhMWZmYmQz",
"scopes": ["preheat"],
"scopes": ["cluster"],
"state": "active",
"expired_at": "2033-12-01T10:34:08Z",
"user_id": 3,
@ -194,7 +194,7 @@
"updated_at": "2023-12-04T11:49:31Z",
"is_del": 0,
"name": "root-8",
"bio": "root-8 token,it's used for preheating of harbor.",
"bio": "root-8 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["cluster"],
"state": "active",
@ -221,9 +221,9 @@
"updated_at": "2023-12-05T10:41:31Z",
"is_del": 0,
"name": "root-9",
"bio": "root-9 token,it's used for preheating of harbor.",
"bio": "root-9 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["preheat"],
"scopes": ["cluster"],
"state": "active",
"expired_at": "2033-12-01T10:34:08Z",
"user_id": 2,
@ -252,7 +252,7 @@
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["cluster"],
"state": "active",
"expired_at": "2024-12-1T10:37:53Z",
"expired_at": "2023-12-12T10:37:53Z",
"user_id": 3,
"user": {
"id": 3,

View File

@ -5,9 +5,9 @@
"updated_at": "2023-12-04T10:34:12Z",
"is_del": 0,
"name": "root-1",
"bio": "root-1 token,it's used for preheating of harbor.",
"bio": "root-1 token, used to control the cluster.",
"token": "MTk3OTY5NTMtZjlkZi00YWVhLWI5OGEtZTc0YWVhMWZmYmQz",
"scopes": ["preheat"],
"scopes": ["cluster"],
"state": "active",
"expired_at": "2033-12-01T10:34:08Z",
"user_id": 3,
@ -194,7 +194,7 @@
"updated_at": "2023-12-04T11:49:31Z",
"is_del": 0,
"name": "root-8",
"bio": "root-8 token,it's used for preheating of harbor.",
"bio": "root-8 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["cluster"],
"state": "active",
@ -221,9 +221,9 @@
"updated_at": "2023-12-05T10:41:31Z",
"is_del": 0,
"name": "root-9",
"bio": "root-9 token,it's used for preheating of harbor.",
"bio": "root-9 token, used to control the cluster.",
"token": "YmVmYjA1Y2MtMmFkYy00OTJjLTg4OWUtYzg3MjE0ZWEyOWY4",
"scopes": ["preheat"],
"scopes": ["cluster"],
"state": "active",
"expired_at": "2033-12-01T10:34:08Z",
"user_id": 2,

View File

@ -0,0 +1,26 @@
[
{
"id": 1,
"created_at": "2025-06-18T07:53:26.189Z",
"updated_at": "2025-06-23T03:17:49.49Z",
"is_del": 0,
"name": "gc",
"value": "{\"audit\":{\"ttl\":259200000000000},\"job\":{\"ttl\":1123200000000000}}",
"bio": "",
"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
}
}
]

View File

@ -0,0 +1,35 @@
{
"id": 24,
"created_at": "2025-06-25T09:29:25.297Z",
"updated_at": "2025-06-25T09:29:25.327Z",
"is_del": 0,
"task_id": "f060ab6b-16a7-4ff9-80ed-d135bd53b4fa",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1814400000000000,
"type": "audit"
},
"result": {
"purged": 10
},
"user_id": 1,
"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

@ -0,0 +1,842 @@
[
{
"id": 119,
"created_at": "2025-06-23T05:12:15.991Z",
"updated_at": "2025-06-23T05:12:16.09Z",
"is_del": 0,
"task_id": "e1949b29-4bca-4591-8b54-d619373ae750",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 172800000000000,
"type": "audit"
},
"result": {
"purged": 10
},
"user_id": 1,
"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": 118,
"created_at": "2025-06-23T05:12:15.991Z",
"updated_at": "2025-06-23T05:12:16.09Z",
"is_del": 0,
"task_id": "e1949b29-4bca-4591-8b54-d619373ae750",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 172800000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"user_id": 1,
"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": 117,
"created_at": "2025-06-23T05:12:15.991Z",
"updated_at": "2025-06-23T05:12:16.09Z",
"is_del": 0,
"task_id": "e1949b29-4bca-4591-8b54-d619373ae750",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 172800000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"user_id": 1,
"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": 117,
"created_at": "2025-06-23T06:06:47.959Z",
"updated_at": "2025-06-23T06:06:47.997Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 116,
"created_at": "2025-06-23T05:12:15.991Z",
"updated_at": "2025-06-23T05:12:16.09Z",
"is_del": 0,
"task_id": "e1949b29-4bca-4591-8b54-d619373ae750",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 172800000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"user_id": 1,
"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": 115,
"created_at": "2025-06-23T04:34:36.417Z",
"updated_at": "2025-06-23T04:34:36.484Z",
"is_del": 0,
"task_id": "15a3dc57-14eb-4623-8d99-d2021647efb2",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"user_id": 1,
"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": 114,
"created_at": "2025-06-23T04:34:24.244Z",
"updated_at": "2025-06-23T04:34:24.4Z",
"is_del": 0,
"task_id": "8f2c5507-450e-45e2-bc52-ff3fcfae5bd4",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"user_id": 1,
"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": 113,
"created_at": "2025-06-23T03:17:40.93Z",
"updated_at": "2025-06-23T03:17:40.937Z",
"is_del": 0,
"task_id": "cdf743c3-ae45-4526-b8a9-574d17532491",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 7200000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"user_id": 1,
"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": 112,
"created_at": "2025-06-23T03:17:32.362Z",
"updated_at": "2025-06-23T03:17:32.405Z",
"is_del": 0,
"task_id": "e68e1914-e2d2-447a-b6e9-c03a0032de7b",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 7200000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"user_id": 1,
"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": 111,
"created_at": "2025-06-23T02:18:20.238Z",
"updated_at": "2025-06-23T02:18:20.249Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 110,
"created_at": "2025-06-23T02:18:19.755Z",
"updated_at": "2025-06-23T02:18:19.872Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 109,
"created_at": "2025-06-22T22:44:24.566Z",
"updated_at": "2025-06-22T22:44:24.643Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 108,
"created_at": "2025-06-22T22:44:24.445Z",
"updated_at": "2025-06-22T22:44:24.565Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 7200000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"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": 107,
"created_at": "2025-06-22T17:35:36.808Z",
"updated_at": "2025-06-22T17:35:36.815Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 7200000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"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": 106,
"created_at": "2025-06-22T17:35:36.807Z",
"updated_at": "2025-06-22T17:35:36.828Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 105,
"created_at": "2025-06-22T17:35:36.332Z",
"updated_at": "2025-06-22T17:35:36.436Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 104,
"created_at": "2025-06-22T17:35:36.33Z",
"updated_at": "2025-06-22T17:35:36.439Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 7200000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"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": 103,
"created_at": "2025-06-22T14:26:39.289Z",
"updated_at": "2025-06-22T14:26:39.356Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 102,
"created_at": "2025-06-22T11:17:59.604Z",
"updated_at": "2025-06-22T11:17:59.613Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 101,
"created_at": "2025-06-22T11:17:59.169Z",
"updated_at": "2025-06-22T11:17:59.559Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 100,
"created_at": "2025-06-22T07:27:00.54Z",
"updated_at": "2025-06-22T07:27:00.612Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 7200000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"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": 99,
"created_at": "2025-06-22T07:27:00.539Z",
"updated_at": "2025-06-22T07:27:00.578Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 98,
"created_at": "2025-06-22T04:22:46.333Z",
"updated_at": "2025-06-22T04:22:46.386Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 1123200000000000,
"type": "job"
},
"result": {
"purged": 0
},
"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": 97,
"created_at": "2025-06-22T04:22:46.332Z",
"updated_at": "2025-06-22T04:22:46.376Z",
"is_del": 0,
"task_id": "audit",
"bio": "",
"type": "gc",
"state": "SUCCESS",
"args": {
"batch_size": 5000,
"ttl": 7200000000000,
"type": "audit"
},
"result": {
"purged": 0
},
"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

@ -0,0 +1,26 @@
[
{
"id": 1,
"created_at": "2025-06-18T07:53:26.189Z",
"updated_at": "2025-06-23T03:17:49.49Z",
"is_del": 0,
"name": "gc",
"value": "{\"audit\":{\"ttl\":1814400000000000},\"job\":{\"ttl\":1814400000000000}}",
"bio": "",
"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
}
}
]

View File

@ -0,0 +1,42 @@
{
"id": 12,
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_2d9ef907-744e-40c9-9943-3d14fd8cb389",
"bio": "create preheat",
"type": "preheat",
"state": "PENDING",
"args": {
"application": "application-1",
"concurrent_count": 50,
"content_for_calculating_task_id": null,
"count": null,
"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",
"headers": {},
"load_to_cache": false,
"password": "",
"percentage": null,
"piece_length": 5242880,
"platform": "",
"scope": "all_seed_peers",
"tag": "tag-1",
"timeout": 1800000000000,
"type": "file",
"url": "",
"urls": ["https://example.com/path/to/file/url-1", "https://example.com/path/to/file"]
},
"result": {
"created_at": "2025-05-28T08:43:48.634389458Z",
"group_uuid": "group_2d9ef907-744e-40c9-9943-3d14fd8cb389",
"job_states": null,
"state": "PENDING",
"updated_at": "2025-05-28T08:45:52.849258668Z"
},
"seed_peer_clusters": null,
"scheduler_clusters": [
{
"id": 1
}
]
}

View File

@ -0,0 +1,56 @@
{
"id": 13,
"created_at": "2025-07-08T12:22:42.892Z",
"updated_at": "2025-07-08T12:22:42.892Z",
"is_del": 0,
"task_id": "group_152f6ada-efea-4cd6-a269-5ebb784a633a",
"bio": "create preheat",
"type": "preheat",
"state": "PENDING",
"args": {
"application": "application-1",
"concurrent_count": 1000,
"count": null,
"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",
"headers": {},
"ips": [
"10.244.4.5",
"10.244.4.3",
"10.244.4.61",
"10.244.4.62",
"10.244.4.63",
"10.244.4.64",
"10.244.4.65",
"10.244.4.66",
"10.244.4.67",
"10.244.4.68",
"10.244.4.69",
"10.244.4.70",
"10.244.4.71"
],
"load_to_cache": false,
"password": "root",
"percentage": null,
"piece_length": null,
"platform": "linux/amd64",
"scope": "single_seed_peer",
"tag": "tag-1",
"timeout": 3600000000000,
"type": "image",
"url": "https://example.com/manifests/v2.1.0",
"urls": null,
"username": ""
},
"result": {
"created_at": "2025-05-28T08:43:48.634389458Z",
"group_uuid": "group_2d9ef907-744e-40c9-9943-3d14fd8cb389",
"job_states": null,
"state": "PENDING",
"updated_at": "2025-05-28T08:45:52.849258668Z"
},
"scheduler_clusters": [
{
"id": 1
}
]
}

View File

@ -1,552 +0,0 @@
[
{
"id": 12,
"created_at": "2023-04-23T16:29:18+08:00",
"updated_at": "2023-04-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"bio": "create preheat",
"type": "preheat",
"state": "PENDING",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "PENDING"
},
"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": 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_f60c3730-b718-45c7-98a5-014052c1c02a",
"bio": "This is a preheat task with status pending",
"type": "preheat",
"state": "PENDING",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "PENDING"
},
"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": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "FAILURE"
},
"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_f60c3730-b718-45c7-98a5-014052c1c02a",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "FAILURE"
},
"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-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 success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "SUCCESS"
},
"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_f60c3730-b718-45c7-98a5-014052c1c02a",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "FAILURE"
},
"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_01f9f92f-02c7-477e-8360-a387407b73dd",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "SUCCESS"
},
"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_f60c3730-b718-45c7-98a5-014052c1c02a",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "SUCCESS"
},
"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-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 success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "SUCCESS"
},
"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_f60c3730-b718-45c7-98a5-014052c1c02a",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
}
],
"State": "FAILURE"
},
"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

@ -1,96 +1,74 @@
{
"id": 10,
"created_at": "2023-12-13T11:58:53Z",
"updated_at": "2023-12-13T11:59:02Z",
"updated_at": "2023-12-13T11:58:53Z",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "Expires&Signature",
"headers": {
"Connection": "keep-alive"
},
"application": "application-1",
"concurrent_count": 50,
"content_for_calculating_task_id": null,
"count": 100,
"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",
"headers": { "Connection": "keep-alive" },
"load_to_cache": false,
"password": "",
"percentage": null,
"piece_length": 4194304,
"platform": "",
"scope": "all_peers",
"tag": "prheat tag",
"timeout": 1800000000000,
"type": "file",
"url": "http://dock.io/preheat/test",
"url": "",
"urls": [
"https://example.com/path/to/file",
"https://example.com/path/to/file/url-1",
"https://example.com/path/to/file/url-2"
],
"username": ""
},
"result": {
"CreatedAt": "2023-12-13T11:58:53.535716295Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-13T11:58:53.535716295Z",
"Error": "",
"Results": null,
"State": "STARTED",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed3"
"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
},
{
"CreatedAt": "2023-12-13T11:58:53.535716295Z",
"Error": "rpc error: code = Aborted desc = source response 401/401 Unauthorized is not valid",
"Results": null,
"State": "FAILURE",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed3"
"created_at": "2023-03-23T08:29:18.204923418Z",
"error": "rpc error: code = Aborted desc = source response 401/401 Unauthorized is not valid",
"results": null,
"state": "FAILURE",
"task_name": "preheat",
"task_uuid": "task_d44f42d9-5b01-4f4a-a8dd-34331eefa84a",
"ttl": 0
},
{
"CreatedAt": "2023-12-13T11:58:53.535716295Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed3"
"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": "FAILURE"
"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": [],
"scheduler_clusters": [
{
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
"id": 1
}
]
}

View File

@ -4,109 +4,89 @@
"created_at": "2023-03-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "Expires&Signature",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
"Connection": "keep-alive"
},
"password": "",
"platform": "",
"tag": "",
"scope": "single_peer",
"tag": "prheat tag",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"url": "http://dock.io/preheat/test",
"username": ""
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed3"
"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"
"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
"scheduler_clusters": [
{
"id": 1
}
]
},
{
"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_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed3"
"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"
"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
},
{
@ -114,54 +94,42 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed3"
"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"
"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
},
{
@ -169,54 +137,42 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed3"
"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"
"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
}
]

View File

@ -4,54 +4,42 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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

@ -1,78 +1,53 @@
{
"id": 11,
"created_at": "2023-12-13T11:58:53Z",
"updated_at": "2023-12-13T11:59:02Z",
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_625019d8-8503-4038-92b8-ae05f8381e1d",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status pending",
"type": "preheat",
"state": "PENDING",
"args": {
"filteredQueryParams": "Expires&Signature",
"headers": {
"Connection": "keep-alive"
},
"application": "application-1",
"concurrent_count": 50,
"content_for_calculating_task_id": null,
"count": null,
"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",
"headers": { "Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT" },
"load_to_cache": false,
"password": "",
"percentage": 100,
"piece_length": null,
"platform": "",
"tag": "prheat tag",
"scope": "all_seed_peers",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "http://dock.io/preheat/test",
"url": "",
"urls": ["https://example.com/path/to/file"],
"username": ""
},
"result": {
"CreatedAt": "2023-12-13T11:58:53.535716295Z",
"GroupUUID": "group_625019d8-8503-4038-92b8-ae05f8381e1d",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-13T11:58:53.535716295Z",
"Error": "",
"Results": [],
"State": "PENDING",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_67a715b1-12b0-4c96-8ea7-699f38da7eff"
"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"
"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": [],
"seed_peer_clusters": null,
"scheduler_clusters": [
{
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
"id": 1
}
]
}

View File

@ -4,52 +4,41 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status pending",
"type": "preheat",
"state": "PENDING",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
},
"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
"state": "PENDING",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"seed_peer_clusters": null,
"scheduler_clusters": null

View File

@ -4,54 +4,43 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status pending",
"type": "preheat",
"state": "PENDING",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_seed_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": null
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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
},
{
@ -64,49 +53,38 @@
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_seed_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"url": "http://dock.io/preheat/test",
"username": "",
"piece_length": null
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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
},
{
@ -114,109 +92,87 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_seed_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "all_seed_peers",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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
},
{
@ -224,54 +180,43 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "all_seed_peers",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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
},
{
@ -279,54 +224,43 @@
"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",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "all_seed_peers",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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
},
{
@ -334,109 +268,87 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "all_peers",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "all_peers",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": null
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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
},
{
@ -444,109 +356,87 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status failure",
"type": "preheat",
"state": "FAILURE",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "all_peers",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"concurrent_count": 50,
"filtered_query_params": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT"
},
"password": "",
"platform": "",
"scope": "single_seed_peer",
"tag": "",
"timeout": 1800000000000,
"type": "file",
"url": "https://example.com/path/to/file",
"username": ""
"username": "",
"piece_length": 4194304
},
"result": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_01f9f92f-02c7-477e-8360-a387407b73dd",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
"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

@ -1,99 +1,62 @@
{
"id": 8,
"created_at": "2023-12-14T11:24:17Z",
"updated_at": "2023-12-14T11:24:27Z",
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"headers": {
"Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT",
"Connection": "keep-alive"
},
"password": "",
"platform": "",
"tag": "",
"type": "file",
"url": "http://dock.io/preheat/test",
"application": "application-1",
"concurrent_count": 1000,
"count": null,
"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",
"headers": { "Authorization": "Bearer yJhbGciOiJSUzI1NiIsImtpZCI6IjNEWT", "Connection": "keep-alive" },
"load_to_cache": false,
"password": "root",
"percentage": null,
"piece_length": 4194304,
"platform": "linux/amd64",
"scope": "single_seed_peer",
"tag": "tag-1",
"timeout": 3600000000000,
"type": "image",
"url": "https://example.com/manifests/v2.1.0",
"urls": null,
"username": ""
},
"result": {
"CreatedAt": "2023-12-14T11:24:17.716397045Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-14T11:24:17.716397045Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed3"
"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"
"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": [],
"scheduler_clusters": [
{
"id": 1,
"id": 102133,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
"name": "cluster-1"
},
{
"id": 2,
"id": 203023,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-2",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
"name": "cluster-2"
}
]
}

View File

@ -1,55 +1,44 @@
[
{
"id": 8,
"created_at": "2023-03-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
},
"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
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"seed_peer_clusters": null,
"scheduler_clusters": null
@ -59,52 +48,41 @@
"created_at": "2023-03-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
},
"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
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"seed_peer_clusters": null,
"scheduler_clusters": null
@ -114,162 +92,129 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_2e5c8b9f-96be-4ef6-9bf4-23d25675dfac",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_2e5c8b9f-96be-4ef6-9bf4-23d25675dfac",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
},
"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
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 4,
"created_at": "2023-03-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
},
"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
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"seed_peer_clusters": null,
"scheduler_clusters": null
},
{
"id": 2,
"created_at": "2023-03-23T15:55:41+08:00",
"updated_at": "2023-03-23T15:55:41+08:00",
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T07:55:35.492980831Z",
"GroupUUID": "group_f60c3730-b718-45c7-98a5-014052c1c02a",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
},
"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
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"seed_peer_clusters": null,
"scheduler_clusters": null
@ -279,52 +224,41 @@
"created_at": "2023-03-23T16:29:18+08:00",
"updated_at": "2023-03-23T16:29:18+08:00",
"is_del": 0,
"task_id": "group_2e5c8b9f-96be-4ef6-9bf4-23d25675dfac",
"task_id": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"bio": "This is a preheat task with status success",
"type": "preheat",
"state": "SUCCESS",
"args": {
"filteredQueryParams": "",
"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": {
"CreatedAt": "2023-03-23T08:29:18.204923418Z",
"GroupUUID": "group_2e5c8b9f-96be-4ef6-9bf4-23d25675dfac",
"JobStates": [
"created_at": "2023-03-23T08:29:18.204923418Z",
"group_uuid": "group_7d8fec4c-6b8f-4240-9f56-71845d21d6a7",
"job_states": [
{
"CreatedAt": "2023-12-12T06:16:10.243413422Z",
"Error": "",
"Results": [],
"State": "SUCCESS",
"TTL": 0,
"TaskName": "preheat",
"TaskUUID": "task_8cd497e9-4748-45c3-acc4-db32aebe44ed"
"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"
},
"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
"state": "SUCCESS",
"updated_at": "2024-09-14T10:39:16.549159043Z"
},
"seed_peer_clusters": null,
"scheduler_clusters": null

View File

@ -65,7 +65,7 @@
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-1",
"git_commit": "git-commit-2",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
@ -111,11 +111,11 @@
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-1",
"git_commit": "git-commit-3",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 2,
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
@ -161,7 +161,7 @@
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 3,
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
@ -207,7 +207,7 @@
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 3,
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
@ -253,7 +253,7 @@
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 4,
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
@ -320,5 +320,143 @@
"peers": null,
"jobs": null
}
},
{
"id": 8,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-8",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-4",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 9,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-9",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-3",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 10,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-10",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-5",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
}
]

View File

@ -0,0 +1,646 @@
[
{
"id": 1,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-1",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "inactive",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-1",
"git_commit": "commit-1",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 2,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-2",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-2",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 3,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-3",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-3",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-2",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 4,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-4",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-3",
"git_commit": "git-commit-2",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-3",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 5,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-5",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "inactive",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-3",
"git_commit": "git-commit-3",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-3",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 6,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-6",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-4",
"git_commit": "git-commit-4",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-4",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 7,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-7",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-1",
"git_commit": "git-commit-4",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 8,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-8",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-4",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 9,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-9",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-3",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 10,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-10",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-2",
"git_commit": "git-commit-5",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 11,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-10",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-5",
"git_commit": "git-commit-5",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 12,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-12",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-5",
"git_commit": "git-commit-1",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 13,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-13",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-6",
"git_commit": "git-commit-2",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
},
{
"id": 14,
"created_at": "2023-12-18T09:36:14Z",
"updated_at": "2023-12-18T09:36:14Z",
"is_del": 0,
"host_name": "peer-14",
"type": "super",
"idc": "sdfsd",
"location": "Hangzhou",
"ip": "30.44.96.255",
"port": 34001,
"download_port": 34201,
"object_storage_port": 0,
"state": "active",
"os": "linux",
"platform": "example",
"platform_family": "",
"platform_version": "7.2",
"kernel_version": "5.23.23",
"git_version": "git-version-3",
"git_commit": "git-commit-6",
"build_platform": "linux",
"scheduler_cluster_id": 1,
"scheduler_cluster": {
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1",
"bio": "",
"config": {
"candidate_parent_limit": 4,
"filter_parent_limit": 40
},
"client_config": {
"concurrent_piece_count": 4,
"load_limit": 50
},
"scopes": {},
"is_default": true,
"seed_peer_clusters": null,
"schedulers": null,
"peers": null,
"jobs": null
}
}
]

View File

@ -0,0 +1,254 @@
[
{
"id": "3810320977",
"persistent_replica_count": 2,
"tag": "tag-4",
"application": "application-3",
"piece_length": 4194304,
"content_length": 52408,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:36:36Z",
"updated_at": "2025-05-06T06:36:36Z",
"peers": null
},
{
"id": "1396408888",
"persistent_replica_count": 2,
"tag": "",
"application": "",
"piece_length": 4194304,
"content_length": 1714,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T02:06:43Z",
"updated_at": "2025-05-06T02:06:43Z",
"peers": null
},
{
"id": "2865345332",
"persistent_replica_count": 2,
"tag": "tag-1",
"application": "application-1",
"piece_length": 4194304,
"content_length": 1630,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-01T05:24:05Z",
"updated_at": "2025-05-01T05:24:05Z",
"peers": null
},
{
"id": "3870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "1396408888",
"persistent_replica_count": 2,
"tag": "",
"application": "",
"piece_length": 4194304,
"content_length": 1714,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T02:06:43Z",
"updated_at": "2025-05-06T02:06:43Z",
"peers": null
},
{
"id": "219317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "2865345332",
"persistent_replica_count": 2,
"tag": "tag-1",
"application": "application-1",
"piece_length": 4194304,
"content_length": 1630,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-01T05:24:05Z",
"updated_at": "2025-05-01T05:24:05Z",
"peers": null
},
{
"id": "2484851399",
"persistent_replica_count": 2,
"tag": "tag-4",
"application": "application-2",
"piece_length": 4194304,
"content_length": 17484,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:36:22Z",
"updated_at": "2025-05-06T06:36:22Z",
"peers": null
},
{
"id": "2484851397",
"persistent_replica_count": 2,
"tag": "tag-4",
"application": "application-2",
"piece_length": 4194304,
"content_length": 17484,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:36:22Z",
"updated_at": "2025-05-06T06:36:22Z",
"peers": null
},
{
"id": "219317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "3870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "219317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "3870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "3870122508",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "8270122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "215317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "1870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "1336408888",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
}
]

View File

@ -0,0 +1,254 @@
[
{
"id": "1396408888",
"persistent_replica_count": 2,
"tag": "",
"application": "",
"piece_length": 4194304,
"content_length": 1714,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T02:06:43Z",
"updated_at": "2025-05-06T02:06:43Z",
"peers": null
},
{
"id": "2865345332",
"persistent_replica_count": 2,
"tag": "tag-1",
"application": "application-1",
"piece_length": 4194304,
"content_length": 1630,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-01T05:24:05Z",
"updated_at": "2025-05-01T05:24:05Z",
"peers": null
},
{
"id": "3870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "1396408888",
"persistent_replica_count": 2,
"tag": "",
"application": "",
"piece_length": 4194304,
"content_length": 1714,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T02:06:43Z",
"updated_at": "2025-05-06T02:06:43Z",
"peers": null
},
{
"id": "219317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "2865345332",
"persistent_replica_count": 2,
"tag": "tag-1",
"application": "application-1",
"piece_length": 4194304,
"content_length": 1630,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-01T05:24:05Z",
"updated_at": "2025-05-01T05:24:05Z",
"peers": null
},
{
"id": "2484851399",
"persistent_replica_count": 2,
"tag": "tag-4",
"application": "application-2",
"piece_length": 4194304,
"content_length": 17484,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:36:22Z",
"updated_at": "2025-05-06T06:36:22Z",
"peers": null
},
{
"id": "2865345332",
"persistent_replica_count": 2,
"tag": "tag-1",
"application": "application-1",
"piece_length": 4194304,
"content_length": 1630,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-01T05:24:05Z",
"updated_at": "2025-05-01T05:24:05Z",
"peers": null
},
{
"id": "2484851397",
"persistent_replica_count": 2,
"tag": "tag-4",
"application": "application-2",
"piece_length": 4194304,
"content_length": 17484,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:36:22Z",
"updated_at": "2025-05-06T06:36:22Z",
"peers": null
},
{
"id": "219317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "3870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "219317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "3870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "3870122508",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "8270122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "215317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "1870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "1336408888",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
}
]

View File

@ -0,0 +1,14 @@
{
"id": "3870122508",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
}

View File

@ -0,0 +1,507 @@
{
"id": "2865345332",
"persistent_replica_count": 2,
"tag": "tag-1",
"application": "application-1",
"piece_length": 4194304,
"content_length": 1630,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-01T05:24:05Z",
"updated_at": "2025-05-01T05:24:05Z",
"peers": [
{
"block_parents": ["task", "cache"],
"cost": 9223372036854776000,
"created_at": "2025-05-01T05:24:05Z",
"finished_pieces": {},
"host": {
"announce_interval": 3600000000000,
"build": {
"git_commit": "git-commit-1",
"git_version": "git-version-1",
"go_version": "go-version-1",
"platform": "Linux"
},
"cpu": {
"logical_count": 2,
"percent": 69,
"physical_count": 12,
"process_percent": 2,
"times": {
"guest": 1,
"guest_nice": 12,
"idle": 4,
"iowait": 5,
"irq": 2,
"nice": 11,
"softirq": 9,
"steal": 1,
"system": 2,
"user": 1
}
},
"created_at": "2025-05-06T02:06:43Z",
"disable_shared": false,
"disk": {
"free": 12,
"inodes_free": 12,
"inodes_total": 2,
"inodes_used": 1,
"inodes_used_percent": 12,
"read_bandwidth": 12,
"total": 12,
"used": 21474836480,
"used_percent": 12,
"write_bandwidth": 12
},
"download_port": 4000,
"hostname": "hostname-1",
"id": "1",
"ip": "10.244.3.8",
"kernel_version": "1.1.1",
"memory": {
"available": 2,
"free": 1,
"process_used_percent": 4,
"total": 13,
"used": 122,
"used_percent": 1
},
"network": {
"rx_bandwidth": 1000,
"max_rx_bandwidth": 4000,
"idc": "HangZhou",
"location": "HangZhou",
"tcp_connection_count": 2,
"tx_bandwidth": 1000,
"max_tx_bandwidth": 20000,
"upload_tcp_connection_count": 4
},
"os": "ios",
"platform": "Linux",
"platform_family": "Linux",
"platform_version": "1.2.3",
"port": 4001,
"scheduler_cluster_id": "1",
"type": "super",
"updated_at": "2025-05-01T05:24:05Z"
},
"id": "1",
"persistent": false,
"state": "Succeeded",
"updated_at": "2025-05-01T05:24:05Z"
},
{
"block_parents": ["task", "cache"],
"cost": 9223372036854776000,
"created_at": "2025-05-01T05:24:05Z",
"finished_pieces": {},
"host": {
"announce_interval": 3600000000000,
"build": {
"git_commit": "git-commit-1",
"git_version": "git-version-1",
"go_version": "go-version-1",
"platform": "Linux"
},
"cpu": {
"logical_count": 2,
"percent": 12,
"physical_count": 12,
"process_percent": 2,
"times": {
"guest": 1,
"guest_nice": 12,
"idle": 4,
"iowait": 5,
"irq": 2,
"nice": 11,
"softirq": 9,
"steal": 1,
"system": 2,
"user": 1
}
},
"created_at": "2025-05-06T02:06:43Z",
"disable_shared": false,
"disk": {
"free": 12,
"inodes_free": 12,
"inodes_total": 2,
"inodes_used": 1,
"inodes_used_percent": 12,
"read_bandwidth": 12,
"total": 12,
"used": 21474836480,
"used_percent": 12,
"write_bandwidth": 12
},
"download_port": "4001",
"hostname": "hostname-2",
"id": "1",
"ip": "112.3325.44",
"kernel_version": "1.1.1",
"memory": {
"available": 2,
"free": 1,
"process_used_percent": 4,
"total": 13,
"used": 122,
"used_percent": 1
},
"network": {
"rx_bandwidth": 1000,
"max_rx_bandwidth": 4000,
"idc": "HangZhou",
"location": "HangZhou",
"tcp_connection_count": 2,
"tx_bandwidth": 1000,
"max_tx_bandwidth": 20000,
"upload_tcp_connection_count": 4
},
"os": "ios",
"platform": "Linux",
"platform_family": "Linux",
"platform_version": "1.2.3",
"port": 8001,
"scheduler_cluster_id": "1",
"type": "super",
"updated_at": "2025-05-01T05:24:05Z"
},
"id": "2",
"persistent": true,
"state": "succeeded",
"updated_at": "2025-05-01T05:24:05Z"
},
{
"block_parents": ["task", "cache"],
"cost": 9223372036854776000,
"created_at": "2025-05-01T05:24:05Z",
"finished_pieces": {},
"host": {
"announce_interval": 3600000000000,
"build": {
"git_commit": "git-commit-1",
"git_version": "git-version-1",
"go_version": "go-version-1",
"platform": "Linux"
},
"cpu": {
"logical_count": 2,
"percent": 69,
"physical_count": 12,
"process_percent": 2,
"times": {
"guest": 1,
"guest_nice": 12,
"idle": 4,
"iowait": 5,
"irq": 2,
"nice": 11,
"softirq": 9,
"steal": 1,
"system": 2,
"user": 1
}
},
"created_at": "2025-05-06T02:06:43Z",
"disable_shared": false,
"disk": {
"free": 12,
"inodes_free": 12,
"inodes_total": 2,
"inodes_used": 1,
"inodes_used_percent": 12,
"read_bandwidth": 12,
"total": 12,
"used": 21474836480,
"used_percent": 12,
"write_bandwidth": 12
},
"download_port": 4000,
"hostname": "hostname-3",
"id": "1",
"ip": "10.244.3.8",
"kernel_version": "1.1.1",
"memory": {
"available": 2,
"free": 1,
"process_used_percent": 4,
"total": 13,
"used": 122,
"used_percent": 1
},
"network": {
"rx_bandwidth": 1000,
"max_rx_bandwidth": 4000,
"idc": "HangZhou",
"location": "HangZhou",
"tcp_connection_count": 2,
"tx_bandwidth": 1000,
"max_tx_bandwidth": 20000,
"upload_tcp_connection_count": 4
},
"os": "Linux",
"platform": "Linux",
"platform_family": "Linux",
"platform_version": "1.2.3",
"port": 4001,
"scheduler_cluster_id": "1",
"type": "super",
"updated_at": "2025-05-01T05:24:05Z"
},
"id": "3",
"persistent": false,
"state": "Succeeded",
"updated_at": "2025-05-01T05:24:05Z"
},
{
"block_parents": ["task", "cache"],
"cost": 9223372036854776000,
"created_at": "2025-05-01T05:24:05Z",
"finished_pieces": {},
"host": {
"announce_interval": 3600000000000,
"build": {
"git_commit": "git-commit-1",
"git_version": "git-version-1",
"go_version": "go-version-1",
"platform": "Linux"
},
"cpu": {
"logical_count": 2,
"percent": 69,
"physical_count": 12,
"process_percent": 2,
"times": {
"guest": 1,
"guest_nice": 12,
"idle": 4,
"iowait": 5,
"irq": 2,
"nice": 11,
"softirq": 9,
"steal": 1,
"system": 2,
"user": 1
}
},
"created_at": "2025-05-06T02:06:43Z",
"disable_shared": false,
"disk": {
"free": 12,
"inodes_free": 12,
"inodes_total": 2,
"inodes_used": 1,
"inodes_used_percent": 12,
"read_bandwidth": 12,
"total": 12,
"used": 21474836480,
"used_percent": 12,
"write_bandwidth": 12
},
"download_port": 4000,
"hostname": "hostname-4",
"id": "1",
"ip": "10.244.3.8",
"kernel_version": "1.1.1",
"memory": {
"available": 2,
"free": 1,
"process_used_percent": 4,
"total": 13,
"used": 122,
"used_percent": 1
},
"network": {
"rx_bandwidth": 1000,
"max_rx_bandwidth": 4000,
"idc": "HangZhou",
"location": "HangZhou",
"tcp_connection_count": 2,
"tx_bandwidth": 1000,
"max_tx_bandwidth": 20000,
"upload_tcp_connection_count": 4
},
"os": "ios",
"platform": "Linux",
"platform_family": "Linux",
"platform_version": "1.2.3",
"port": 4001,
"scheduler_cluster_id": "1",
"type": "super",
"updated_at": "2025-05-01T05:24:05Z"
},
"id": "4",
"persistent": false,
"state": "Succeeded",
"updated_at": "2025-05-01T05:24:05Z"
},
{
"block_parents": ["task", "cache"],
"cost": 9223372036854776000,
"created_at": "2025-05-01T05:24:05Z",
"finished_pieces": {},
"host": {
"announce_interval": 3600000000000,
"build": {
"git_commit": "git-commit-1",
"git_version": "git-version-1",
"go_version": "go-version-1",
"platform": "Linux"
},
"cpu": {
"logical_count": 2,
"percent": 69,
"physical_count": 12,
"process_percent": 2,
"times": {
"guest": 1,
"guest_nice": 12,
"idle": 4,
"iowait": 5,
"irq": 2,
"nice": 11,
"softirq": 9,
"steal": 1,
"system": 2,
"user": 1
}
},
"created_at": "2025-05-06T02:06:43Z",
"disable_shared": false,
"disk": {
"free": 12,
"inodes_free": 12,
"inodes_total": 2,
"inodes_used": 1,
"inodes_used_percent": 12,
"read_bandwidth": 12,
"total": 12,
"used": 21474836480,
"used_percent": 12,
"write_bandwidth": 12
},
"download_port": 4000,
"hostname": "hostname-5",
"id": "1",
"ip": "10.244.3.8",
"kernel_version": "1.1.1",
"memory": {
"available": 2,
"free": 1,
"process_used_percent": 4,
"total": 13,
"used": 122,
"used_percent": 1
},
"network": {
"rx_bandwidth": 1000,
"max_rx_bandwidth": 4000,
"idc": "HangZhou",
"location": "HangZhou",
"tcp_connection_count": 2,
"tx_bandwidth": 1000,
"max_tx_bandwidth": 20000,
"upload_tcp_connection_count": 4
},
"os": "ios",
"platform": "Linux",
"platform_family": "Linux",
"platform_version": "1.2.3",
"port": 4001,
"scheduler_cluster_id": "1",
"type": "super",
"updated_at": "2025-05-01T05:24:05Z"
},
"id": "5",
"persistent": false,
"state": "Succeeded",
"updated_at": "2025-05-01T05:24:05Z"
},
{
"block_parents": ["task", "cache"],
"cost": 9223372036854776000,
"created_at": "2025-05-01T05:24:05Z",
"finished_pieces": {},
"host": {
"announce_interval": 3600000000000,
"build": {
"git_commit": "git-commit-1",
"git_version": "git-version-1",
"go_version": "go-version-1",
"platform": "Linux"
},
"cpu": {
"logical_count": 2,
"percent": 69,
"physical_count": 12,
"process_percent": 2,
"times": {
"guest": 1,
"guest_nice": 12,
"idle": 4,
"iowait": 5,
"irq": 2,
"nice": 11,
"softirq": 9,
"steal": 1,
"system": 2,
"user": 1
}
},
"created_at": "2025-05-06T02:06:43Z",
"disable_shared": false,
"disk": {
"free": 12,
"inodes_free": 12,
"inodes_total": 2,
"inodes_used": 1,
"inodes_used_percent": 12,
"read_bandwidth": 12,
"total": 12,
"used": 21474836480,
"used_percent": 12,
"write_bandwidth": 12
},
"download_port": 4000,
"hostname": "hostname-7",
"id": "1",
"ip": "10.244.3.8",
"kernel_version": "1.1.1",
"memory": {
"available": 2,
"free": 1,
"process_used_percent": 4,
"total": 13,
"used": 122,
"used_percent": 1
},
"network": {
"rx_bandwidth": 1000,
"max_rx_bandwidth": 4000,
"idc": "HangZhou",
"location": "HangZhou",
"tcp_connection_count": 2,
"tx_bandwidth": 1000,
"max_tx_bandwidth": 20000,
"upload_tcp_connection_count": 4
},
"os": "ios",
"platform": "Linux",
"platform_family": "Linux",
"platform_version": "1.2.3",
"port": 4001,
"scheduler_cluster_id": "1",
"type": "super",
"updated_at": "2025-05-01T05:24:05Z"
},
"id": "6",
"persistent": true,
"state": "Succeeded",
"updated_at": "2025-05-01T05:24:05Z"
}
]
}

View File

@ -0,0 +1,268 @@
[
{
"id": "3810320977",
"persistent_replica_count": 2,
"tag": "tag-4",
"application": "application-3",
"piece_length": 4194304,
"content_length": 52408,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:36:36Z",
"updated_at": "2025-05-06T06:36:36Z",
"peers": null
},
{
"id": "1396408888",
"persistent_replica_count": 2,
"tag": "",
"application": "",
"piece_length": 4194304,
"content_length": 1714,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T02:06:43Z",
"updated_at": "2025-05-06T02:06:43Z",
"peers": null
},
{
"id": "2865345332",
"persistent_replica_count": 2,
"tag": "tag-1",
"application": "application-1",
"piece_length": 4194304,
"content_length": 1630,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-01T05:24:05Z",
"updated_at": "2025-05-01T05:24:05Z",
"peers": null
},
{
"id": "3870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "1396408888",
"persistent_replica_count": 2,
"tag": "",
"application": "",
"piece_length": 4194304,
"content_length": 1714,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T02:06:43Z",
"updated_at": "2025-05-06T02:06:43Z",
"peers": null
},
{
"id": "219317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "2865345332",
"persistent_replica_count": 2,
"tag": "tag-1",
"application": "application-1",
"piece_length": 4194304,
"content_length": 1630,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-01T05:24:05Z",
"updated_at": "2025-05-01T05:24:05Z",
"peers": null
},
{
"id": "2484851399",
"persistent_replica_count": 2,
"tag": "tag-4",
"application": "application-2",
"piece_length": 4194304,
"content_length": 17484,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:36:22Z",
"updated_at": "2025-05-06T06:36:22Z",
"peers": null
},
{
"id": "2865345332",
"persistent_replica_count": 2,
"tag": "tag-1",
"application": "application-1",
"piece_length": 4194304,
"content_length": 1630,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-01T05:24:05Z",
"updated_at": "2025-05-01T05:24:05Z",
"peers": null
},
{
"id": "2484851397",
"persistent_replica_count": 2,
"tag": "tag-4",
"application": "application-2",
"piece_length": 4194304,
"content_length": 17484,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:36:22Z",
"updated_at": "2025-05-06T06:36:22Z",
"peers": null
},
{
"id": "219317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "3870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "219317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "3870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "3870122508",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "8270122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "215317117",
"persistent_replica_count": 2,
"tag": "tag-3",
"application": "",
"piece_length": 4194304,
"content_length": 5640,
"total_piece_count": 1,
"state": "Succeeded",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:49Z",
"updated_at": "2025-05-06T06:35:49Z",
"peers": null
},
{
"id": "1870122509",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
},
{
"id": "1336408888",
"persistent_replica_count": 2,
"tag": "tag-2",
"application": "",
"piece_length": 4194304,
"content_length": 39359,
"total_piece_count": 1,
"state": "Failed",
"ttl": 604800000000000,
"created_at": "2025-05-06T06:35:30Z",
"updated_at": "2025-05-06T06:35:30Z",
"peers": null
}
]

View File

@ -0,0 +1,29 @@
{
"id": 1,
"created_at": "0001-01-01T00:00:00Z",
"updated_at": "0001-01-01T00:00:00Z",
"is_del": 0,
"task_id": "group_5c604ac6-2e40-4917-84da-705d67667872",
"bio": "",
"type": "get_task",
"state": "PENDING",
"args": {
"application": "",
"content_for_calculating_task_id": null,
"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",
"piece_length": 4194304
},
"result": null,
"scheduler_clusters": [
{
"id": 1,
"created_at": "2024-11-01T05:42:02Z",
"updated_at": "2024-11-01T05:42:02Z",
"is_del": 0,
"name": "cluster-1"
}
]
}

View File

@ -0,0 +1,174 @@
{
"id": 9,
"created_at": "2024-11-01T10:02:44Z",
"updated_at": "2024-11-01T10:03:19Z",
"is_del": 0,
"task_id": "group_2803b402-0348-4039-8fb1-b62cbebf7a7d",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:02:44.836338419Z",
"group_uuid": "group_2803b402-0348-4039-8fb1-b62cbebf7a7d",
"job_states": [
{
"created_at": "2024-11-01T10:02:44.836338419Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_5b0498de-2336-4980-9aff-9a03158951b2",
"ttl": 0
},
{
"created_at": "2024-11-01T10:02:44.836845086Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "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\"",
"host_type": "super",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_14a43448-47c1-4d8c-8d7f-af74ae9380ff",
"ttl": 0
},
{
"created_at": "2024-11-01T10:02:44.836982461Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "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\"",
"host_type": "super",
"hostname": "kind-worke2",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": [
{
"host_type": "super",
"hostname": "dragonfly-seed-client-2",
"ip": "10.244.1.24"
}
]
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_56bdc326-d08d-41b2-8124-6eb79546ae76",
"ttl": 0
},
{
"created_at": "2024-11-01T10:02:44.837099669Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "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\"",
"host_type": "super",
"hostname": "dragonfly-seed-client-3",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_9862c330-927c-4f34-975b-d9aa9e81b638",
"ttl": 0
},
{
"created_at": "2024-11-01T10:02:44.837099669Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "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\"",
"host_type": "super",
"hostname": "dragonfly-seed-client-4",
"ip": "172.18.0.4"
}
],
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_9862c330-927c-4f34-975b-d9aa9e81b638",
"ttl": 0
},
{
"created_at": "2024-11-01T10:02:44.837099669Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "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\"",
"host_type": "Normal",
"hostname": "dragonfly-seed-client-5",
"ip": "172.18.0.5"
}
],
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_9862c330-927c-4f34-975b-d9aa9e81b638",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T10:03:18.70472913Z"
},
"scheduler_clusters": [
{
"id": 102222,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1"
}
]
}

View File

@ -0,0 +1,919 @@
[
{
"id": 11,
"created_at": "2024-11-01T10:07:46Z",
"updated_at": "2024-11-01T10:08:17Z",
"is_del": 0,
"task_id": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"bio": "",
"type": "delete_task",
"state": "PENDING",
"args": {
"application": "",
"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",
"timeout": 1800000000000,
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",
"group_uuid": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"job_states": [
{
"created_at": "2024-11-01T10:07:46.676343295Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_b3a2705f-ce57-4678-99d2-b19c0d799d01",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.676642087Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_9d8517d5-6dce-4b67-9733-6d184dea336d",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.67679192Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_48fe538a-1c71-4af8-b9cb-b0619f27417d",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.677193129Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_c891f33e-513c-4131-9b4d-40f485b77cac",
"ttl": 0
}
],
"state": "PENDING",
"updated_at": "2024-11-01T10:08:16.695602295Z"
},
"scheduler_clusters": null
},
{
"id": 10,
"created_at": "2024-11-01T10:07:46Z",
"updated_at": "2024-11-01T10:08:17Z",
"is_del": 0,
"task_id": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"bio": "",
"type": "delete_task",
"state": "FAILURE",
"args": {
"application": "",
"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",
"timeout": 1800000000000,
"url": ""
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",
"group_uuid": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"job_states": [
{
"created_at": "2024-11-01T10:07:46.676343295Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_b3a2705f-ce57-4678-99d2-b19c0d799d01",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.676642087Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_9d8517d5-6dce-4b67-9733-6d184dea336d",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.67679192Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_48fe538a-1c71-4af8-b9cb-b0619f27417d",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.677193129Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_c891f33e-513c-4131-9b4d-40f485b77cac",
"ttl": 0
}
],
"state": "FAILURE",
"updated_at": "2024-11-01T10:08:16.695602295Z"
},
"scheduler_clusters": null
},
{
"id": 9,
"created_at": "2024-11-01T10:02:44Z",
"updated_at": "2024-11-01T10:03:19Z",
"is_del": 0,
"task_id": "group_2803b402-0348-4039-8fb1-b62cbebf7a7d",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "aea9af454bc33e61dd24647b0dd6d023195360a6b67c7c3e0feda4713819cc38",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
},
"result": {
"created_at": "2024-11-01T10:02:44.836338419Z",
"group_uuid": "group_2803b402-0348-4039-8fb1-b62cbebf7a7d",
"job_states": [
{
"created_at": "2024-11-01T10:02:44.836338419Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_5b0498de-2336-4980-9aff-9a03158951b2",
"ttl": 0
},
{
"created_at": "2024-11-01T10:02:44.836845086Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_14a43448-47c1-4d8c-8d7f-af74ae9380ff",
"ttl": 0
},
{
"created_at": "2024-11-01T10:02:44.836982461Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": [
{
"host_type": "super",
"hostname": "dragonfly-seed-client-2",
"ip": "10.244.1.24"
}
]
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_56bdc326-d08d-41b2-8124-6eb79546ae76",
"ttl": 0
},
{
"created_at": "2024-11-01T10:02:44.837099669Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_9862c330-927c-4f34-975b-d9aa9e81b638",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T10:03:18.70472913Z"
},
"scheduler_clusters": null
},
{
"id": 8,
"created_at": "2024-11-01T09:59:49Z",
"updated_at": "2024-11-01T10:00:19Z",
"is_del": 0,
"task_id": "group_ba382c88-b890-496d-8cee-e9fc2e689f3d",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
},
"result": {
"created_at": "2024-11-01T09:59:49.07231163Z",
"group_uuid": "group_ba382c88-b890-496d-8cee-e9fc2e689f3d",
"job_states": [
{
"created_at": "2024-11-01T09:59:49.07231163Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_509524a6-0352-4215-972f-f408b958ef31",
"ttl": 0
},
{
"created_at": "2024-11-01T09:59:49.072495713Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_61c19fe5-ef3f-4cc0-bf1b-321f3074edc7",
"ttl": 0
},
{
"created_at": "2024-11-01T09:59:49.072595088Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": [
{
"host_type": "super",
"hostname": "dragonfly-seed-client-1",
"ip": "10.244.2.22"
}
]
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_0a76d86c-ab9a-4d6b-95cd-6327aa60df92",
"ttl": 0
},
{
"created_at": "2024-11-01T09:59:49.072690005Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_39bf1704-5ae6-4000-8959-fa3511c6632d",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T10:00:19.091528713Z"
},
"scheduler_clusters": null
},
{
"id": 7,
"created_at": "2024-11-01T09:56:31Z",
"updated_at": "2024-11-01T09:57:02Z",
"is_del": 0,
"task_id": "group_4981bbfd-84e7-42cc-bf15-2f08a45cd2a0",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
},
"result": {
"created_at": "2024-11-01T09:56:31.537420427Z",
"group_uuid": "group_4981bbfd-84e7-42cc-bf15-2f08a45cd2a0",
"job_states": [
{
"created_at": "2024-11-01T09:56:31.537420427Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_a09a50d2-60bb-49e4-a00e-c3954f3a2ea2",
"ttl": 0
},
{
"created_at": "2024-11-01T09:56:31.537710011Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": [
{
"host_type": "super",
"hostname": "dragonfly-seed-client-0",
"ip": "10.244.1.26"
}
]
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_22aa3380-ee50-404f-9580-aa42811d264a",
"ttl": 0
},
{
"created_at": "2024-11-01T09:56:31.538062011Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_2459ee96-8d0a-4657-9658-ee082dfad605",
"ttl": 0
},
{
"created_at": "2024-11-01T09:56:31.538519219Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_b9a4ef50-1432-445f-9c7a-d9c2896ed8ac",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:57:01.559297719Z"
},
"scheduler_clusters": null
},
{
"id": 6,
"created_at": "2024-11-01T09:54:04Z",
"updated_at": "2024-11-01T09:54:05Z",
"is_del": 0,
"task_id": "group_04350d4a-cf51-4e22-b922-bf205e66dfdc",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
},
"result": {
"created_at": "2024-11-01T09:54:04.883390304Z",
"group_uuid": "group_04350d4a-cf51-4e22-b922-bf205e66dfdc",
"job_states": [
{
"created_at": "2024-11-01T09:54:04.883390304Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_5a72a069-1ece-44b1-bad1-4f59256e5dd2",
"ttl": 0
},
{
"created_at": "2024-11-01T09:54:04.883557971Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_c0114ad0-a8e8-4a12-870f-632bba987a92",
"ttl": 0
},
{
"created_at": "2024-11-01T09:54:04.883668346Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_09b26568-8f29-41c9-80cb-a4b24fc04d14",
"ttl": 0
},
{
"created_at": "2024-11-01T09:54:04.883761096Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_5d594ecb-2ba3-4257-87fe-a939eb974cb5",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:54:04.895802304Z"
},
"scheduler_clusters": null
},
{
"id": 5,
"created_at": "2024-11-01T09:34:14Z",
"updated_at": "2024-11-01T09:34:14Z",
"is_del": 0,
"task_id": "group_e278de40-2617-406b-9815-e0f423a482e3",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
},
"result": {
"created_at": "2024-11-01T09:34:14.312378294Z",
"group_uuid": "group_e278de40-2617-406b-9815-e0f423a482e3",
"job_states": [
{
"created_at": "2024-11-01T09:34:14.312378294Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_30ee8609-9c28-4411-bb2b-d6a9c7ab15e9",
"ttl": 0
},
{
"created_at": "2024-11-01T09:34:14.312598711Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_cb88ce77-09cf-4d83-9720-12e05f356dff",
"ttl": 0
},
{
"created_at": "2024-11-01T09:34:14.312772211Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_398d1ff1-d57b-42e4-a4e1-3b9f3ee780f1",
"ttl": 0
},
{
"created_at": "2024-11-01T09:34:14.312926294Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_5529227b-3d76-4f9c-8359-1765590e38d1",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:34:14.319862503Z"
},
"scheduler_clusters": null
},
{
"id": 4,
"created_at": "2024-11-01T09:32:30Z",
"updated_at": "2024-11-01T09:32:30Z",
"is_del": 0,
"task_id": "group_11d7e8f0-f278-4f2a-b2b9-d3e731999e25",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "",
"timeout": 1800000000000,
"url": "https://example.com/path/to/file"
},
"result": {
"created_at": "2024-11-01T09:32:30.001617594Z",
"group_uuid": "group_11d7e8f0-f278-4f2a-b2b9-d3e731999e25",
"job_states": [
{
"created_at": "2024-11-01T09:32:30.001617594Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_dfe115d9-f390-4762-9d3f-fd77f2bb701b",
"ttl": 0
},
{
"created_at": "2024-11-01T09:32:30.001825219Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_6429df22-4c56-4fd7-a661-d24ac3ca0799",
"ttl": 0
},
{
"created_at": "2024-11-01T09:32:30.001933969Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_7f77d628-b08a-4742-9e71-b339256c3b26",
"ttl": 0
},
{
"created_at": "2024-11-01T09:32:30.002039177Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_3bd16a73-5c67-48d7-b8f1-6e272be554e3",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:32:30.011738344Z"
},
"scheduler_clusters": null
},
{
"id": 3,
"created_at": "2024-11-01T09:28:11Z",
"updated_at": "2024-11-01T09:28:12Z",
"is_del": 0,
"task_id": "group_f4eef3fd-2b68-43c3-9a4b-3c2abae80425",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "sdfdsps",
"timeout": 1800000000000,
"url": ""
},
"result": {
"created_at": "2024-11-01T09:28:11.774771335Z",
"group_uuid": "group_f4eef3fd-2b68-43c3-9a4b-3c2abae80425",
"job_states": [
{
"created_at": "2024-11-01T09:28:11.774771335Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_94f08374-3f23-440e-8cf0-88c994565319",
"ttl": 0
},
{
"created_at": "2024-11-01T09:28:11.775160668Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_72a665ea-3959-4e12-a6c0-af00ce3a74ff",
"ttl": 0
},
{
"created_at": "2024-11-01T09:28:11.775705877Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_a0268a7a-f5fa-46ef-823d-6029d1fad7e6",
"ttl": 0
},
{
"created_at": "2024-11-01T09:28:11.776120002Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_3bce71dd-0d38-41eb-a24a-5d867c1bf22a",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:28:11.790449835Z"
},
"scheduler_clusters": null
},
{
"id": 2,
"created_at": "2024-11-01T09:25:05Z",
"updated_at": "2024-11-01T09:25:05Z",
"is_del": 0,
"task_id": "group_d9b8c7d2-f8ba-496b-99da-7d1e262a59ee",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "sdfdsss",
"timeout": 1800000000000,
"url": ""
},
"result": {
"created_at": "2024-11-01T09:25:05.260432054Z",
"group_uuid": "group_d9b8c7d2-f8ba-496b-99da-7d1e262a59ee",
"job_states": [
{
"created_at": "2024-11-01T09:25:05.260432054Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_000928e7-7d0d-4177-991b-2c4564a38e98",
"ttl": 0
},
{
"created_at": "2024-11-01T09:25:05.260758429Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_73c03072-4db3-468a-b22b-16631cfa48fe",
"ttl": 0
},
{
"created_at": "2024-11-01T09:25:05.261007846Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_bc777067-f466-4cda-9046-1a1c131e2d8d",
"ttl": 0
},
{
"created_at": "2024-11-01T09:25:05.261192054Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_22032823-5c3e-4a7a-b1c2-341ee423d76c",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:25:05.268218346Z"
},
"scheduler_clusters": null
}
]

View File

@ -0,0 +1,82 @@
{
"id": 10,
"created_at": "2024-11-01T10:07:46Z",
"updated_at": "2024-11-01T10:08:17Z",
"is_del": 0,
"task_id": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"bio": "",
"type": "delete_task",
"state": "FAILURE",
"args": {
"application": "execution-application",
"content_for_calculating_task_id": null,
"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": "execution-tag",
"task_id": "fe0c4a611d35e338efd342c346a2c671c358c5187c483a5fc7cd66c6685ce916",
"timeout": 1800000000000,
"url": "",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",
"group_uuid": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"job_states": [
{
"created_at": "2024-11-01T10:07:46.676343295Z",
"error": "rpc error: code = Aborted desc = source response 401/401 Unauthorized is not valid",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_b3a2705f-ce57-4678-99d2-b19c0d799d01",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.676642087Z",
"error": "rpc error: code = Aborted desc = source response 401/401 Unauthorized is not valid",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_9d8517d5-6dce-4b67-9733-6d184dea336d",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.67679192Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_48fe538a-1c71-4af8-b9cb-b0619f27417d",
"ttl": 0
}
],
"state": "FAILURE",
"updated_at": "2024-11-01T10:08:16.695602295Z"
},
"scheduler_clusters": [
{
"id": 1,
"created_at": "2023-11-27T07:31:23Z",
"updated_at": "2023-11-27T07:31:23Z",
"is_del": 0,
"name": "cluster-1"
}
]
}

View File

@ -0,0 +1,104 @@
[
{
"id": 10,
"created_at": "2024-11-01T10:07:46Z",
"updated_at": "2024-11-01T10:08:17Z",
"is_del": 0,
"task_id": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"bio": "",
"type": "delete_task",
"state": "FAILURE",
"args": {
"application": "",
"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",
"timeout": 1800000000000,
"url": "",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",
"group_uuid": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"job_states": [
{
"created_at": "2024-11-01T10:07:46.676343295Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_b3a2705f-ce57-4678-99d2-b19c0d799d01",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.676642087Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_9d8517d5-6dce-4b67-9733-6d184dea336d",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.67679192Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_48fe538a-1c71-4af8-b9cb-b0619f27417d",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.677193129Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_c891f33e-513c-4131-9b4d-40f485b77cac",
"ttl": 0
}
],
"state": "FAILURE",
"updated_at": "2024-11-01T10:08:16.695602295Z"
},
"scheduler_clusters": null
}
]

View File

@ -0,0 +1,133 @@
{
"image": {
"layers": [
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1f1039835051ecc04909f939530e86a20f02d2ce5ad7a81c0fa3616f7303944"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:c1d6d1b2d5a367259e6e51a7f4d1ccd66a28cc9940d6599d8a8ea9544dd4b4a8"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:871ab018db94b4ae7b137764837bc4504393a60656ba187189e985cd809064f7"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1a1d290795d904815786e41d39a41dc1af5de68a9e9020baba8bd83b32d8f95"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1ffc4b5459e82dc8e7ddd1d1a2ec469e85a1f076090c22851a1f2ce6f71e1a6"
}
]
},
"peers": [
{
"ip": "172.18.0.4",
"hostname": "kind-worker1",
"cached_layers": [
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1ffc4b5459e82dc8e7ddd1d1a2ec469e85a1f076090c22851a1f2ce6f71e1a6?format=json"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:c1d6d1b2d5a367259e6e51a7f4d1ccd66a28cc9940d6599d8a8ea9544dd4b4a8"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:c1d6d1b2d5a367259e6e51a7f4d1ccd66a28cc9940d6599d8a8ea9544dd4b4a7"
}
],
"scheduler_cluster_id": 1
},
{
"ip": "172.18.0.4",
"hostname": "kind-worker2",
"cached_layers": [
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1f1039835051ecc04909f939530e86a20f02d2ce5ad7a81c0fa3616f7303944"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:871ab018db94b4ae7b137764837bc4504393a60656ba187189e985cd809064f7"
}
],
"scheduler_cluster_id": 1
},
{
"ip": "172.18.0.4",
"hostname": "kind-worker3",
"cached_layers": [
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1ffc4b5459e82dc8e7ddd1d1a2ec469e85a1f076090c22851a1f2ce6f71e1a6"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:c1d6d1b2d5a367259e6e51a7f4d1ccd66a28cc9940d6599d8a8ea9544dd4b4a8"
}
],
"scheduler_cluster_id": 1
},
{
"ip": "172.18.0.4",
"hostname": "kind-worker4",
"cached_layers": [
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1f1039835051ecc04909f939530e86a20f02d2ce5ad7a81c0fa3616f7303944"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:871ab018db94b4ae7b137764837bc4504393a60656ba187189e985cd809064f7"
}
],
"scheduler_cluster_id": 1
},
{
"ip": "172.18.0.4",
"hostname": "kind-worker5",
"cached_layers": [
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1ffc4b5459e82dc8e7ddd1d1a2ec469e85a1f076090c22851a1f2ce6f71e1a6"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:c1d6d1b2d5a367259e6e51a7f4d1ccd66a28cc9940d6599d8a8ea9544dd4b4a8"
}
],
"scheduler_cluster_id": 1
},
{
"ip": "172.18.0.4",
"hostname": "kind-worker6",
"cached_layers": [
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1f1039835051ecc04909f939530e86a20f02d2ce5ad7a81c0fa3616f7303944"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:871ab018db94b4ae7b137764837bc4504393a60656ba187189e985cd809064f7"
}
],
"scheduler_cluster_id": 1
},
{
"ip": "172.18.0.3",
"hostname": "kind-worker7",
"cached_layers": [
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1f1039835051ecc04909f939530e86a20f02d2ce5ad7a81c0fa3616f7303944"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:871ab018db94b4ae7b137764837bc4504393a60656ba187189e985cd809064f7"
}
],
"scheduler_cluster_id": 2
},
{
"ip": "172.18.0.3",
"hostname": "kind-worker8",
"cached_layers": [
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:f1f1039835051ecc04909f939530e86a20f02d2ce5ad7a81c0fa3616f7303944"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:871ab018db94b4ae7b137764837bc4504393a60656ba187189e985cd809064f7"
},
{
"url": "https://ghcr.io/v2/dragonflyoss/scheduler/blobs/sha256:771ab018db94b4ae7b137764837bc4504393a60656ba187189e985cd809064f7"
}
],
"scheduler_cluster_id": 2
}
]
}

View File

@ -0,0 +1,77 @@
{
"id": 258,
"created_at": "2024-11-05T03:10:31Z",
"updated_at": "2024-11-05T03:10:32Z",
"is_del": 0,
"task_id": "group_cbf67a5b-4141-46fc-b94b-ed154fb0f676",
"bio": "",
"type": "get_task",
"state": "SUCCESS",
"args": {
"application": "",
"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",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-05T03:10:31.965787257Z",
"group_uuid": "group_cbf67a5b-4141-46fc-b94b-ed154fb0f676",
"job_states": [
{
"created_at": "2024-11-05T03:10:31.965787257Z",
"error": "",
"results": [
{
"peers": null,
"scheduler_cluster_id": 1
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_d0b96ebb-c25b-4ff8-9363-9bffcbdb8ca9",
"ttl": 0
},
{
"created_at": "2024-11-05T03:10:31.966357924Z",
"error": "",
"results": [
{
"peers": null,
"scheduler_cluster_id": 1
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_c567d258-5b1c-488e-982f-977e790e50b8",
"ttl": 0
},
{
"created_at": "2024-11-05T03:10:31.966615966Z",
"error": "",
"results": [
{
"peers": null,
"scheduler_cluster_id": 1
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_c444a3b3-1d7c-4734-9ce4-634a2f1f9bce",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-05T03:10:31.980092632Z"
},
"scheduler_clusters": [
{
"id": 1,
"created_at": "2024-11-01T05:42:02Z",
"updated_at": "2024-11-01T05:42:02Z",
"is_del": 0,
"name": "cluster-1"
}
]
}

View File

@ -0,0 +1,90 @@
[
{
"id": 1,
"created_at": "2024-11-01T09:25:05Z",
"updated_at": "2024-11-01T09:25:05Z",
"is_del": 0,
"task_id": "group_d9b8c7d2-f8ba-496b-99da-7d1e262a59ee",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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",
"timeout": 1800000000000,
"url": "",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:25:05.260432054Z",
"group_uuid": "group_d9b8c7d2-f8ba-496b-99da-7d1e262a59ee",
"job_states": [
{
"created_at": "2024-11-01T09:25:05.260432054Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_000928e7-7d0d-4177-991b-2c4564a38e98",
"ttl": 0
},
{
"created_at": "2024-11-01T09:25:05.260758429Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_73c03072-4db3-468a-b22b-16631cfa48fe",
"ttl": 0
},
{
"created_at": "2024-11-01T09:25:05.261007846Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_bc777067-f466-4cda-9046-1a1c131e2d8d",
"ttl": 0
},
{
"created_at": "2024-11-01T09:25:05.261192054Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_22032823-5c3e-4a7a-b1c2-341ee423d76c",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:25:05.268218346Z"
},
"scheduler_clusters": null
}
]

View File

@ -0,0 +1,88 @@
{
"id": 11,
"created_at": "2024-11-01T10:07:46Z",
"updated_at": "2024-11-01T10:08:17Z",
"is_del": 0,
"task_id": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"bio": "",
"type": "delete_task",
"state": "PENDING",
"args": {
"application": "",
"content_for_calculating_task_id": null,
"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",
"timeout": 1800000000000,
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",
"group_uuid": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"job_states": [
{
"created_at": "2024-11-01T10:07:46.676343295Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_b3a2705f-ce57-4678-99d2-b19c0d799d01",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.676642087Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_9d8517d5-6dce-4b67-9733-6d184dea336d",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.677193129Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_c891f33e-513c-4131-9b4d-40f485b77cac",
"ttl": 0
}
],
"state": "PENDING",
"updated_at": "2024-11-01T10:08:16.695602295Z"
},
"scheduler_clusters": null
}

View File

@ -0,0 +1,74 @@
[
{
"id": 11,
"created_at": "2024-11-01T10:07:46Z",
"updated_at": "2024-11-01T10:08:17Z",
"is_del": 0,
"task_id": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"bio": "",
"type": "delete_task",
"state": "PENDING",
"args": {
"application": "",
"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",
"timeout": 1800000000000,
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:07:46.676343295Z",
"group_uuid": "group_b0d76d25-a800-4a74-b577-35690b8fb75d",
"job_states": [
{
"created_at": "2024-11-01T10:07:46.676343295Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_b3a2705f-ce57-4678-99d2-b19c0d799d01",
"ttl": 0
},
{
"created_at": "2024-11-01T10:07:46.677193129Z",
"error": "",
"results": [
{
"failure_tasks": [
{
"description": "task a1e21fcec1ba95d4407a83b3fc767da6de2a2fe35736c2ba3b95473229de1894 failed: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing: dial tcp 172.18.0.3:4000: connect: connection refused\"",
"host_type": "normal",
"hostname": "kind-worker",
"ip": "172.18.0.3"
}
],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_c891f33e-513c-4131-9b4d-40f485b77cac",
"ttl": 0
}
],
"state": "PENDING",
"updated_at": "2024-11-01T10:08:16.695602295Z"
},
"scheduler_clusters": null
}
]

View File

@ -0,0 +1,64 @@
{
"id": 1,
"created_at": "2024-11-02T10:39:33Z",
"updated_at": "2024-11-02T10:39:33Z",
"is_del": 0,
"task_id": "group_bf122e8c-97af-41c1-937a-1fc390c074d6",
"bio": "",
"type": "get_task",
"state": "PENDING",
"args": {
"application": "",
"content_for_calculating_task_id": null,
"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",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-02T10:39:33.32490896Z",
"group_uuid": "group_bf122e8c-97af-41c1-937a-1fc390c074d6",
"job_states": [
{
"created_at": "2024-11-02T10:39:33.32490896Z",
"error": "",
"results": [
{
"peers": null,
"scheduler_cluster_id": 1
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_755c2749-aade-4dcc-bffb-a75cbb225bdf",
"ttl": 0
},
{
"created_at": "2024-11-02T10:39:33.32522671Z",
"error": "",
"results": [
{
"peers": null,
"scheduler_cluster_id": 1
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_39e7e095-db06-45c6-a04b-c8b4950221a4",
"ttl": 0
}
],
"state": "PENDING",
"updated_at": "2024-11-02T10:39:33.334817876Z"
},
"scheduler_clusters": [
{
"id": 1,
"created_at": "2024-11-01T05:42:02Z",
"updated_at": "2024-11-01T05:42:02Z",
"is_del": 0,
"name": "cluster-1"
}
]
}

View File

@ -0,0 +1,488 @@
[
{
"id": 9,
"created_at": "2024-11-01T10:02:44Z",
"updated_at": "2024-11-01T10:03:19Z",
"is_del": 0,
"task_id": "group_2803b402-0348-4039-8fb1-b62cbebf7a7d",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "aea9af454bc33e61dd24647b0dd6d023195360a6b67c7c3e0feda4713819cc38",
"url": "https://example.com/path/to/file",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T10:02:44.836338419Z",
"group_uuid": "group_2803b402-0348-4039-8fb1-b62cbebf7a7d",
"job_states": [
{
"created_at": "2024-11-01T10:02:44.836338419Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_5b0498de-2336-4980-9aff-9a03158951b2",
"ttl": 0
},
{
"created_at": "2024-11-01T10:02:44.836982461Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": [
{
"host_type": "super",
"hostname": "dragonfly-seed-client-2",
"ip": "10.244.1.24"
}
]
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_56bdc326-d08d-41b2-8124-6eb79546ae76",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T10:03:18.70472913Z"
},
"scheduler_clusters": null
},
{
"id": 8,
"created_at": "2024-11-01T09:59:49Z",
"updated_at": "2024-11-01T10:00:19Z",
"is_del": 0,
"task_id": "group_ba382c88-b890-496d-8cee-e9fc2e689f3d",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:59:49.07231163Z",
"group_uuid": "group_ba382c88-b890-496d-8cee-e9fc2e689f3d",
"job_states": [
{
"created_at": "2024-11-01T09:59:49.072595088Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": [
{
"host_type": "super",
"hostname": "dragonfly-seed-client-1",
"ip": "10.244.2.22"
}
]
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_0a76d86c-ab9a-4d6b-95cd-6327aa60df92",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T10:00:19.091528713Z"
},
"scheduler_clusters": null
},
{
"id": 7,
"created_at": "2024-11-01T09:56:31Z",
"updated_at": "2024-11-01T09:57:02Z",
"is_del": 0,
"task_id": "group_4981bbfd-84e7-42cc-bf15-2f08a45cd2a0",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:56:31.537420427Z",
"group_uuid": "group_4981bbfd-84e7-42cc-bf15-2f08a45cd2a0",
"job_states": [
{
"created_at": "2024-11-01T09:56:31.537710011Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": [
{
"host_type": "super",
"hostname": "dragonfly-seed-client-0",
"ip": "10.244.1.26"
}
]
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_22aa3380-ee50-404f-9580-aa42811d264a",
"ttl": 0
},
{
"created_at": "2024-11-01T09:56:31.538519219Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_b9a4ef50-1432-445f-9c7a-d9c2896ed8ac",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:57:01.559297719Z"
},
"scheduler_clusters": null
},
{
"id": 6,
"created_at": "2024-11-01T09:54:04Z",
"updated_at": "2024-11-01T09:54:05Z",
"is_del": 0,
"task_id": "group_04350d4a-cf51-4e22-b922-bf205e66dfdc",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:54:04.883390304Z",
"group_uuid": "group_04350d4a-cf51-4e22-b922-bf205e66dfdc",
"job_states": [
{
"created_at": "2024-11-01T09:54:04.883557971Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_c0114ad0-a8e8-4a12-870f-632bba987a92",
"ttl": 0
},
{
"created_at": "2024-11-01T09:54:04.883761096Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_5d594ecb-2ba3-4257-87fe-a939eb974cb5",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:54:04.895802304Z"
},
"scheduler_clusters": null
},
{
"id": 5,
"created_at": "2024-11-01T09:34:14Z",
"updated_at": "2024-11-01T09:34:14Z",
"is_del": 0,
"task_id": "group_e278de40-2617-406b-9815-e0f423a482e3",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:34:14.312378294Z",
"group_uuid": "group_e278de40-2617-406b-9815-e0f423a482e3",
"job_states": [
{
"created_at": "2024-11-01T09:34:14.312598711Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_cb88ce77-09cf-4d83-9720-12e05f356dff",
"ttl": 0
},
{
"created_at": "2024-11-01T09:34:14.312772211Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_398d1ff1-d57b-42e4-a4e1-3b9f3ee780f1",
"ttl": 0
},
{
"created_at": "2024-11-01T09:34:14.312926294Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_5529227b-3d76-4f9c-8359-1765590e38d1",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:34:14.319862503Z"
},
"scheduler_clusters": null
},
{
"id": 4,
"created_at": "2024-11-01T09:32:30Z",
"updated_at": "2024-11-01T09:32:30Z",
"is_del": 0,
"task_id": "group_11d7e8f0-f278-4f2a-b2b9-d3e731999e25",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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",
"piece_length": 4194304
},
"result": {
"created_at": "2024-11-01T09:32:30.001617594Z",
"group_uuid": "group_11d7e8f0-f278-4f2a-b2b9-d3e731999e25",
"job_states": [
{
"created_at": "2024-11-01T09:32:30.001825219Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_6429df22-4c56-4fd7-a661-d24ac3ca0799",
"ttl": 0
},
{
"created_at": "2024-11-01T09:32:30.001933969Z",
"error": "",
"results": [
{
"failure_tasks": [],
"scheduler_cluster_id": 1,
"success_tasks": []
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_7f77d628-b08a-4742-9e71-b339256c3b26",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:32:30.011738344Z"
},
"scheduler_clusters": null
},
{
"id": 3,
"created_at": "2024-11-01T09:28:11Z",
"updated_at": "2024-11-01T09:28:12Z",
"is_del": 0,
"task_id": "group_f4eef3fd-2b68-43c3-9a4b-3c2abae80425",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "8c3dbd38fc7f4b3637d4e8ad8490ce107ac4cf2df81d45e7d33224f29ab4cf3d",
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T09:28:11.774771335Z",
"group_uuid": "group_f4eef3fd-2b68-43c3-9a4b-3c2abae80425",
"job_states": [
{
"created_at": "2024-11-01T09:28:11.775705877Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_a0268a7a-f5fa-46ef-823d-6029d1fad7e6",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:28:11.790449835Z"
},
"scheduler_clusters": null
},
{
"id": 2,
"created_at": "2024-11-01T09:25:05Z",
"updated_at": "2024-11-01T09:25:05Z",
"is_del": 0,
"task_id": "group_d9b8c7d2-f8ba-496b-99da-7d1e262a59ee",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "8c3dbd38fc7f4b3637d4e8ad8490ce107ac4cf2df81d45e7d33224f29ab4cf3d",
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T09:25:05.260432054Z",
"group_uuid": "group_d9b8c7d2-f8ba-496b-99da-7d1e262a59ee",
"job_states": [
{
"created_at": "2024-11-01T09:25:05.261192054Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_22032823-5c3e-4a7a-b1c2-341ee423d76c",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:25:05.268218346Z"
},
"scheduler_clusters": null
},
{
"id": 1,
"created_at": "2024-11-01T09:25:05Z",
"updated_at": "2024-11-01T09:25:05Z",
"is_del": 0,
"task_id": "group_d9b8c7d2-f8ba-496b-99da-7d1e262a59ee",
"bio": "",
"type": "delete_task",
"state": "SUCCESS",
"args": {
"application": "",
"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": "8c3dbd38fc7f4b3637d4e8ad8490ce107ac4cf2df81d45e7d33224f29ab4cf3d",
"url": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-01T09:25:05.260432054Z",
"group_uuid": "group_d9b8c7d2-f8ba-496b-99da-7d1e262a59ee",
"job_states": [
{
"created_at": "2024-11-01T09:25:05.260432054Z",
"error": "",
"results": [
{
"failure_tasks": null,
"scheduler_cluster_id": 1,
"success_tasks": null
}
],
"state": "SUCCESS",
"task_name": "delete_task",
"task_uuid": "task_000928e7-7d0d-4177-991b-2c4564a38e98",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-01T09:25:05.268218346Z"
},
"scheduler_clusters": null
}
]

View File

@ -0,0 +1,180 @@
{
"id": 1,
"created_at": "2024-11-02T10:39:33Z",
"updated_at": "2024-11-02T10:39:33Z",
"is_del": 0,
"task_id": "group_bf122e8c-97af-41c1-937a-1fc390c074d6",
"bio": "",
"type": "get_task",
"state": "SUCCESS",
"args": {
"application": "",
"content_for_calculating_task_id": null,
"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": "",
"piece_length": null
},
"result": {
"created_at": "2024-11-02T10:39:33.32490896Z",
"group_uuid": "group_bf122e8c-97af-41c1-937a-1fc390c074d6",
"job_states": [
{
"created_at": "2024-11-02T10:39:33.32522671Z",
"error": "",
"results": [
{
"peers": null,
"scheduler_cluster_id": 1
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_39e7e095-db06-45c6-a04b-c8b4950221a4",
"ttl": 0
},
{
"created_at": "2024-11-02T10:39:33.32540646Z",
"error": "",
"results": [
{
"peers": [
{
"created_at": "2024-11-02T10:39:24.68466522Z",
"host_type": "normal",
"hostname": "kind-worker1",
"id": "172.18.0.2-kind-worker2-3de3df03-a97d-4784-b608-f9b04b3085f3",
"ip": "172.18.0.2",
"updated_at": "2024-11-02T10:39:25.41550097Z"
},
{
"created_at": "2024-11-02T10:39:24.88036297Z",
"host_type": "super",
"hostname": "dragonfly-seed-client-1",
"id": "10.144.2.5-dragonfly-seed-client-0-174887a9-8975-4c1f-9bfa-a1982950240e-seed",
"ip": "10.144.2.5",
"updated_at": "2024-11-02T10:39:25.415384054Z"
},
{
"created_at": "2024-11-02T10:39:24.68466522Z",
"host_type": "normal",
"hostname": "kind-worker5",
"id": "172.18.0.2-kind-worker2-3de3df03-a97d-4784-b608-f9b04b3085f3",
"ip": "172.18.0.2",
"updated_at": "2024-11-02T10:39:25.41550097Z"
}
],
"scheduler_cluster_id": 1
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_fc30bfaa-ac06-4eca-9388-fc61996e01b1",
"ttl": 0
},
{
"created_at": "2024-11-02T10:39:33.325832835Z",
"error": "",
"results": [
{
"peers": null,
"scheduler_cluster_id": 1
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_93fd135c-1938-4282-8982-30bc3bfc5c52",
"ttl": 0
},
{
"created_at": "2024-11-02T10:39:33.326261168Z",
"error": "",
"results": [
{
"peers": [
{
"created_at": "2024-11-02T10:39:24.68466522Z",
"host_type": "normal",
"hostname": "kind-worker3",
"id": "172.18.0.2-kind-worker3-3de3df03-a97d-4784-b608-f9b04b3085f3",
"ip": "172.18.0.2",
"updated_at": "2024-11-02T10:39:25.41550097Z"
},
{
"created_at": "2024-11-02T10:39:24.88036297Z",
"host_type": "super",
"hostname": "dragonfly-seed-client-1",
"id": "10.244.1.4-dragonfly-seed-client-0-174887a9-8975-4c1f-9bfa-a1982950240e-seed",
"ip": "10.244.1.4",
"updated_at": "2024-11-02T10:39:25.415384054Z"
},
{
"created_at": "2024-11-02T10:39:24.68466522Z",
"host_type": "normal",
"hostname": "kind-worker2",
"id": "172.18.0.2-kind-worker3-3de3df03-a97d-4784-b608-f9b04b3085f3",
"ip": "172.18.0.2",
"updated_at": "2024-11-02T10:39:25.41550097Z"
}
],
"scheduler_cluster_id": 2
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_8fdd8f51-3830-4242-8b17-6e23b882dc64",
"ttl": 0
},
{
"created_at": "2024-11-02T10:39:33.32603696Z",
"error": "",
"results": [
{
"peers": [
{
"created_at": "2024-11-02T10:39:24.68466522Z",
"host_type": "normal",
"hostname": "kind-worker3",
"id": "172.18.0.2-kind-worker3-3de3df03-a97d-4784-b608-f9b04b3085f3",
"ip": "172.18.0.2",
"updated_at": "2024-11-02T10:39:25.41550097Z"
},
{
"created_at": "2024-11-02T10:39:24.88036297Z",
"host_type": "super",
"hostname": "dragonfly-seed-client-1",
"id": "10.244.1.4-dragonfly-seed-client-0-174887a9-8975-4c1f-9bfa-a1982950240e-seed",
"ip": "10.244.1.4",
"updated_at": "2024-11-02T10:39:25.415384054Z"
}
],
"scheduler_cluster_id": 3
}
],
"state": "SUCCESS",
"task_name": "get_task",
"task_uuid": "task_8128ca20-a6fb-49f4-9c51-7781bae1823a",
"ttl": 0
}
],
"state": "SUCCESS",
"updated_at": "2024-11-02T10:39:33.334817876Z"
},
"scheduler_clusters": [
{
"id": 1,
"created_at": "2024-11-01T05:42:02Z",
"updated_at": "2024-11-01T05:42:02Z",
"is_del": 0,
"name": "cluster-1"
},
{
"id": 2,
"created_at": "2024-11-01T05:42:02Z",
"updated_at": "2024-11-01T05:42:02Z",
"is_del": 0,
"name": "cluster-2"
}
]
}

Some files were not shown because too many files have changed in this diff Show More