zenc0dr / sampurna
सम्पूर्ण
Requires
- php: >=8.0
- ext-posix: *
- illuminate/support: ^8.0|^9.0|^10.0
README
Sampurna в индийских языках, таких как санскрит и хинди, "sampurna" (सम्पूर्ण) переводится как "полный", "совершенный" или "идеальный". Это библиотека представляет из себя микрофреймворк на базе Laravel, реализующая в одном месте весь функционал любой, сколь угодно сложной бизнес-логики. Функционал библиотеки постоянно расширяется и на данный момент это:
- Очередь/брокер задач
- Фоновый запуск потоков
- Балансировка потоков
- Расширенная система кеширования
- Маркетплейс компонентов
- Конструктор интерфейсов
- Конструктор цепочек вызовов
Данная библиотека разрабатывается для того чтобы php-программисты могли тратить больше времени на реализацию бизнес-логик вместо разработки их технических аспектов. Автор https://t.me/zenc0dr будет очень рад любой помощи в дальнейшем развитии библиотеки и счастлив если она поможет кому-то потратить большое количество часов на то что действительно важно, вместо того чтобы неустанно программировать ночи напролёт (Om Namah Shivaya). ;)
Документация пока на стадии написания, кода очень много и некоторые аспекты ещё периодически меняются, так что тут описаны только самые базовые аспекты взаимодействия. Для полноценного погружения добро пожаловать в код, код написан с любовью ко всем живым существам, на сколько это было возможно в рамках Laravel и PHP, так что он довольно понятен и прозрачен.
Переменные окружения
| Ключ | Умолчание | Описание |
|---|---|---|
| SAMPURNA_PHP_PATH | php | Указание интепретатора php |
| SAMPURNA_NOHUP_ENABLE | false | Если на хосте есть библиотека nohup то выполнение фоновых процессов более надёжно |
Переменные сессии
| Ключ | Умолчание | Описание |
|---|---|---|
| sampurna.log.echo | null | Если перевести в true то глобальный лог будет выводиться в консоль |
Хранилища
В качестве системы оперативных хранилищ используется база данный sqlite, так как она имеет особенности которые наилучшим образом проявляются именно в роли динамических баз. Будем в последствии называть эти базы хранилища.
Создать хранилище (Базу sqlite)
sampurna()->vault('test_vault')->create(function ($schema) { $schema->create('table1', function (Blueprint $table) { $table->increments('id'); $table->string('name'); }); $schema->create('table2', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email'); }); });
Обновить хранилище (добавить новые таблицы или поля)
sampurna()->vault('test_vault')->update(function ($schema) { $schema->table('table2', function (Blueprint $table) { $table->integer('count')->default(0)->after('name'); }); });
Разница между функциями vault()->create и vault()->update только в том что в случае create база данных полностью удаляется и создаётся заново. Больше никаких отличий, далее создание и изменение структуры базы зависит от $schema (Schema::connection)
Сделать запрос в хранилище
# Получим экземпляр хранилища $vault = sampurna()->vault('waterway'); # Получить экземпляр $vault->query('ships', 123); # Ниже тоде самое $vault->query('ships')>find(123); $vault->query('ships', 'g5nhj-fnnd3-ddfnsc', 'uuid'); # Ниже тоде самое $vault->query('ships')->where('uuid', 'g5nhj-fnnd3-ddfnsc')->first(); # Добавить запись $vault->query('ships')->insert([ 'id' => $ship_id, 'name' => $ship_name, ]);
Это обычная обёртка над QueryBuilder и работа происходит с базой SQLite с именем waterway (storage/sampurna_vault/vaults/waterway)
Юниты
Описания (манифесты) юнитов находятся в папке заданной в config/sampurna.php + /units
Например манифест storage/sampurna_vault/units/azimut.waterway.json
{
"name": "Любое имя юнита",
"desc": "Тут можно описать что делает юнит",
"call": "App.Services.Parsers.Waterway.WaterwayParser.dispatcher",
}
Таблица свойств манифеста юнита
| Свойство | Обязательно | описание | Пример |
|---|---|---|---|
| name | да | Имя юнита | |
| stack | нет | ||
| desc | да | Описание юнита | |
| call | да | Вызов юнита | App.Services.Parsers.Waterway.WaterwayParser.dispatcher |
| attempts_max | нет | Максимальное количество попыток | |
| attempts_pause | нет | Пауза в секундах между попытками |
^unit-manifest-table
Artisan команды (документация в процессе обновления)
Создать новый стэк
php artisan sampurna:stack create --uuid="test.stack" --name="Тестовый стек"
Вывести список стэков
php artisan sampurna:stack list
Запустить юнита из очереди
php artisan sampurna:unit run --uuid=unit1:0