diff --git a/README.md b/README.md index 192eb5d6..2481256b 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ A distributed workflow engine. # Features: - REST API +- Submit individual tasks or workflows for execution. - Horizontally scalable - Task isolation - tasks are executed within a container to provide isolation, idempotency, and in order to enforce resource limits - Automatic recovery of tasks in the event of a worker crash diff --git a/cmd/main.go b/cmd/main.go index 66c6d805..6dd10bb8 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -1,48 +1,71 @@ package main import ( + "log" + "os" + "github.com/rs/zerolog" "github.com/tork/coordinator" "github.com/tork/datastore" "github.com/tork/mq" "github.com/tork/runtime" "github.com/tork/worker" + "github.com/urfave/cli/v2" ) func main() { - // loggging - zerolog.TimeFieldFormat = zerolog.TimeFormatUnix + app := &cli.App{ + Name: "tork", + Description: "a distributed workflow engine", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "mode", + Value: "standalone", + Usage: "standalone|worker|coordinator", + Required: true, + }, + }, + Action: func(ctx *cli.Context) error { + // loggging + zerolog.TimeFieldFormat = zerolog.TimeFormatUnix - // create a broker - b := mq.NewInMemoryBroker() + // create a broker + b := mq.NewInMemoryBroker() - // create a Docker-based runtime - rt, err := runtime.NewDockerRuntime() - if err != nil { - panic(err) - } + // create a Docker-based runtime + rt, err := runtime.NewDockerRuntime() + if err != nil { + return err + } + + // create a worker + w := worker.NewWorker(worker.Config{ + Broker: b, + Runtime: rt, + }) + + // start the worker + go func() { + if err := w.Start(); err != nil { + panic(err) + } + }() - // create a worker - w := worker.NewWorker(worker.Config{ - Broker: b, - Runtime: rt, - }) - - // start the worker - go func() { - if err := w.Start(); err != nil { - panic(err) - } - }() - - // create a coordinator - c := coordinator.NewCoordinator(coordinator.Config{ - Broker: b, - TaskDataStore: datastore.NewInMemoryDatastore(), - }) - - // start the coordinator - if err := c.Start(); err != nil { - panic(err) + // create a coordinator + c := coordinator.NewCoordinator(coordinator.Config{ + Broker: b, + TaskDataStore: datastore.NewInMemoryDatastore(), + }) + + // start the coordinator + if err := c.Start(); err != nil { + return err + } + + return nil + }, + } + if err := app.Run(os.Args); err != nil { + log.Fatal(err) } } diff --git a/go.mod b/go.mod index aca5aaa7..d8c89620 100644 --- a/go.mod +++ b/go.mod @@ -9,12 +9,14 @@ require ( github.com/pkg/errors v0.9.1 github.com/rs/zerolog v1.29.1 github.com/shirou/gopsutil/v3 v3.23.6 + github.com/urfave/cli/v2 v2.25.7 ) require ( github.com/Microsoft/go-winio v0.6.1 // indirect github.com/bytedance/sonic v1.9.1 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect @@ -40,11 +42,13 @@ require ( github.com/opencontainers/image-spec v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/tklauser/go-sysconf v0.3.11 // indirect github.com/tklauser/numcpus v0.6.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect golang.org/x/arch v0.3.0 // indirect golang.org/x/crypto v0.11.0 // indirect diff --git a/go.sum b/go.sum index 5bc1daae..882393f8 100644 --- a/go.sum +++ b/go.sum @@ -8,6 +8,8 @@ github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -87,6 +89,8 @@ github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:Om github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/shirou/gopsutil/v3 v3.23.6 h1:5y46WPI9QBKBbK7EEccUPNXpJpNrvPuTD0O2zHEHT08= github.com/shirou/gopsutil/v3 v3.23.6/go.mod h1:j7QX50DrXYggrpN30W0Mo+I4/8U2UUIQrnrhqUeWrAU= github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= @@ -113,6 +117,10 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=