"Эталонное" решение: очередь задач/дерево с последовательным выполнением
Доброго времени суток, all.
Есть проблема написания различающегося от проекта к проекту кода для выполнения, в общем-то, однотипной задачи. Нужно обрабатывать кучку событий, определяющих статус выполнения некоей задачи автоматизации. Допустим, установка комплектов софта на удаленные машины.
Верхний уровень дерева: «установить четыре версии .net на \\sim»
Промежуточный уровень: «или установить получилось, или анализируем проведенные действия и принимаем решение сделать это как-то по-другому (выбрать другой бекенд»
Нижний уровень: «подзадача — действие бекенда (загрузить файл) -> подзадача — действие бекенда (запустить файл)»
X
Y (контроль), Y1 (альтернативная последовательность задач — послать сисадмина с дистрибутивами)
Z1 -> Z2 -> Z3.
Дерево генерируется, начиная с верхнего уровня, согласно некоему сценарию, для которого прописаны последовательности перехода состояний на двух нижних уровнях, включая данные, которые требуется отправить/передать бекенду.
Ищется решение, которое позволит конечному приложению обходиться только доступом к нижнему уровню (получить от машины состояний следующую операцию — id заранее сгенерированного json-описалова подзадачи, отчитаться о ее выполнении, получить ответ о невозможности продолжить из-за сбоя предыдущего состояния, перейти на уровень выше и написать новую ветку подзадач).
Хочется сделать это максимально независимо от кода приложения ( в основном такое вижу на Яве, но PHP тоже проскальзывает). Алчно желаю рекомендации по оптимальному способу хранения задач (сделать приоритетным нижний уровень и отменять все задачи с ID промежуточного уровня при сбое/завершении перехода между состояниями?), реализации встроенного КО для перехода между состояниями на нижнем уровне и оптимальному распределению кода между уровнями.
Вы написали много ненужной информации, но четко не формализовали, какую именно помощь вы хотите получить / какую проблему решить.
Приведите в порядок свои мысли.