bse-admin
![devDependency Status](https://david-dm.org/bem/bse-admin/dev-status.svg?style=flat)
Сборщик данных для bem-site-engine
Используется как dev-зависимость в bem-site-engine
в режиме разработки.
В качестве хранилища данных используется база данных LevelDB
Соответствующий nodejs модуль для работы с базой данных.
Архитектурно данный сборщик представляет собой nodejs приложение, которое имеет command line интерфейс
и предоставляет определенное js API для возможности вызова основных команд из сторонних приложений.
Структура работы основана на создании сценариев и последовательном выполнении всех этапов в данных сценариях.
Доступные сценарии описаны модулями которые находятся в директории targets
Сценарии
Сценарий представляет собой класс который должен быть унаследован от класса TargetBase
var TargetBase = require('./base').TargetBase,
TargetFoo = function (options) {
this.init(options);
};
TargetFoo.prototype = Object.create(TargetBase.prototype);
TargetFoo.prototype.init = function (options) {
[
// Set list of tasks here
].forEach(function (task) {
this.addTask(task);
}, this);
TargetBase.prototype.init.call(this, options);
};
TargetFoo.prototype.getName = function () {
return 'Your target name';
};
exports.TargetFoo = TargetFoo;
При создании сценария должны быть переопределен метод init
в котором нужно указать массив тех
шагов которые должны быть выполнены для данного сценария в той последовательности в какой они написаны.
Также должен быть переопределен метод getName
который должен возвращать название сценария.
Это необходимо для построения логов.
Готовые сценарии
Очистка базы данных
Удаляет все записи из базы данных.
- Название:
CLEAR DATABASE
- Модуль: clear-db.js
- Примечание: Можно передать массив шаблонов названий ключей. Записи соответствующие ключам
которые попадают под соответствующий шаблон будут удалены.
Публикация модели
Собирает *.json
файл из js - структуры описания модели и шлет его на сервер провайдера данных.
- Название:
UPDATE MODEL
- Модуль: update-model.js
- Примечание: Можно передать хост и порт провайдера данных.
Если эти опции не указаны, то хост и порт будут выставлены по значениям указанным в конфигурационном файле.
Полная сборка
Основной сценарий выполнения. Проверяет наличие обновленного файла модели.
Синхронизирует модель, проверяет обновление документации, новых версий библиотек и мета-информации по
авторам и переводчикам. Переопределяет ссылки в документах, строит файл sitemap.xml
. При наличии изменений
создает копию базы данных в папке с текущей датой.
- Название:
NODES SYNCHRONIZATION
- Модуль: nodes.js
Сборка в режиме разработки
Сценарий приложения в режиме разработки. В отличие от полной сборки работает с js файловой структурой модели.
Не создает копий базы данных.
Сборка документации
Вариант сборки при котором проверяется и синхронизируется только содержимое *.md
файлов документации.
Кроме этого выполняется проверка информации по автором и переводчикам а также общие шаги
типа переопредления ссылок и создания sitemap.xml
файла.
Главным образом данный сценарий используется для поиска ошибок на этапе разработки.
- Название:
DOCS SYNCHRONIZATION
- Модуль: docs.js
Сборка библиотек
Вариант сборки при котором проверяется и синхронизируется только содержимое библиотек блоков.
Кроме этого выполняются общие шаги типа переопредления ссылок и создания sitemap.xml
файла.
Главным образом данный сценарий используется для поиска ошибок на этапе разработки.
- Название:
LIBRARIES SYNCHRONIZATION
- Модуль: libraries.js
- Примечание: Можно передать параметры библиотеки или отдельной версии.
Соответствующие этой версии или библиотеки файлы будут удалены из файлового кэша и заново загружены
из github-репозитория.
Этапы сборки
Этапы сборки представляет собой модуль, который экспортирует функцию принимающую аргументом
объект сценария сборки и возвращающую fullfill vow promise c объектом сценария сборки
при успешном прохождении этапа сборки и reject vow promise с объектом ошибки выполнения.
Код простейшего модуля удовлетворяющего таким требованиям представлен ниже:
var vow = require('vow');
module.exports = function (target) {
console.log('Hello world')
return vow.resolve(target);
};
Если добавить такой этап сборки в любой из сценариев, то при выполнении такого модуля в консоль
выведется "Hello world".
Модули всех этапов сборки раположены в директории targets.
Готовые этапы сборки
Очистка базы данных
Удаляет все записи из базы данных.
Синхронизация документации
Создание узлов авторов и переводчиков
Создание узлов тегов
Финализация сборки
Последний модуль в очереди выполнения для всех сценариев.
Предназначен для вывод финального лога.
Кроме того в нем можно определить например отключение от базы данных.
Сборка файла из js файловой структуры модели
Собирает единый *.json
файл модели из js - файлов распределенных по папкам.
Сохраняет этот *.json
файл на файловую систему в папку './cache'.
Инициализация
Инициализирует подключение к локальной базе данных и github API.
Очистка кэша файлов библиотек блоков
Очищает файловый кэш для данных сборки по библиотекам.
Дополнительные опции переданных на данный этап сборки позволяют
выборочно очистить кэш для определенной библиотеки или выбранной версии библиотеки.
Синхронизация данных по библиотекам блоков с файловой системой
Синхронизация данных по библиотекам блоков с базой данных
Синхронизация модели
Переопределение ссылок
Синхронизация файла с мета-информацией по авторам и переводчикам
Сверяет информацию по авторам и переводчикам между той версией, которая
находится в базе данных и версией расположенной на github. При различии
данных скачивает файл с обновленной информацией по авторам и переводчикам с github
и обновляет данные в локальной базе.
Удаление файла модели
Удаляет файл модели после ее успешной обработки. Нужен для
предотвращения повторной синхронизации данных при последующих
запусках сборщика данных.
Построение данных для системы внутреннего поиска
Создание структуры данных для файла sitemap.xml
Этот модуль собирает все узлы имеющие url и и строит js модель соответствующую
файлу sitemap.xml для индексации сайта поисковыми системами. Узлы могут содержать
параметры которые переопределяют стандартные настройки индексации.
После построения модели она конвертируется в xml и сохраняется в базу данных.
Создание копии базы данных
При наличии собранных изменений в процессе сборки на этом этапе
все файлы базы данных копируются в папку snapshots/{dd:mm:yyyy-hh:mm:ss}
где dd:mm:yyyy-hh:mm:ss
дата создания копии базы данных в соответствующем формате.
Кроме файлов базы данных, папка бэкапа также содержит, файл data.json
,
который содержит дату сборки и список изменений данных, которые произошли в результате сборки.
Также присуствуют файлы libraries.json
и blocks.json
которые нужны для сервисов поиска.
Переключение симлинки на копию базы данных
Существует 2 симлинки расположенные в папке db
:
Папки, на которые указывают эти симлинки запрашиваются сайтом
соответственно с тестового и боевого окружений.
При этом тестовая симлинка переключается на последний созданный snapshot
сразу же после его создания.
Публикация модели на удаленный сервис
Открывает, архивирует и отправляет файл модели на сервер сборки.
Построение карты ссылок - узлов модели
Необходим для оптимальной работы роутера на сайте.
Задача роутера - нахождение нужного узла модели (точнее id узла) по url запроса.
Этот модуль строит карту соответствия всех маршрутов сайта узлам модели.
Ответственный за разработку: @tormozz48