В проекте часто бывает некий data-flow который идет через ETL или даже отдельные серверы обогащения данных. Собственно и наш проект не исключение. Что было нужно? Данные из интернета летят в PostgreSQL, но только если в Redis не валяется хэш таких же. Далее несколько ETL проводит стандартный OLTP - OLAP преобразование и складывает все это в MongoDB - откуда клиент дергает эти данные и сравнивает их со своей PostgreSQL попутно складируя кэш в Redis. Все это периодически летает через RabbitMQ.

Что бесило? DBeaver + MongoExpress + redis-cli все это в разных местах с разными учетками, экспресс постоянно падал по невыясненной причине, неправильный запрос в редиску подвисал, а затем улетал в космос. Мелькнула мысль: "ну почему никто не написал чего-то более стабильного и удобного?", - собственно это и стало драйвером выходного дня.

Спасибо древним грекам, над названием долго думать не пришлось: Паноптикум - в оригинале "место откуда видно все", но также "сборище жутких и необычных артефактов".

С лицензией решили не заморачиваться ибо никакого ноу хау тут нет, а просто набор коннекторов и простенький интерфейс - такое было есть и должно быть всегда бесплатным - open-source под лицензией MIT, проще говоря бери что хочешь делай что угодно.

Собственно дальше все очень просто, можно читать, можно искать, можно обновить отдельную запись (если DevOps разрешит) собственно это не production-ready софт, а простой и надежный инструмент для QA и разрабов. Примитивная basic-auth которую обязательно надо прятать под TLS и желательно за корп-VPN, чтобы только свои могли запороть. Для прода и около можно сделать READ_ONLY - но тут каждый сам решает надо оно вообще ему или нет.

Наконец-то можно проследить все преобразования данных и найти кто потерялся, можно открывать несколько вкладок, можно давать ссылку на конкретный объект. Ставится самым стандартным образом: берем образ - разворачиваем, ничего необычного.

Есть немного переменных:

  • PANOPTICUM_USER / PANOPTICUM_PASSWORD - Тут вроде как все понятно, да? Если не задать будет admin / admin

  • PANOPTICUM_DB_PATH - где будет жить локальная БД (там H2 под капотом) - моно не указывать, если вы не параноик по безопасности

  • PANOPTICUM_CONNECTIONS_JSON - массив готовых подключений (можно указать заранее, а не пихать их по одной через интерфейс, как делать - написано в README)

  • ADMIN_LOCK - Если true то соединения нельзя добавлять или удалять, что дал DevOps с тем и живем

  • READ_ONLY - вырубает все кнопки "сохранить" - собственно весь остальной функционал остается.

Стоит учитывать, что не все одинаково полезны разрешено менять, так ClickHouse и RabbitMQ всегда только для чтения это не баг, это так и задумано. Вообще-то нам нужно было только то, что упоминалось в самом начале, но позже было решено добавить все что можно,так в код залетело много всякого. В итоге мы имеем вот такой вот список:

  • PostgreSQL / CockroachDB / YugabyteDB

  • MySQL / MariaDB

  • MS SQL Server

  • MongoDB

  • Redis / Dragonfly / Valkey / KeyDB

  • ClickHouse

  • Cassandra / ScyllaDB

  • RabbitMQ

  • Kafka

  • Elasticsearch / OpenSearch

Собственно продукт не претендует на "самый лучший софт на свете", нам нравится - может и другим пригодится.

докер: https://hub.docker.com/r/sharque/panopticum

гит: https://github.com/theSharque/panopticum