Distributed Task Scheduling System|分布式定时任务调度平台

Crocodile Distributed Task Scheduling System

GitHub Workflow Status Downloads Docker Pulls license Release GitHub issues GitHub pull requests

English | 中文

Introduction

A distributed task scheduling system based on Golang that supports http requests, run golang、python、python3、shell、bat

Screenshot

Click Me

                                                  +----------+
        +-------------+                           ||--------||
        ||-----------||                           ||        ||
        ||           ||                           || Worker ||
        ||   调度中心 ||                           ||         ||
        ||           ||      RPC调用(gRPC)        ||---------||
        ||-----------|| +-----------------------> ||-------- ||
        ||-----------||                           ||        ||
        ||           || <-----------------------+ || Worker ||
  +---> ||   调度中心 ||      任务实时日志            ||        ||
任 |    ||           ||                           ||--------||
务 |    ||-----------|| <------+                  ||--------||
完 |     +------------+        |                  ||        ||
成 |         ^    |            |                  || Worker ||
持 |       实|任   |            |数                ||        ||                
久 |       时|务   |获          |据                 +----------+ 
日 |       志|状   |取          |存                
志 |       日|态   |锁          |储
   |        v     v            v
   |      +-------+-+      +----+---+
   |      |         |      |        |
   +----- |  Redis  |      | MySQL  |
          |         |      |        |
          +---------+      +--------+

Features

  • Add, modify, delete, clone and run tasks on the web node
  • View real-time logs of running tasks and tasks in real time, and can terminate running tasks
  • Multiple task types:
        - Perform http request tasks
        - Run shell, python, golangpython3nodejscodes (of course other languages ​​can also be supported, please provide if necessary)
  • Father and child tasks:
        When the parent task or child task is set, the parent task-> main task-> subtask will be run first. If any task fails, the entire process will be interrupted immediately. You can also set the parent task or subtask Or serial run
  • Scheduling Algorithm:
        Supports four scheduling algorithms: random, rotation, worker weight, minimum worker number to call Worker to run tasks,
  • Custom alarm strategy:
        Can be set to alert multiple users when the task success, failure, or run is completed
        Set the return code or return content of the task to compare whether the actual return code or return content of the task is the same to determine whether the task runs successfully.
  • Host group:
        A task can only be bound to any host group. The running of the task will select a task in this host group to run the task through the task's routing strategy
  • Host:
        A host group can be bound to multiple hosts, the host is the node that actually runs the task, and the dispatch center automatically discovers after registration
  • security strategy
        Certificate encryption encrypts communication data     Access token
  • Task log management, clean up logs
  • Alarm notification support platform
    • Mail
    • WeChat
    • DingDing
    • Slack Channel
    • Telegram Bot
    • WebHook URL
  • Detailed task audit function
        All operations on data changes to users will be recorded
  • Permission control
    • Administrator
              Have all operating rights
    • general user
              New tasks and host groups can be created, but only tasks or host groups that have been created can be operated, but audit records and all users cannot be viewed
    • Guest
      Only viewing authority, no operation modification authority, but can not view audit records, all users

Supported platforms

  • Linux
  • Mac
  • Windows

Quick Start

git clone https://github.com/labulaka521/crocodile
cd crocodile
docker-compose up -d

Then open urlhttp://yourip:8080,you need to input a admin user and password to install it, than you will come in this system

Running

  • Click to download,uncompress it
  • installredismysql,then change config file core.toml
  • If you need to enable certificate authentication between scheduling nodes, please generate a certificate,
        Run the command to generate cert certificate
    crocodile cert
    

     Then two files cert.pem and key.pem will be generated locally in the current directory. After saving these two files, fill in the path of the file in the value configuration file. Each node needs these two files

  • Run as a scheduler center
        Multiple dispatch centers can be started to prevent single points of failure from causing dispatch to hang up

    ./crocodile server -c core.toml
  • Run as a Worker (host) node

    /crocodile client -c core.toml
    
  • View version compilation information

    ./crocodile version
    
  • Configuration Alarm

Development

  • Frontend
    • Install yarn
    • Go to the web directory, first download the dependency yarn, and then run the front-end yarn run dev separately
    • Package to go, execute make frontrnd,
  • Backend
    • Run make runs as a schdeule center
    • Run make runc as worker node

The sql directory is also packaged in go-bindata. During installation, the sql creation statement will be read from the file generated by go-bindata. If the sql is modified, re-execute make bin-data

Doc

Wiki

Donate

If this project could help you, I hope you could donate me by alipay

License

Crocodile is under the MIT license. See the LICENSE file for details.

Comments
  • 主机怎么添加?

    主机怎么添加?

    image image image 你好,我按github 上的操作,主机列表还是空的,要怎样才能添加主机

    image image

    1、支持四种调度算法随机、轮训、Worker权重、Worker最少任务数来调用Worker运行任务 假如我新增一个任务(不希望多个进程同时执行,如果同时跑需要加锁,所以脚本想做到同一时间只有一个worker在跑),定时跑,同一时间是不是只会有一个worker处理 2、看页面可以直接写脚本,但是不好进行代码维护,所以是可以直接通过页面的脚本去调用具体路径下的脚本吧 例如,shell 中 调用具体路径下的python 脚本。 这种方式要怎么写才能捕获到python 脚本的异常返回,上报异常。有没有demo 参考 image shell 脚本异常 应该是通过exit xx 来返回错误码 吧?

  • 1.1.5版本 ,收不到钉钉通知,如何排查?

    1.1.5版本 ,收不到钉钉通知,如何排查?

    报错日志如下 [root@croco crocodile]# ./crocodile-linux-amd64 version Version : v1.1.5 Commit : 0f33f88 BuildDate : 2020-07-11 [root@croco crocodile]# cat crocodile.log | grep dingtalk 2020-07-21T09:01:19.514+0800 error alarm/alarm.go:271 send dingding notify failed {"error": "errmsg: invalid timestamp, more: [https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq] errcode: 310000"}

  • v1.1.16使用钉钉推送约1个小时就会报错,重新后恢复,周而复始

    v1.1.16使用钉钉推送约1个小时就会报错,重新后恢复,周而复始

    版本信息:v1.1.6 22850e 报错信息: {"level":"error","time":"2020-07-29T14:00:30.217+0800","line":"alarm/alarm.go:271","msg":"send dingding notify failed","error":"errmsg: invalid timestamp, more: [https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq] errcode: 310000"}

  • 总是报一个错误

    总是报一个错误

    error hostgroup/hostgroup.go:278 model.GetHostsByHGID {"error": "can not find hostid", "errorVerbose": "can not find hostid\ngithub.com/labulaka521/crocodile/core/model.GetHostByIDS\n\t/home/runner/work/crocodile/crocodile/core/model/host.go:228\ngithub.com/labulaka521/crocodile/core/model.GetHostsByHGID\n\t/home/runner/work/crocodile/crocodile/core/model/hostgroup.go:191\ngithub.com/labulaka521/crocodile/core/router/api/v1/hostgroup.GetHostsByIHGID\n\t/home/runner/work/crocodile/crocodile/core/router/api/v1/hostgroup/hostgroup.go:276\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/runner/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:147\ngithub.com/labulaka521/crocodile/core/middleware.Oprtation.func1\n\t/home/runner/work/crocodile/crocodile/core/middleware/operation.go:61\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/runner/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:147\ngithub.com/labulaka521/crocodile/core/middleware.PermissionControl.func1\n\t/home/runner/work/crocodile/crocodile/core/middleware/auth.go:118\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/runner/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:147\ngithub.com/labulaka521/crocodile/core/middleware.ZapLogger.func1\n\t/home/runner/work/crocodile/crocodile/core/middleware/zaplogger.go:17\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/runner/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:147\ngithub.com/gin-gonic/gin.RecoveryWithWriter.func1\n\t/home/runner/go/pkg/mod/github.com/gin-gonic/[email protected]/recovery.go:83\ngithub.com/gin-gonic/gin.(*Context).Next\n\t/home/runner/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:147\ngithub.com/gin-gonic/gin.(*Engine).handleHTTPRequest\n\t/home/runner/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:403\ngithub.com/gin-gonic/gin.(*Engine).ServeHTTP\n\t/home/runner/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:364\nnet/http.serverHandler.ServeHTTP\n\t/opt/hostedtoolcache/go/1.13.8/x64/src/net/http/server.go:2802\nnet/http.(*conn).serve\n\t/opt/hostedtoolcache/go/1.13.8/x64/src/net/http/server.go:1890\nruntime.goexit\n\t/opt/hostedtoolcache/go/1.13.8/x64/src/runtime/asm_amd64.s:1357"}

  • server 运行端口问题

    server 运行端口问题

    我在我之间运行成功的那台服务器上, 将 server 的运行端口从 8080 修改为 8180, client 的 8088 端口并未修改, 结果就是 client 一直无法连通 server, 排除端口被占用的问题, 我使用 netstat 查看过, 都没有被占用

    image

    修改 server 端口为 8080, 成功 image

  • 我想执行一些复杂的 go 程序有办法实现吗?

    我想执行一些复杂的 go 程序有办法实现吗?

    我们有很多定时任务,基本都是操作数据库的,所以 main.go 里会 import 包含一些私有仓库的 module,比如

    package main
    
    import "xxx.com/go-common/db"
    
    func main() {
          db.CallFunction()
    }
    
  • v1.1.16运行约两天的样子,server无法正常提供服务

    v1.1.16运行约两天的样子,server无法正常提供服务

    报错如下,重新启动server端后恢复正常 {"level":"info","time":"2020-07-28T01:12:18.964+0800","line":"middleware/grpcmidd.go:36","msg":"[rpc req]","method":"/crocodile.task.Heartbeat/SendHb","req":"port:19588 ","resp":"","reqaddr":"127.0.0.1:39455","latency(ms)":1.551277} {"level":"info","time":"2020-07-28T01:12:19.263+0800","line":"schedule/schedule2.go:571","msg":"start run task","taskname":"check_website_api.dstcar.com"} {"level":"debug","time":"2020-07-28T01:12:19.263+0800","line":"schedule/schedule2.go:513","msg":"start get lock","taskid":"290165913800413184"} {"level":"error","time":"2020-07-28T01:12:19.264+0800","line":"schedule/schedule2.go:643","msg":"model.GetTaskByID failed","taskid":"290165913800413184","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"} {"level":"debug","time":"2020-07-28T01:12:19.265+0800","line":"schedule/schedule2.go:528","msg":"start release lock","taskid":"290165913800413184"} {"level":"debug","time":"2020-07-28T01:12:19.265+0800","line":"schedule/schedule2.go:599","msg":"stop expire lock","lockid":"task:runlock:290165913800413184"} {"level":"debug","time":"2020-07-28T01:12:21.973+0800","line":"schedule/grpc_impl.go:207","msg":"recv hearbeat","addr":"127.0.0.1:19588"} {"level":"error","time":"2020-07-28T01:12:21.974+0800","line":"middleware/grpcmidd.go:28","msg":"resp failed","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"} {"level":"info","time":"2020-07-28T01:12:21.974+0800","line":"middleware/grpcmidd.go:36","msg":"[rpc req]","method":"/crocodile.task.Heartbeat/SendHb","req":"port:19588 ","resp":"","reqaddr":"127.0.0.1:39455","latency(ms)":1.039417} {"level":"error","time":"2020-07-28T01:12:22.088+0800","line":"middleware/auth.go:108","msg":"checkAuth failed","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"} {"level":"warn","time":"2020-07-28T01:12:22.088+0800","line":"middleware/zaplogger.go:41","msg":"Gin","uid":"289850216985661440","method":"get","statuscode":10401,"reqip":"192.168.200.28","latency(ms)":1.281325,"url":"/api/v1/notify","respsize":36} {"level":"debug","time":"2020-07-28T01:12:24.978+0800","line":"schedule/grpc_impl.go:207","msg":"recv hearbeat","addr":"127.0.0.1:19588"} {"level":"error","time":"2020-07-28T01:12:24.980+0800","line":"middleware/grpcmidd.go:28","msg":"resp failed","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"} {"level":"info","time":"2020-07-28T01:12:24.980+0800","line":"middleware/grpcmidd.go:36","msg":"[rpc req]","method":"/crocodile.task.Heartbeat/SendHb","req":"port:19588 ","resp":"","reqaddr":"127.0.0.1:39455","latency(ms)":1.379629} {"level":"error","time":"2020-07-28T01:12:27.087+0800","line":"middleware/auth.go:108","msg":"checkAuth failed","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"} {"level":"warn","time":"2020-07-28T01:12:27.087+0800","line":"middleware/zaplogger.go:41","msg":"Gin","uid":"289850216985661440","method":"get","statuscode":10401,"reqip":"192.168.200.28","latency(ms)":1.247689,"url":"/api/v1/notify","respsize":36} {"level":"debug","time":"2020-07-28T01:12:27.982+0800","line":"schedule/grpc_impl.go:207","msg":"recv hearbeat","addr":"127.0.0.1:19588"} {"level":"error","time":"2020-07-28T01:12:27.983+0800","line":"middleware/grpcmidd.go:28","msg":"resp failed","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"} {"level":"info","time":"2020-07-28T01:12:27.983+0800","line":"middleware/grpcmidd.go:36","msg":"[rpc req]","method":"/crocodile.task.Heartbeat/SendHb","req":"port:19588 ","resp":"","reqaddr":"127.0.0.1:39455","latency(ms)":1.304077} {"level":"debug","time":"2020-07-28T01:12:30.985+0800","line":"schedule/grpc_impl.go:207","msg":"recv hearbeat","addr":"127.0.0.1:19588"} {"level":"error","time":"2020-07-28T01:12:30.986+0800","line":"middleware/grpcmidd.go:28","msg":"resp failed","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"} {"level":"info","time":"2020-07-28T01:12:30.986+0800","line":"middleware/grpcmidd.go:36","msg":"[rpc req]","method":"/crocodile.task.Heartbeat/SendHb","req":"port:19588 ","resp":"","reqaddr":"127.0.0.1:39455","latency(ms)":1.220173} {"level":"warn","time":"2020-07-28T01:12:31.297+0800","line":"schedule/schedule2.go:1081","msg":"task is stop run by auto schedule","taskname":"run_shell","taskid":"290088289640124416"} {"level":"error","time":"2020-07-28T01:12:32.087+0800","line":"middleware/auth.go:108","msg":"checkAuth failed","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"} {"level":"warn","time":"2020-07-28T01:12:32.087+0800","line":"middleware/zaplogger.go:41","msg":"Gin","uid":"289850216985661440","method":"get","statuscode":10401,"reqip":"192.168.200.28","latency(ms)":1.41084,"url":"/api/v1/notify","respsize":36} {"level":"debug","time":"2020-07-28T01:12:33.988+0800","line":"schedule/grpc_impl.go:207","msg":"recv hearbeat","addr":"127.0.0.1:19588"} {"level":"error","time":"2020-07-28T01:12:33.989+0800","line":"middleware/grpcmidd.go:28","msg":"resp failed","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"} {"level":"info","time":"2020-07-28T01:12:33.989+0800","line":"middleware/grpcmidd.go:36","msg":"[rpc req]","method":"/crocodile.task.Heartbeat/SendHb","req":"port:19588 ","resp":"","reqaddr":"127.0.0.1:39455","latency(ms)":1.355797} {"level":"info","time":"2020-07-28T01:12:34.263+0800","line":"schedule/schedule2.go:571","msg":"start run task","taskname":"check_website_api.dstcar.com"} {"level":"debug","time":"2020-07-28T01:12:34.263+0800","line":"schedule/schedule2.go:513","msg":"start get lock","taskid":"290165913800413184"} {"level":"error","time":"2020-07-28T01:12:34.266+0800","line":"schedule/schedule2.go:643","msg":"model.GetTaskByID failed","taskid":"290165913800413184","error":"conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"}

  • 你好,看到刚刚支持windows,很好啊,打算使用看看。顺便提几个小建议。

    你好,看到刚刚支持windows,很好啊,打算使用看看。顺便提几个小建议。

    1、为了因应小场景使用,建议redis作为可选使用,存储数据库建议支持sqlite3,这样整个系统会比较轻灵,更加方便易用。 2、建议worker增加在其执行任务过程中向中心提交任务执行进度的报告。 3、建议worker与中心之间以http交互,这样方便可以对接其它语言开发的worker。

    最后,感谢作者的无私奉献。

  • 报错:Can't create more than max_prepared_stmt_count statements (current value: 16382)

    报错:Can't create more than max_prepared_stmt_count statements (current value: 16382)

    What Version Of crocodile you using

    1.1.4

    Describe your issue

    从docker-compose安装的,运行一段时间worker会挂掉。

    日志:

    error	schedule/grpc.go:281	client.SendHb failed	{"error": "rpc error: code = Unknown desc = conn.PrepareContext failed: Error 1461: Can't create more than max_prepared_stmt_count statements (current value: 16382)"}
    

    没研究源码,目测像是句柄没释放导致

  • http获取不到返回内容问题

    http获取不到返回内容问题

    我加的 get http://baidu.com 没有返回内容 修改core/tasktype/api.go 代码如下:

    bs, err := ioutil.ReadAll(doresp.Body)
    if err != nil {
    	log.Error("Read failed", zap.Error(err))
    	return
    }
    pw.Write(bs)
    
    //var out = make([]byte, 1024)
    //for {
    //	n, err := doresp.Body.Read(out)
    //	if err != nil {
    //		if err == io.EOF {
    //			break
    //		}
    //		log.Error("Read failed", zap.Error(err))
    //		return
    //	}
    //	if n > 0 {
    //		pw.Write(out[:n])
    //	}
    //}
    
  • 日志管理功能问题

    日志管理功能问题

    清理日志功能: 任务名称、时间等 都是必填,否则会报错;界面显示的不是必填

    如果没有任务名称,报错 “请求参数错误”; 这个操作没成功,出错了,审计日志 也会记录

    没有时间,报错 error,错误不清晰

    error middleware/operation.go:146 json.Unmarshal failed {"error": "json: cannot unmarshal string into Go struct field Cleanlog.preday of type int64"}

    没有搜索按钮

    如果没有输入任务名称,则不显示日志列表。如果显示 所有的日志,可能会更方便些。

  • build(deps): bump express from 4.17.1 to 4.18.2 in /web

    build(deps): bump express from 4.17.1 to 4.18.2 in /web

    Bumps express from 4.17.1 to 4.18.2.

    Release notes

    Sourced from express's releases.

    4.18.2

    4.18.1

    • Fix hanging on large stack of sync routes

    4.18.0

    ... (truncated)

    Changelog

    Sourced from express's changelog.

    4.18.2 / 2022-10-08

    4.18.1 / 2022-04-29

    • Fix hanging on large stack of sync routes

    4.18.0 / 2022-04-25

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • build(deps): bump qs from 6.5.2 to 6.5.3 in /web

    build(deps): bump qs from 6.5.2 to 6.5.3 in /web

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • build(deps): bump decode-uri-component from 0.2.0 to 0.2.2 in /web

    build(deps): bump decode-uri-component from 0.2.0 to 0.2.2 in /web

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • 使用docker-compose 启动后,任务无法执行

    使用docker-compose 启动后,任务无法执行

    What Version Of crocodile you using

    please runcrocodile version 使用docker-compose 启动后,任务无执行: image image

    Describe your issue

    if you see some useful log ,you can copy it here

  • build(deps): bump terser from 4.6.3 to 4.8.1 in /web

    build(deps): bump terser from 4.6.3 to 4.8.1 in /web

    Bumps terser from 4.6.3 to 4.8.1.

    Changelog

    Sourced from terser's changelog.

    v4.8.1 (backport)

    • Security fix for RegExps that should not be evaluated (regexp DDOS)

    v4.8.0

    • Support for numeric separators (million = 1_000_000) was added.
    • Assigning properties to a class is now assumed to be pure.
    • Fixed bug where yield wasn't considered a valid property key in generators.

    v4.7.0

    • A bug was fixed where an arrow function would have the wrong size
    • arguments object is now considered safe to retrieve properties from (useful for length, or 0) even when pure_getters is not set.
    • Fixed erroneous const declarations without value (which is invalid) in some corner cases when using collapse_vars.

    v4.6.13

    • Fixed issue where ES5 object properties were being turned into ES6 object properties due to more lax unicode rules.
    • Fixed parsing of BigInt with lowercase e in them.

    v4.6.12

    • Fixed subtree comparison code, making it see that [1,[2, 3]] is different from [1, 2, [3]]
    • Printing of unicode identifiers has been improved

    v4.6.11

    • Read unused classes' properties and method keys, to figure out if they use other variables.
    • Prevent inlining into block scopes when there are name collisions
    • Functions are no longer inlined into parameter defaults, because they live in their own special scope.
    • When inlining identity functions, take into account the fact they may be used to drop this in function calls.
    • Nullish coalescing operator (x ?? y), plus basic optimization for it.
    • Template literals in binary expressions such as + have been further optimized

    v4.6.10

    • Do not use reduce_vars when classes are present

    v4.6.9

    • Check if block scopes actually exist in blocks

    v4.6.8

    • Take into account "executed bits" of classes like static properties or computed keys, when checking if a class evaluation might throw or have side effects.

    v4.6.7

    • Some new performance gains through a AST_Node.size() method which measures a node's source code length without printing it to a string first.

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • build(deps): bump shell-quote from 1.7.2 to 1.7.3 in /web

    build(deps): bump shell-quote from 1.7.2 to 1.7.3 in /web

    Bumps shell-quote from 1.7.2 to 1.7.3.

    Changelog

    Sourced from shell-quote's changelog.

    1.7.3

    • Fix a security issue where the regex for windows drive letters allowed some shell meta-characters to escape the quoting rules. (CVE-2021-42740)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

Task Timer (tt) is a dead simple TUI task timer
Task Timer (tt) is a dead simple TUI task timer

tasktimer Task Timer (tt) is a dead simple TUI task timer Usage To get started, just run tt: tt You'll be presented with something like this: You can

Dec 21, 2022
Gotask - A simple task queue is stripped when the program is written to achieve the task delivery function
Gotask - A simple task queue is stripped when the program is written to achieve the task delivery function

gotask The simple task queue is stripped when the program is written to achieve

Feb 14, 2022
Celery Distributed Task Queue in Go
Celery Distributed Task Queue in Go

gocelery Go Client/Server for Celery Distributed Task Queue Why? Having been involved in several projects migrating servers from Python to Go, I have

Jan 1, 2023
Machinery is an asynchronous task queue/job queue based on distributed message passing.
Machinery is an asynchronous task queue/job queue based on distributed message passing.

Machinery Machinery is an asynchronous task queue/job queue based on distributed message passing. V2 Experiment First Steps Configuration Lock Broker

Dec 24, 2022
YTask is an asynchronous task queue for handling distributed jobs in golang
YTask is an asynchronous task queue for handling distributed jobs in golang

YTask is an asynchronous task queue for handling distributed jobs in golang

Dec 24, 2022
goInterLock is golang job/task scheduler with distributed locking mechanism (by Using Redis🔒).
goInterLock is golang job/task scheduler with distributed locking mechanism (by Using Redis🔒).

goInterLock is golang job/task scheduler with distributed locking mechanism. In distributed system locking is preventing task been executed in every instant that has the scheduler,

Dec 5, 2022
Go distributed task scheduler

Go distributed task scheduler

Nov 13, 2021
clockwork - Simple and intuitive job scheduling library in Go.
clockwork - Simple and intuitive job scheduling library in Go.

clockwork A simple and intuitive scheduling library in Go. Inspired by python's schedule and ruby's clockwork libraries. Example use package main imp

Jul 27, 2022
Simple, zero-dependency scheduling library for Go

go-quartz Simple, zero-dependency scheduling library for Go. About Inspired by the Quartz Java scheduler. Library building blocks Job interface. Any t

Dec 30, 2022
Easy and fluent Go cron scheduling

goCron: A Golang Job Scheduling Package. goCron is a Golang job scheduling package which lets you run Go functions periodically at pre-determined inte

Jan 8, 2023
Job scheduling made easy.

scheduler Job scheduling made easy. Scheduler allows you to schedule recurrent jobs with an easy-to-read syntax. Inspired by the article Rethinking Cr

Dec 30, 2022
goCron: A Golang Job Scheduling Package.

goCron: A Golang Job Scheduling Package.

Jan 9, 2023
nano-gpu-scheduler is a Kubernetes scheduler extender for GPU resources scheduling.
nano-gpu-scheduler is a Kubernetes scheduler extender for GPU resources scheduling.

Nano GPU Scheduler About This Project With the continuous evolution of cloud native AI scenarios, more and more users run AI tasks on Kubernetes, whic

Dec 29, 2022
K8s cluster simulator for workload scheduling.
K8s cluster simulator for workload scheduling.

Open-Simulator Motivation 概念定义 Open-Simulator 是 K8s 下的仿真调度组件。用户准备一批待创建 Workload 资源,Workload 资源指定好资源配额、绑核规则、亲和性规则、优先级等,通过 Open-Simulator 的仿真调度能力可判断当前集群

Dec 25, 2022
A way of scheduling volcano jobs

JobFlow 背景 volcano Volcano是CNCF 下首个也是唯一的基于Kubernetes的容器批量计算平台,主要用于高性能计算场景。 它提供了Kubernetes目前缺 少的一套机制,这些机制通常是机器学习大数据应用、科学计算、 特效渲染等多种高性能工作负载所需的。 现状:当前vol

Oct 12, 2022
A zero-dependencies and lightweight go library for job scheduling

A zero-dependencies and lightweight go library for job scheduling.

Aug 3, 2022
Scheduler - Scheduler package is a zero-dependency scheduling library for Go

Scheduler Scheduler package is a zero-dependency scheduling library for Go Insta

Jan 14, 2022
A programmable, observable and distributed job orchestration system.
A programmable, observable and distributed job orchestration system.

?? Overview Odin is a programmable, observable and distributed job orchestration system which allows for the scheduling, management and unattended bac

Dec 21, 2022
Go based task runner

Grift Grift is a very simple library that allows you to write simple "task" scripts in Go and run them by name without having to write big main type o

Nov 21, 2022