У меня есть приложение Java, которое должно собирать и сообщать большое количество показателей/операционных измерений/статистики (разные слова для разных людей - я просто использую метрики) о различных объектах. Метрики могут быть следующими:
- Некоторое измеренное числовое значение в определенный момент времени (количество пользователей, которые в настоящее время вошли в систему,% использования некоторого ресурса)
- Некоторое измеренное числовое значение в течение заданного интервала времени (количество сообщений, переданных за последние 5 минут)
- Некоторое значение перечисления в определенный момент времени (состояние работоспособности какого-либо объекта: ONLINE/WARNING/FAILED/OFFLINE)
"Объекты" могут быть физическими устройствами (компьютер, коммутатор, модем), но чаще всего являются логическими объектами (канал связи 4567, пользователь 123456, интерфейс для обслуживания A). Кроме того, некоторые из этих логических объектов являются статическими, поскольку они известны заранее и не изменяются в течение срока действия приложения, а другие могут быть временными (канал связи 4567 может существовать только в течение некоторого времени, а затем удаляется).
Я ищу библиотеки, которые помогут решить две проблемы:
- Упростите сбор и сохранение этих бит информации на сервере.
- Представьте данные пользователю полезным способом.
Примечание/Требования:
- Серверное приложение, создающее данные, представляет собой в основном процесс Java, выполняющийся как демон (т.е. не webapp)
- Будет два разных типа клиентов.
- One - это настольное приложение Java Swing, в котором будет использоваться большинство "тяжелых". Здесь важны богатые живые графические и исторические запросы.
- Другой веб-интерфейс. На данный момент мои требования не на 100% понятны, но потребности этого клиента будут значительно легче, чем у swing-клиента. Здесь нужны открытые стандарты (AJAX/HTML не Flash).
- Может быть внедрен в проприетарное программное обеспечение (то есть без лицензии GPL). Коммерческий или бесплатный.
В прошлом моя компания пыталась создать пару "домашних" решений для этой потребности. В основном данные заносятся в базу данных некоторым непоследовательным образом, и клиент извлекает данные и способен отображать одно значение за определенный период времени, используя либо домашние, либо сторонние диаграммы. Честно говоря, все наши решения сосали. Некоторые из проблем, на которые я надеюсь, могут решить третье решение:
- Инкапсулировать код, используемый для обновления/записи метрики, чтобы он не перекрывал класс, который фактически измеряет значение.
- Помогите управлять наименованием/идентификацией показателей. Их может легко быть 1000; придумывая какую-то схему именования, чтобы обеспечить уникальность PITA.
- Хорошо справляйтесь с историческими данными. Возможность настройки времени хранения данных и архивирования или очистки старых записей.
- На стороне клиента встроенная функция построения диаграмм и запросов с возможностью преобразования некоторых необработанных данных из базы данных перед представлением пользователю.
Извините за длинное описание. Благодарим за помощь.