All Projects → whitaker-io → Machine

whitaker-io / Machine

Licence: mit
Machine is a workflow/pipeline library for processing data

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Machine

Batchflow
BatchFlow helps you conveniently work with random or sequential batches of your data and define data processing and machine learning workflows even for datasets that do not fit into memory.
Stars: ✭ 156 (+100%)
Mutual labels:  workflow-engine, pipeline, workflow
Scipipe
Robust, flexible and resource-efficient pipelines using Go and the commandline
Stars: ✭ 826 (+958.97%)
Mutual labels:  workflow-engine, pipeline, workflow
frizzle
The magic message bus
Stars: ✭ 14 (-82.05%)
Mutual labels:  pipeline, stream-processing, streaming-data
Galaxy
Data intensive science for everyone.
Stars: ✭ 812 (+941.03%)
Mutual labels:  workflow-engine, pipeline, workflow
Go Streams
A lightweight stream processing library for Go
Stars: ✭ 615 (+688.46%)
Mutual labels:  pipeline, stream-processing, streaming-data
Theflow
Workflow automation library for .NET
Stars: ✭ 72 (-7.69%)
Mutual labels:  workflow-engine, workflow
Cookiecutter
DEPRECIATED! Please use nf-core/tools instead
Stars: ✭ 18 (-76.92%)
Mutual labels:  pipeline, workflow
Atacseq
ATAC-seq peak-calling, QC and differential analysis pipeline
Stars: ✭ 72 (-7.69%)
Mutual labels:  pipeline, workflow
Saber
Window-Based Hybrid CPU/GPU Stream Processing Engine
Stars: ✭ 35 (-55.13%)
Mutual labels:  stream-processing, streaming-data
Prefect
The easiest way to automate your data
Stars: ✭ 7,956 (+10100%)
Mutual labels:  workflow-engine, workflow
Brunch
🍴 Web applications made easy. Since 2011.
Stars: ✭ 6,801 (+8619.23%)
Mutual labels:  pipeline, workflow
Jenkins Workflow
contains handy groovy workflow-libs scripts
Stars: ✭ 41 (-47.44%)
Mutual labels:  pipeline, workflow
Flowr
Robust and efficient workflows using a simple language agnostic approach
Stars: ✭ 73 (-6.41%)
Mutual labels:  pipeline, workflow
Vector
A reliable, high-performance tool for building observability data pipelines.
Stars: ✭ 8,736 (+11100%)
Mutual labels:  pipeline, stream-processing
Titanoboa
Titanoboa makes complex workflows easy. It is a low-code workflow orchestration platform for JVM - distributed, highly scalable and fault tolerant.
Stars: ✭ 787 (+908.97%)
Mutual labels:  workflow-engine, workflow
Nlppln
NLP pipeline software using common workflow language
Stars: ✭ 31 (-60.26%)
Mutual labels:  pipeline, workflow
Hyperflow
HyperFlow: a scientific workflow engine
Stars: ✭ 53 (-32.05%)
Mutual labels:  workflow-engine, workflow
River Admin
🚀 A shiny admin interface for django-river built with DRF, Vue & Vuetify
Stars: ✭ 55 (-29.49%)
Mutual labels:  workflow-engine, workflow
Drake Examples
Example workflows for the drake R package
Stars: ✭ 57 (-26.92%)
Mutual labels:  pipeline, workflow
Toil
A scalable, efficient, cross-platform (Linux/macOS) and easy-to-use workflow engine in pure Python.
Stars: ✭ 733 (+839.74%)
Mutual labels:  pipeline, workflow

Go PkgGoDev GoDoc Go Report Card Codacy Badge Codacy Badge Version Badge

Machine

Machine is a library for creating data workflows. These workflows can be either very concise or quite complex, even allowing for cycles for flows that need retry or self healing mechanisms. It supports opentelemetry spans and metrics out of the box and supports building dynamic pipelines using native go plugins and hashicorp or yaegi based plugins by using the providers here.

Installation

Add the primary library to your project

  go get -u github.com/whitaker-io/machine

Foundry is a tool used to generate new projects quickly


Components is a repository of different vertex implementations


Documentation

Gopher

Docs


Example

Redis Subscription with basic receive -> process -> send Stream

  // logStore allows for running a cluster and handles communication
  var logStore machine.LogStore

  // pool is a redigo Pool for a redis cluster to read the stream from
  // see also the Google Pub/Sub, Kafka, and SQS implementations
  var pool *redigo.Pool

  // publisher is a machine.Publisher used for sending data outside of the Stream
  var publisher machine.Publisher

  redisStream := redis.New(pool, logger)
  
  // NewPipe creates a pipe in which you can run multiple streams
  // the id is the instance identifier for the cluster
  p := NewPipe(uuid.New().String(), nil, logStore, fiber.Config{
    ReadTimeout: time.Second,
    WriteTimeout: time.Second,
    BodyLimit: 4 * 1024 * 1024,
    DisableKeepalive: true,
  })

  // StreamSubscription takes an instance of machine.Subscription
  // and a time interval in which to read
  // the id here needs to be the same for all the nodes for the clustering to work
  builder := p.StreamSubscription("unique_stream_id", redisStream, 5*time.Millisecond,
    &Option{FIFO: boolP(false)},
    &Option{Injectable: boolP(true)},
    &Option{Metrics: boolP(true)},
    &Option{Span: boolP(false)},
    &Option{BufferSize: intP(0)},
  ).Builder()

  builder.Map("unique_id2", 
      func(m Data) error {
        var err error

        // ...do some processing

        return err
      },
    ).
    Publish("unique_id3", publisher)

  // Run requires a context, the port to run the fiber.App,
  // and the timeout for graceful shutdown
  if err := p.Run(context.Background(), ":5000", 10 * time.Second); err != nil {
    // Run will return an error in the case that 
    // one of the paths is not terminated (i.e. missing a Transmit)
    panic(err)
  }

🤝 Contributing

Contributions, issues and feature requests are welcome.
Feel free to check issues page if you want to contribute.
Check the contributing guide.

Author

👤 Jonathan Whitaker

Show your support

Please ⭐️ this repository if this project helped you!


License

Machine is provided under the MIT License.

The MIT License (MIT)

Copyright (c) 2020 Jonathan Whitaker
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].