All Projects → snowplow → Factotum

snowplow / Factotum

Licence: apache-2.0
A system to programmatically run data pipelines

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Factotum

Go Quartz
Simple, zero-dependency scheduling library for Go
Stars: ✭ 118 (-25.32%)
Mutual labels:  cron, job-scheduler, job
Antares
分布式任务调度平台(Distributed Job Schedule Platform)
Stars: ✭ 558 (+253.16%)
Mutual labels:  job-scheduler, job
Quartznet
Quartz Enterprise Scheduler .NET
Stars: ✭ 4,825 (+2953.8%)
Mutual labels:  cron, job-scheduler
Shardingsphere Elasticjob
Distributed scheduled job framework
Stars: ✭ 7,369 (+4563.92%)
Mutual labels:  cron, job
Hangfire.httpjob
httpjob for Hangfire,restful api for Hangfire,job调度与业务分离
Stars: ✭ 366 (+131.65%)
Mutual labels:  job-scheduler, job
Odin
A programmable, observable and distributed job orchestration system.
Stars: ✭ 405 (+156.33%)
Mutual labels:  cron, job-scheduler
Bree
🚥 The best job scheduler for Node.js and JavaScript with cron, dates, ms, later, and human-friendly support. Works in Node v10+ and browsers, uses workers to spawn sandboxed processes, and supports async/await, retries, throttling, concurrency, and graceful shutdown. Simple, fast, and lightweight. Made for @ForwardEmail and @ladjs.
Stars: ✭ 933 (+490.51%)
Mutual labels:  cron, job
cron-schedule
A zero-dependency cron parser and scheduler for Node.js, Deno and the browser.
Stars: ✭ 28 (-82.28%)
Mutual labels:  cron, job
F3 Cron
Job scheduling for the PHP Fat-Free Framework
Stars: ✭ 65 (-58.86%)
Mutual labels:  cron, job-scheduler
Ppgo job
PPGo_Job是一款可视化的、多人多权限的、一任务多机执行的定时任务管理系统,采用golang开发,安装方便,资源消耗少,支持大并发,可同时管理多台服务器上的定时任务。
Stars: ✭ 1,152 (+629.11%)
Mutual labels:  cron, job-scheduler
Sleepto
An alternative to traditional task schedulers
Stars: ✭ 98 (-37.97%)
Mutual labels:  cron, job-scheduler
Bull
Bull module for Nest framework (node.js) 🐮
Stars: ✭ 356 (+125.32%)
Mutual labels:  cron, job
Swiftqueue
Job Scheduler for IOS with Concurrent run, failure/retry, persistence, repeat, delay and more
Stars: ✭ 276 (+74.68%)
Mutual labels:  job-scheduler, job
Chronos
Fault tolerant job scheduler for Mesos which handles dependencies and ISO8601 based schedules
Stars: ✭ 4,303 (+2623.42%)
Mutual labels:  cron, job-scheduler
gops
配置管理,分布式定时任务
Stars: ✭ 45 (-71.52%)
Mutual labels:  cron, job-scheduler
Agendash
Agenda Dashboard
Stars: ✭ 620 (+292.41%)
Mutual labels:  cron, job-scheduler
comrade-dev
Comrade is a job scheduler&manager service.
Stars: ✭ 69 (-56.33%)
Mutual labels:  job, job-scheduler
linda
Linda is a simple dispatcher library.
Stars: ✭ 12 (-92.41%)
Mutual labels:  cron, job
Jiacrontab
简单可信赖的任务管理工具
Stars: ✭ 1,052 (+565.82%)
Mutual labels:  job-scheduler, job
Clockwerk
Job Scheduling Library
Stars: ✭ 104 (-34.18%)
Mutual labels:  cron, job-scheduler

Factotum

Release Apache License 2.0

A dag running tool designed for efficiently running complex jobs with non-trivial dependency trees.

The zen of Factotum

  1. A Turing-complete job is not a job, it's a program
  2. A job must be composable from other jobs
  3. A job exists independently of any job schedule

User quickstart

Assuming you're running 64 bit Linux:

wget https://github.com/snowplow/factotum/releases/download/0.6.0/factotum_0.6.0_linux_x86_64.zip
unzip factotum_0.6.0_linux_x86_64.zip
./factotum --version

Factotum requires one argument, which is a factotum factfile that describes the job to run. For example, to run the sample sleep.factfile:

wget https://raw.githubusercontent.com/snowplow/factotum/master/samples/sleep.factfile
./factotum run sleep.factfile

Specifying variables in the job file can be done using --env JSON (or -e JSON). The JSON here is free-form and needs to correspond to the placeholders you've set in your job.

For example, the following will print "hello world!":

wget https://raw.githubusercontent.com/snowplow/factotum/master/samples/variables.factfile
./factotum run variables.factfile --env '{ "message": "hello world!" }'

Starting from an arbitrary task can be done using the --start TASK or -s TASK arguments, where TASK is the name of the task you'd like to start at.

For example, to start at the "echo beta" task in this job, you can run the following:

wget https://raw.githubusercontent.com/snowplow/factotum/master/samples/echo.factfile
./factotum run echo.factfile --start "echo beta"

To get a quick overview of the options provided, you can use the --help or -h argument:

./factotum --help

For more information on this file format and how to write your own jobs, see the Factfile format section below.

Factfile format

Factfiles are self-describing JSON which declare a series of tasks and their dependencies. For example:

{
    "schema": "iglu:com.snowplowanalytics.factotum/factfile/jsonschema/1-0-0",
    "data": {
        "name": "Factotum demo",
        "tasks": [
            {
                "name": "echo alpha",
                "executor": "shell",
                "command": "echo",
                "arguments": [ "alpha" ],
                "dependsOn": [],
                "onResult": {
                    "terminateJobWithSuccess": [],
                    "continueJob": [ 0 ]
                }
            },
            {
                "name": "echo beta",
                "executor": "shell",
                "command": "echo",
                "arguments": [ "beta" ],
                "dependsOn": [ "echo alpha" ],
                "onResult": {
                    "terminateJobWithSuccess": [],
                    "continueJob": [ 0 ]
                }
            },
            {
                "name": "echo omega",
                "executor": "shell",
                "command": "echo",
                "arguments": [ "and omega!" ],
                "dependsOn": [ "echo beta" ],
                "onResult": {
                    "terminateJobWithSuccess": [],
                    "continueJob": [ 0 ]
                }
            }
        ]
    }
}

This example defines three tasks that run shell commands - echo alpha, echo beta and echo omega. echo alpha has no dependencies - it will run immediately. echo beta depends on the completion of the echo alpha task, and so will wait for echo alpha to complete. echo omega depends on the echo beta task, and so will wait for echo beta to be complete before executing.

Given the above, the tasks will be executed in the following sequence: echo alpha, echo beta and finally, echo omega. Tasks can have multiple dependencies in factotum, and tasks that are parallelizable will be run concurrently. Check out the samples for more sample factfiles or the wiki for a more complete description of the factfile format.

Developer quickstart

Factotum is written in Rust.

Using Vagrant

  • Clone this repository - git clone [email protected]:snowplow/factotum.git
  • cd factotum
  • Set up a Vagrant box and ssh into it - vagrant up && vagrant ssh
    • This will take a few minutes
  • cd /vagrant
  • Compile and run a demo - cargo run -- run samples/echo.factfile

Using stable Rust without Vagrant

  • Install Rust
    • on Linux/Mac - curl -sSf https://static.rust-lang.org/rustup.sh | sh
  • Clone this repository - git clone [email protected]:snowplow/factotum.git
  • cd factotum
  • Compile and run a demo - cargo run -- run samples/echo.factfile

Copyright and license

Factotum is copyright 2016-2021 Snowplow Analytics Ltd.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this software except in compliance with the License.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].