{"id":13500709,"url":"https://github.com/pinterest/pinball","last_synced_at":"2025-03-29T07:31:29.739Z","repository":{"id":28135999,"uuid":"31635428","full_name":"pinterest/pinball","owner":"pinterest","description":"Pinball is a scalable workflow manager","archived":true,"fork":false,"pushed_at":"2019-12-10T19:01:58.000Z","size":1864,"stargazers_count":1047,"open_issues_count":13,"forks_count":143,"subscribers_count":54,"default_branch":"master","last_synced_at":"2024-04-14T12:52:02.672Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pinterest.png","metadata":{"files":{"readme":"README.rst","changelog":"HISTORY.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-03-04T03:13:18.000Z","updated_at":"2024-04-03T23:17:34.000Z","dependencies_parsed_at":"2022-08-28T16:40:11.282Z","dependency_job_id":null,"html_url":"https://github.com/pinterest/pinball","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinterest%2Fpinball","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinterest%2Fpinball/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinterest%2Fpinball/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinterest%2Fpinball/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pinterest","download_url":"https://codeload.github.com/pinterest/pinball/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246155994,"owners_count":20732355,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T22:01:11.080Z","updated_at":"2025-03-29T07:31:28.073Z","avatar_url":"https://github.com/pinterest.png","language":"JavaScript","readme":".. attention::\n    This project is no longer actively maintained by Pinterest.\n\n============\nPinball\n============\n\nPinball is a scalable workflow manager.\n\n.. contents::\n    :local:\n    :depth: 1\n    :backlinks: none\n\nDesign Principles\n----------------\n* **Simple**: based on easy to grasp abstractions\n* **Extensible**: component-based approach\n* **Transparent**: state stored in a readable format\n* **Reliable**: stateless computing components\n* **Scalable**: scales horizontally\n* **Admin-friendly**: can be upgraded without aborting workflows\n* **Feature-rich**: auto-retries, per-job-emails, runtime alternations, priorities, overrun policies, etc.\n\n\nInstallation\n----------------------\nIf you haven't already installed *libmysqlclient-dev*, *graphviz*. Please install them, e.g., ::\n\n   $ sudo apt-get install libmysqlclient-dev\n   $ sudo apt-get install graphviz\n\nIf you want to install *Pinball* through pypi package, please do ::\n\n  $ sudo pip install pinball\n\nPinball uses mysql as persistent storage. Please also make sure mysql is available, and properly configured.\n\n\nQuick Start\n----------------------\n\nStart Pinball\n~~~~~~~~~~~~~\nOnce Pinball is installed either through pypi package installation or source code clone, we are ready to run it. There are four important components in Pinball.\n\n* **Master**: A frontend to a persistent state repository with an interface supporting atomic job token updates. To start master, ::\n\n  $ python -m pinball.run_pinball -c path/to/pinball/yaml/configuration/file -m master\n\n* **UI**: A service reading directly from the storage layer used by the Master. To start UI, ::\n\n  $ python -m pinball.run_pinball -c path/to/pinball/yaml/configuration/file -m ui\n\n* **Scheduler**: Scheduler is responsible for running workflows on a schedule. To start scheduler, ::\n\n  $ python -m pinball.run_pinball -c path/to/pinball/yaml/configuration/file -m scheduler\n\n* **Worker**: A client of the Master. To start worker, ::\n\n  $ python -m pinball.run_pinball -c path/to/pinball/yaml/configuration/file -m workers\n\n\nConfigure Pinball\n~~~~~~~~~~~~~~~~~\nIn order to start Pinball, user needs to provide a pinball configuration file. A sample pinball configuraiton can be retrived at here_.\n\n.. _here: https://github.com/pinterest/pinball/blob/master/pinball/config/default.yaml\n\nThere are a few parameters to configure. For example:\n\n* MySQL db configuration ::\n\n   databases:\n        default:\n            ENGINE:       django.db.backends.mysql\n            NAME:         pinball\n            USER:         flipper\n            PASSWORD:     flipper123\n            HOST:         127.0.0.1\n            PORT:         \"3306\"\n        pinball.persistence:\n            ENGINE:       django.db.backends.mysql\n            NAME:         pinball\n            USER:         flipper\n            PASSWORD:     flipper123\n            HOST:         127.0.0.1\n            PORT:         \"3306\"\n\n* Pinball UI configuration ::\n\n   ui_host:                  pinball\n   ui_port:                  8080\n\n.. _example: https://github.com/pinterest/pinball/blob/master/pinball_ext/examples/workflows.py\n.. _parser: https://github.com/pinterest/pinball/blob/master/pinball_ext/workflow/parser.py\n* Application Configuration ::\n\n    parser:                    pinball_ext.workflows.parser.PyWorkflowParser\n\n  *parser* tells Pinball how to interpret your defined workflow and jobs. The above configuration links to a Python parser_ provided by Pinball.\n  You can also provide your own parser to intepretate your own definition of workflow and jobs. Please check the tutorial for details. ::\n\n    parser_params:\n      workflows_config:       pinball_ext.examples.workflows.WORKFLOWS\n      job_repo_dir:           \"~\"\n      job_import_dirs_config: pinball_ext.examples.jobs.JOB_IMPORT_DIRS\n\n  *parser_params* will be taken by *parser*. Name of the variable that stores workflows config is *workflows_config*;\n  root dir of the repo that stores all user defined jobs is stored at *job_repo_dir*; *job_import_dirs_config* keeps list of\n  dirs where job class should be imported from.\n\n\n* Email configuration ::\n\n    default_email:              your@email.com\n\n  *default_email* configures default sender of email service of Pinball.\n\n\nUse Pinball\n~~~~~~~~~~~\nAfter starting Pinball with the proper configuration, user can access Pinball at *pinball:8080*.\nYou may find there is no workflow or jobs listed in Pinball UI when you first start Pinball. To import your workflow into Pinball,\ndo the following command. ::\n\n    python -m pinball.tools.workflow_util -c path/to/pinball/yaml/configuration/file -f reschedule\n\nAfter this, you should be able to see your workflows in Pinball UI. They will be scheduled and run according to the specified schedules.\n\n.. image:: instance_view.png\n   :alt: Workflow Instance View\n\nDetailed Design\n-------------\nDesign details are available in `Pinball Architecture Overview \u003chttps://github.com/pinterest/pinball/blob/master/ARCHITECTURE.rst\u003e`_\n\nUser Guide\n-----------------\nDetail user guide is available in `Pinball User Guide \u003chttps://github.com/pinterest/pinball/blob/master/USER_GUIDE.rst\u003e`_\n\nAdmin Guide\n------------------\nAdministrator guide is available in `Pinball Administrator Guide \u003chttps://github.com/pinterest/pinball/blob/master/ADMIN_GUIDE.rst\u003e`_\n\nLicense\n-------\nPinball is distributed under `Apache License, Version 2.0 \u003chttp://www.apache.org/licenses/LICENSE-2.0.html\u003e`_.\n\nMaintainers\n----------\n* `Pawel Garbacki \u003chttps://github.com/pgarbacki\u003e`_\n* `Mao Ye \u003chttps://github.com/MaoYe\u003e`_\n* `Changshu Liu \u003chttps://github.com/csliu\u003e`_\n\nContributing\n-----------\n* `Contributors \u003chttps://github.com/pinterest/pinball/blob/master/AUTHORS.rst\u003e`_\n* `How to contribute \u003chttps://github.com/pinterest/pinball/blob/master/CONTRIBUTING.rst\u003e`_\n\n\nHelp\n-----\nIf you have any questions or comments, you can reach us at `pinball-users@googlegroups.com \u003chttps://groups.google.com/forum/#!forum/pinball-users\u003e`_.\n\n","funding_links":[],"categories":["JavaScript","Uncategorized","Workflow","Workflow Management/Engines","Software"],"sub_categories":["Uncategorized","Managing building models"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinterest%2Fpinball","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpinterest%2Fpinball","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinterest%2Fpinball/lists"}