#+title: Wurker Hatchery
#+author: Joseph Edwards VIII
#+email: jedwards8th@gmail.com
#+date: <2023-02-04 Sat>

#+startup: indent showall
#+options: num:nil toc:nil


*If* ~cron~ *and* ~supervisor~ *had a love child.*

- Schedule and supervise jobs using internal Python modules, or external scripts and commands.
- Schedule on-demand jobs to run once. Or run jobs from the command-line.
- Configure and manage jobs from the command-line, via API, or using the web app UI.

*An experimental fork of [[https://gitlab.com/wurkzen/wurker/][Wurkzen Wurker]].*

[[file:./docs/images/screenshot-1.png]]

* Version

#+name: get-version
#+begin_src shell :results output :exports results
  grep '__version__' src/wurker/__about__.py | cut -d'"' -f2
#+end_src

#+RESULTS: get-version
: 0.1.16

* Documentation

Complete documentation is available in this repository:

- *Documentation*: [[file:docs/README.org][Local Documentation]]
- *Web Site*: [[https://wurker-hatch-joseph8th-c60d52520b93f67b0292339f4314cef826907222.gitlab.io/][Wurker Docs on GitLab Pages]]
- *On GitLab*: [[https://gitlab.com/joseph8th/wurker-hatch/-/blob/main/docs/README.org][README.org]]

* Development

Starting at version ~0.1.0~, Wurker development began to focus on PyPi packaging. To enable easier packaging for distribution, we began to use the [[https://hatch.pypa.io][Hatch]] project manager. Follow the following instructions to install ~pipx~ and ~hatch~ on your development environment:

- Install [[https://github.com/pypa/pipx][pipx]]
- Install [[https://hatch.pypa.io/][hatch]]

Next, install system dependencies, as documented in the full [[https://wurker-hatch-joseph8th-c60d52520b93f67b0292339f4314cef826907222.gitlab.io/][Wurker Documentation]].

After ~hatch~ and all system dependencies are successfully installed, ~cd~ into the ~wurker-hatch~ directory and do:

#+begin_src shell
  hatch env create
  hatch shell
#+end_src

* History

Wurker grew organically over the course of a decade out of enterprise software for the digital cinema industry under R&D of [[https://cieloconnects.com][CIELO Enterprise Solutions, Inc]]. Cinema systems are as secure as ATMs and protocols and standards may vary, but one thing is always true: *The show must go on!* That means a sometimes brutal production roadmap with millions at stake on any continent where there's a movie theater.

So... not Antarctica?

It kinda *IS* rocket science to make a robust, reliable, on-time, off-line scheduler, that also supervises jobs and lets you run jobs on-demand. In the history DevOps, there are a multitude of solutions for similar problems.

This is (another) one of them.

The first incarnation of this project was stupid. It let you run interval jobs in either sub-processes or threads. That was disastrous. The next iteration just implemented ~APScheduler~ and had done. It was a good fit for the project.

The grandpappy of Wurker was a proprietary CIELO project called "Jobber", which at first was only a scheduler, but over the course of half a decade evolved to also replace the use of ~cron~ and ~supervisor~. We had need of both facilities -- scheduled and supervised -- and it was a lot of work to maintain proper configuration and even harder to find out *what went wrong*. Jobber was a toy in comparison to Wurker, but it ran under heavy load for half a decade with lots of love from CIELO devops.

Wurker was developed by Joseph Edwards in his role as a founder of Wurkzen, Inc., which agreed to release the project under an MIT open-source license.

The current version, Wurker Hatchery, is a major upgrade focusing on PyPI packaging using the [[https://hatch.pypa.io][Hatch]] project manager. The repository has been moved to: [[https://gitlab.com/joseph8th/wurker-hatch][wurker-hatch on GitLab]]


* Authors

All of the people who have contributed code to Wurker Hatchery or Wurkzen Wurker:

- Joseph Edwards VIII (maintainer)
- Mehul Savaliya
- Jose Sieres
- Rick Cabrera

* License

Licensed under [[file:LICENSE.txt][MIT license]].
