Giter VIP home page Giter VIP logo

binchengzhao / delicate Goto Github PK

View Code? Open in Web Editor NEW
663.0 13.0 67.0 7.83 MB

A lightweight and distributed task scheduling platform written in rust. (一个轻量的分布式的任务调度平台通过rust编写)

License: Apache License 2.0

Rust 96.32% PLpgSQL 0.18% Shell 0.48% HTML 0.28% Less 2.69% TypeScript 0.05%
rust wip cron scheduler distributed-systems crontab async actix-web scheduling

delicate's Introduction

Delicate

Build License

English | 简体中文

What is delicate

delicate logo

delicate A lightweight and distributed task scheduling platform written in rust.:

features

  • Friendly UI: [Front-end] Convenient management of tasks & executors, monitoring their status and supporting manual maintenance etc.

  • Flexible Operations: Flexible task operations, support for limiting the maximum number of parallelism in a single node, time zone settings corresponding to cron expressions, scheduling modes (single, fixed number, constantly repeating), the ability to manually trigger tasks at any time, manually terminate task instances, and view task logs online.

  • High Availability: Delicate supports unlimited horizontal expansion. It's easy to achieve high availability and performance by deploying as many Delicate servers and executors.

  • High Performance: Lightweight and essential features speed up the performance, The basic resource overhead for delicate is roughly (less than 0.1% cpu usage, with about 10m of memory.)

  • Observability: There are many meaningful statistics periodically in a readable way.

  • Upgrade: Dynamic upgrade of the system (upgrade is done by obtaining the latest source code and performing database migration.

  • Reusability: Excutor provides restful-api that allows user applications to maintain custom tasks.

  • Permission Management: Permission management function based on casbin implementation, continuously optimize the experience.

The architecture of delicate:

architecture topology

Project rendering

Click me

Benchmark

Task take about 6,424 ns (+/- 52) per scheduling on CentOS Linux release 7.6.1810 (Core) (varies by OS/hardware).

System: CentOS Linux release 7.6.1810 (Core) - 4cores/8G.

Single node: delicate-executor

Task creation, peak cpu consumption 3%, qps: 17000+

Task cancellation, peak cpu consumption 3%, qps: 18000+

Task manual scheduling, peak cpu consumption 3.5%, qps: 14000+

Task removal, peak cpu consumption 3%, qps: 14000+

health_check, peak cpu consumption 4%, qps: 2600+

The peak memory consumption is all within 60M (varies by OS/hardware).

The rest of the overall indicators await bench.

Get Started

The basic common usage of delicate is to quickly set up for the backend servers and executors. We split it into multiple simple steps to illustrate the delicate concepts and operations.

The source code installation requires:

  • rustc (minimum-supported version of rustc is 1.54.)
  • libmysqlclient-dev & libpq-dev & libssl-dev

Setting up delicate

  1. install the rust suite: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh or curl --tlsv1.2 -sSf https://sh.rustup.rs | sh or curl https://sh.rustup.rs -sSf | sh . (It is possible to encounter a curl error and need to retry several times, These problems are usually due to the fact that the curl version is too low, or the network is unstable.)

  2. initialize cargo in the current shell, source $HOME/.cargo/env .

  3. Get the delicate source code and compile it ( this is an example, please get the corresponding Tag version according to your needs ) : git clone https://github.com/BinChengZhao/delicate.git .

  4. cd delicate/ .

  5. cargo check , check for environment dependencies etc.

  6. when error: linker cc not found: solution : yum -y install gcc .

  7. when --- stderr thread 'main' panicked at 'Without* set in .env: NotPresent' then you need to set the environment variable, using the project's template.env ` .

  8. cp template.env .env and start modifying the configuration.

  9. Compile the executable with cargo build --release after passing it.

  10. Start delicate-scheduler: nohup target/release/delicate-scheduler >> scheduler.log 2>&1 & on the machine where the server is deployed .

  11. start delicate-executor: nohup target/release/delicate-executor >> executor.log 2>&1 & on the machine performing the task .

  12. Please refer to delicate-web/README.md for the deployment of front-end resources.

  13. delicate-scheduler & delicate-web need to be under the same domain (such as api.delicate.com & web.delicate.com), so as to avoid cross-domain issues, Both delicate-scheduler & delicate-web can be deployed in clustered versions, accessible via reverse proxy.

Quick start

Quick-start

Documentation

See reference for more information.

To Do List

  • I18n (English & Chinese).
  • Permission Management.
  • Multiple login protocols, LDAP CAS .
  • Machine resource panel, online view of processes, memory, cpu, etc.
  • Database back-end support Postgres.
  • scheduler & executor communication using RPC, but currently there are problems with dependencies (RPC framework (tonic | tarpc) both depend on tokio 1,current actix-web stable version 3, does not support integration with tokio 1 ).
  • Task flow support.
  • Dynamic executor load adjustment, where the resource group adjusts the task load of the task execution nodes according to the machine metrics.

Roadmap

See delicate Roadmap for details.

Contributing

🎈 Thanks for your help improving the project! We are so happy to have you! We have a contributing guide to help you get involved in the Delicate project.

Rust-guide Js-guide

Thanks

Sincere thanks to my friend Walker-os who helped me solve a lot of front-end resource problems and speed up the release of delicate and Liping Wang help me beautify the logo.

Stargazers over time

Stargazers over time

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

delicate's People

Contributors

binchengzhao avatar walker-os avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

delicate's Issues

mysqlclient

error: could not find native static library mysqlclient, perhaps an -L flag is missing?

Release version via docker

Currently it's all distributed via source code, and users still need to install their own rust environment or reinstall delicate, which is not a great experience.

Building the executable via docker will greatly improve the experience.

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

When I manually trigger a task, it always reports an error

Describe the bug
When I manually trigger a task, it always reports an error.As shown in the following figure.

Screenshots

  1. When I manually trigger a task, a stack overflow error is reported
    image

  2. An error will be reported when a task is triggered manually
    image

Desktop (please complete the following information):

  • OS: macOS 12.3.1 (21E258)
  • Browser: chrome

undefined symbol: _ZNSt8ios_base4InitD1Ev

Describe the bug
error: /home/liyunde/delicate/target/debug/deps/libmigrations_macros-66ae0fade1d84c0b.so: undefined symbol: _ZNSt8ios_base4InitD1Ev
-->/home/liyunde/.cargo/registry/src/mirrors.tuna.tsinghua.edu.cn-df7c3c540f42cdbd/diesel_migrations-1.4.0/src/lib.rs:82:1
|
82 | extern crate migrations_macros;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: could not compile diesel_migrations due to previous error

To Reproduce
Steps to reproduce the behavior:
git pull
已经是最新的。
cp template.env .env
cargo build -v

环境
centos8
rustc 1.58.1 (db9d1b20b 2022-01-20)
gcc 版本 8.5.0 20210514
/usr/lib/gcc/x86_64-redhat-linux/8/../../../libmysqlclient.a
nm target/debug/deps/libmigrations_macros-66ae0fade1d84c0b.so | grep _ZNSt8ios_base4InitD1Ev
U _ZNSt8ios_base4InitD1Ev

delicate_executor: Failed to send the event collection: builder error: relative URL without a base

delicate_executor: Failed to send the event collection: builder error: relative URL without a base - scheduler_host:dhlfzj.com/api/task_log/event_trigger executor_processor_id:5 executor_processor_host:127.0.0.1:9080 executor_processor_name:本机节点 executor_machine_id:1 time:1663990013 - ExecutorEventCollection { events: [ExecutorEvent { task_id: 7, id: 6979285480500105216, event_type: 1, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }, ExecutorEvent { task_id: 7, id: 6979285480500105216, event_type: 2, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }, ExecutorEvent { task_id: 7, id: 6979285484686020608, event_type: 1, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }, ExecutorEvent { task_id: 7, id: 6979285484686020608, event_type: 2, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }, ExecutorEvent { task_id: 7, id: 6979285488871936000, event_type: 1, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }, ExecutorEvent { task_id: 7, id: 6979285488871936000, event_type: 2, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }, ExecutorEvent { task_id: 7, id: 6979285493032685568, event_type: 1, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }, ExecutorEvent { task_id: 7, id: 6979285493032685568, event_type: 2, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }, ExecutorEvent { task_id: 7, id: 6979285497264738304, event_type: 1, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }, ExecutorEvent { task_id: 7, id: 6979285497264738304, event_type: 2, executor_processor_id: 5, executor_processor_name: "本机节点", executor_processor_host: "127.0.0.1:9080", output: None }], timestamp: 1663991331 }

What should I do?

Is there a plan for task flow to support forking and aggregation?

bi seems to have a strong need to support both forking and aggregation. xxl currently supports forking and Azkaban supports aggregation, neither of which is ideal.

bi似乎很需要同时支持分叉和聚合,目前xxl支持分叉,阿兹卡班支持聚合,都不太理想。

dashboard does not show

after log with admin/admin, the url is "web-local.delicate-rs.com/dashboard"

nothing shows

the erro message looks like
image

for details :
TypeError: utils.vc is undefined
render webpack://delicate-web/./src/layouts/index.js_+17_modules?:2274
React 7
unstable_runWithPriority webpack://delicate-web/./node_modules/scheduler/cjs/scheduler.production.min.js?:19
React 6
unlisten webpack://delicate-web/./node_modules/react-router/esm/react-router.js
+1_modules?:295
listen webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:4571
setTimeout handler*patchHistory/history.listen/< webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:4570
listener webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:294
notifyListeners webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:312
notifyListeners webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:311
setState webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:427
push webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:508
confirmTransitionTo webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:284
push webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:489
goDashboard webpack://delicate-web/./src/models/app.js
+_1_modules?:170
callee$ webpack://delicate-web/./src/models/app.js+1_modules?:265
tryCatch webpack://delicate-web/./node_modules/@umijs/preset-built-in/node_modules/regenerator-runtime/runtime.js?:45
invoke webpack://delicate-web/./node_modules/@umijs/preset-built-in/node_modules/regenerator-runtime/runtime.js?:274
method webpack://delicate-web/./node_modules/@umijs/preset-built-in/node_modules/regenerator-runtime/runtime.js?:97
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1988
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
promise callback*resolvePromise webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2127
runCallEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2194
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
proc webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1947
resolveIterator webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2133
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2109
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
runPutEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2176
exec webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1187
flush webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1228
asap webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1201
runPutEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2163
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
runSelectEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2376
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
promise callback*resolvePromise webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2127
runCallEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2194
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
proc webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1947
resolveIterator webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2133
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2109
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
runPutEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2176
exec webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1187
flush webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1228
asap webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1201
chan webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1414
emit webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1257
sagaMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2557
createPromiseMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:3604
createPromiseMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:3603
routerMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:4282
handleOk webpack://delicate-web/./src/pages/login/index.js
+8_modules?:193
onFinish webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:4082
submit webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:3900
promise callback*FormStore/this.submit webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:3895
onSubmit webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:4139
React 6
react-dom.production.min.js:209:195
React 5
unstable_runWithPriority webpack://delicate-web/./node_modules/scheduler/cjs/scheduler.production.min.js?:19
React 4
unstable_runWithPriority webpack://delicate-web/./node_modules/scheduler/cjs/scheduler.production.min.js?:19
React 6
unlisten webpack://delicate-web/./node_modules/react-router/esm/react-router.js
+1_modules?:295
listen webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:4571
(Async: setTimeout handler)
listen webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:4570
listener webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:294
notifyListeners webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:312
notifyListeners webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:311
setState webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:427
push webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:508
confirmTransitionTo webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:284
push webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:489
goDashboard webpack://delicate-web/./src/models/app.js
+_1_modules?:170
callee$ webpack://delicate-web/./src/models/app.js+1_modules?:265
tryCatch webpack://delicate-web/./node_modules/@umijs/preset-built-in/node_modules/regenerator-runtime/runtime.js?:45
invoke webpack://delicate-web/./node_modules/@umijs/preset-built-in/node_modules/regenerator-runtime/runtime.js?:274
method webpack://delicate-web/./node_modules/@umijs/preset-built-in/node_modules/regenerator-runtime/runtime.js?:97
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1988
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
(Async: promise callback)
resolvePromise webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2127
runCallEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2194
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
proc webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1947
resolveIterator webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2133
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2109
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
runPutEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2176
exec webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1187
flush webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1228
asap webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1201
runPutEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2163
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
runSelectEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2376
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
(Async: promise callback)
resolvePromise webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2127
runCallEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2194
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
proc webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1947
resolveIterator webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2133
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2109
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
runPutEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2176
exec webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1187
flush webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1228
asap webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1201
chan webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1414
emit webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1257
sagaMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2557
createPromiseMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:3604
createPromiseMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:3603
routerMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:4282
handleOk webpack://delicate-web/./src/pages/login/index.js
+8_modules?:193
onFinish webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:4082
submit webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:3900
(Async: promise callback)
submit webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:3895
onSubmit webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:4139
React 6
Uncaught TypeError: utils.vc is undefined
render webpack://delicate-web/./src/layouts/index.js
+17_modules?:2274
React 7
unstable_runWithPriority webpack://delicate-web/./node_modules/scheduler/cjs/scheduler.production.min.js?:19
React 6
unlisten webpack://delicate-web/./node_modules/react-router/esm/react-router.js
+1_modules?:295
listen webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:4571
setTimeout handler*patchHistory/history.listen/< webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:4570
listener webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:294
notifyListeners webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:312
notifyListeners webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:311
setState webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:427
push webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:508
confirmTransitionTo webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:284
push webpack://delicate-web/./node_modules/history-with-query/esm/history.js
+2_modules?:489
goDashboard webpack://delicate-web/./src/models/app.js
+_1_modules?:170
callee$ webpack://delicate-web/./src/models/app.js+1_modules?:265
tryCatch webpack://delicate-web/./node_modules/@umijs/preset-built-in/node_modules/regenerator-runtime/runtime.js?:45
invoke webpack://delicate-web/./node_modules/@umijs/preset-built-in/node_modules/regenerator-runtime/runtime.js?:274
method webpack://delicate-web/./node_modules/@umijs/preset-built-in/node_modules/regenerator-runtime/runtime.js?:97
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1988
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
promise callback*resolvePromise webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2127
runCallEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2194
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
proc webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1947
resolveIterator webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2133
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2109
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
runPutEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2176
exec webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1187
flush webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1228
asap webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1201
runPutEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2163
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
runSelectEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2376
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
promise callback*resolvePromise webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2127
runCallEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2194
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2112
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
proc webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1947
resolveIterator webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2133
runEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2109
next webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1992
currCb webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2065
runPutEffect webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2176
exec webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1187
flush webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1228
asap webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1201
chan webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1414
emit webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:1257
sagaMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:2557
createPromiseMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:3604
createPromiseMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:3603
routerMiddleware webpack://delicate-web/./src/.umi-production/plugin-dva/dva.ts
+29_modules?:4282
handleOk webpack://delicate-web/./src/pages/login/index.js
+8_modules?:193
onFinish webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:4082
submit webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:3900
promise callback*FormStore/this.submit webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+18_modules?:3895
onSubmit webpack://delicate-web/./node_modules/rc-field-form/es/index.js
+_18_modules?:4139
React 6
layouts__index.e9db34b6.async.js line 1 > eval:2274:7

i set "SCHEDUAL-NAME=scname" in .env file

can this project handle million of one time task?

I got 30 million users, every one has one task specified on at specific day, note not the same date, for example,

user1, got a task , run at 2021-10-3 23:19:00
user2, got a task , run at 2021-11-3 13:19:00
...

30 million tasks, which means we have no way to load all tasks into memory, does this project support this case please ?

check & build failed (linux-musl)

Describe the bug
A clear and concise description of what the bug is.

I had some problems with the check & build process.
cargo check 的过程中报错了。
报错内容跟 delicate-utils 的依赖 poem 有关。

[root@2cb22c0d29ba delicate]# cargo check
   Compiling delicate-scheduler v0.1.0 (/delicate/delicate-scheduler)
    Checking delicate-utils v0.1.0 (/delicate/delicate-utils)
error[E0599]: the method `as_dyn_error` exists for reference `&ParseCookieError`, but its trait bounds were not sati
sfied
   --> delicate-utils/src/error.rs:28:13
    |
28  |     #[error("Parse Cookie fail.")]
    |             ^^^^^^^^^^^^^^^^^^^^ method cannot be called on `&ParseCookieError` due to unsatisfied trait bound
s
    |
   ::: /root/.cargo/registry/src/github.com-1ecc6299db9ec823/poem-1.0.19/src/error.rs:253:1
    |
253 | pub enum ParseCookieError {
    | -------------------------
    | |
    | doesn't satisfy `ParseCookieError: AsDynError`
    | doesn't satisfy `ParseCookieError: StdError`
    |
    = note: the following trait bounds were not satisfied:
            `ParseCookieError: StdError`
            which is required by `ParseCookieError: AsDynError`
            `&ParseCookieError: StdError`
            which is required by `&ParseCookieError: AsDynError`

For more information about this error, try `rustc --explain E0599`.
error: could not compile `delicate-utils` due to previous error

I tested it in docker environment.
我分别用了 rust:alpine 和 rust:latest 来测试,结果都出现了一样的错误。

To Reproduce
Steps to reproduce the behavior:

1.install docker

apt install docker.io

2.pull & run rust:alpine (x86_64-unknown-linux-musl)

docker run -it --name rs-musl rust:alpine

3.git clone this repo

git clone --depth=1 https://github.com/BinChengZhao/delicate

4.copy env file

cd delicate
cp template.env .env

5.install deps

apk update
apk add mariadb-dev postgresql-dev openssl-dev musl-dev

6.run cargo command

cargo check

7.error (unsatisfied trait bounds)

   --> delicate-utils/src/error.rs:28:13
    |
28  |     #[error("Parse Cookie fail.")]
    |             ^^^^^^^^^^^^^^^^^^^^ method cannot be called on `&ParseCookieError` due to unsatisfied trait bounds

8.exit this container and run rust:latest (x86_64-unknown-linux-gnu)

docker run -it --name rs-stable rust:latest

9.run container & check deps

docker exec -it rs-stable bash
apt list --installed | grep -E "mysql|mariadb|libssl|libpq"
default-libmysqlclient-dev/now 1.0.7 amd64 [installed,local]
libmariadb-dev-compat/now 1:10.5.12-0+deb11u1 amd64 [installed,local]
libmariadb-dev/now 1:10.5.12-0+deb11u1 amd64 [installed,local]
libmariadb3/now 1:10.5.12-0+deb11u1 amd64 [installed,local]
libpq-dev/now 13.4-0+deb11u1 amd64 [installed,local]
libpq5/now 13.4-0+deb11u1 amd64 [installed,local]
libssl-dev/now 1.1.1k-1+deb11u1 amd64 [installed,local]
libssl1.1/now 1.1.1k-1+deb11u1 amd64 [installed,local]
mariadb-common/now 1:10.5.12-0+deb11u1 all [installed,local]
mysql-common/now 5.8+1.0.7 all [installed,local]
  1. copy env file & cargo check

I encountered the same error as the alpine (rust musl) container.

Expected behavior
A clear and concise description of what you expected to happen.

1.我想要在 alpine 容器里运行delicate。
I want to run it in a musl environment.

2.我希望开发者能提供预编译的版本。
这样子普通用户就不用操心编译的事情了。

I would like to get the musl binary on the release page.

3.我希望核心配置能在编译后进行修改,而不是重新配置,重新编译。
I would like to be able to change the configuration after compilation rather than recompile it with an .env file.

For example,
template-env.toml

[database]
# pssql or mysql
backend = "postgre"
url = "..."

[redis]
enabled = true

# IP address or hostname
host = "redis-docker"

port = 6379
passwd = "ItIsRedisPassword"

Screenshots

2021-11-05 09 38 25

Endless LOADING

To Reproduce
Run locally all projects.
cd delicate-web
$ yarn run start:development

Expected behavior
Any UI (or at least any error :)

Screenshots
LOADING

Desktop (please complete the following information):
chrome, firefox

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

To Reproduce
Steps to reproduce the behavior:

when work the cargo run --bin delicate-scheduler.

it reports that:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1  

the .env file and mysql configs is that DATABASE_URL=mysql://test111:[email protected]:3306/db_name

Output Prometheus metrics

Currently planning a project to go cloud-native, adapting Prometheus is a priority.

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

delay_timer-0.9.2/src/utils/parse.rs build error

  • Rust: [1.58.1]
  • OS: [centos8]
  • Version [main]

Additional context

delay_timer-0.9.2/src/utils/parse.rs:308:9
|
308 | Ok(process_linked_list)
| ^^^^^^^^^^^^^^^^^^^^^^^ expected enum error::CommandChildError, found struct anyhow::Error

'main' panicked at 'Without `DATABASE` set in .env

Hi,

Can you help me with the following information?

Screenshot 2023-03-25 at 10 33 23 PM

Step 7 reminds me to set the environment variable using the project's template.env`. Can you give me more information on that? Shall I fill in some information here? Do I need to provide the password for MySQL?

Screenshot 2023-03-25 at 10 39 22 PM

Thank you very much!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.