# Tentacles

A simple queue system for OctoPrint, designed to receive jobs and forward them to connected OctoPrint instances as they are available and ready.

## Workflow

Username+Password users

API keys mapped to users

Users mapped to job priority

API keys mapped to user sub-priority

User-facing API can upload gcode files to storage and create a file entry in the DB

Jobs can be created from new or existing file entries in the DB

Jobs are mapped to the priority of the API key (and user) who created them

Jobs get Runs - which track assigning a pending Job to a Printer

Highest priority job schedules first/next non-Running Job to the first available printer.
This requires copying the gcode file to the target device, and starting it running.

Running Runs are polled to detect loss/failure. Lost or failed Runs are deleted, and the Job returns to the queue.
A priority penalty may be called for.

## Notes

Checking bed status on a printer

    $ curl 'http://10.0.0.6/api/plugin/bedready' \
        -X POST \
        -H 'Accept: application/json' \
        -H 'Content-Type: application/json; charset=UTF-8' \
        -H 'Authorization: Bearer ...' \
        --data-raw '{"command":"check_bed","reference":"reference_2023-05-11T05:22:40.212Z.jpg"}' \
        | jq .

Uploading a file and starting to print it
- https://github.com/prusa3d/PrusaSlicer/blob/0384d631d6ef1aaadcb68da031eba9a586b102ed/src/slic3r/Utils/OctoPrint.cpp#L936
- https://docs.octoprint.org/en/master/api/files.html#upload-file-or-create-folder
- &print=true

Doesn't appear possible to execute request/response g-code through the API? Can't detect when the printer's offsets aren't calibrated?
