ServiceConfigurator - это self-hosted OWIN-based веб-служба для простого конфигурирования внутренних сервисов предприятия. Текущая альфа версия проекта содержит в себе всего лишь 1 модуль для конфигурирования веб-серверов IIS. В проекте есть полноценный веб-интерфейс при отсутствии тяжеловесных ASP и MVC.
- Настройка разрешения доступа по IP, URL и QueryString для группы сайтов.
- Полноценный REST API дающий доступ ко всем настройкам.
- Применение правил IIS по графику.
- Отправка основных показателей жизнедеятельности в Zabbix (количество активных правил).
- Полноценный веб-интерфейс основанный на twitter bootstrap.
- 2 режима работы: служба или консольное приложение.
- Движок представлений реализован на клиентской стороне.
Система конфигурирования состоит из 3-х основных частей:
- БД для хранения правил IIS и сайтов, к которым они применяются совместно с DB API в виде набора хранимых процедур,
- сервисной части, реализующей REST API, применение правил по графику и self-hosted веб-сервис,
- пользовательского веб-интерфейса.
БД имеет предельно простую структуру и содержит всего 2 таблицы: IISSite - для хранения конфигурационных единиц и IISRestriction - для хранения правил и их истории. Правила хранятся в формате XML в поле Rule и являются сериализацией внутренних классов IpRestriction, UrlRestriction и QueryStringRestriction. Тип правила может принимать одно из строковых значений "url", "ip", "query". DB API, в виде набора хранимых процедур, позволяет:
- добавлять, удалять, отменять правила,
- добавлять конфигурационные единицы,
- получать количественную статистику и списки правил для обновления.
Служба выполнена по классической MVC модели, однако без использования MVC библиотек .NET. Контроллеры, реализующие WebAPI и пользовательский API разделены. Вспомогательные функции записи логов, чтения конфигурации и отправки данных в систему мониторинга Zabbix выполнены в виде глобальных singleton классов. Также в отдельный блок выделены классы ядра, взаимодействующие с БД, удаленными серверами IIS и выполняющие прочие внутренние функции. В качестве движка представлений используется открытый RazorEngine, однако в данной реализации он может быть спокойно исключен, так как подобие движка представлений реализовано на клиентской стороне. Конвейер обработки HTTP запросов реализован на фрэймворке katana и в данной версии не содержит middleware аутентификации и авторизации.
Основная особенность пользовательского интерфейса - динамическая загрузка контента при необходимости. Таким образом любые вложенные элементы на HTML странице подгружаются в виде независимых HTML блоков тем самым увеличивая отзывчивость интерфейса и скорость загрузки.
Разумеется такой подход хорошо применим лишь к single-page веб приложениям так как имеет один существенный недостаток - отсутствие обратной связи через URL и отсутствие историчности. Однако данный вопрос может быть легко решен через клиентские JS фрэймвоки.