zenc0dr / sampurna
सम्पूर्ण
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Language:JavaScript
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