Я пытаюсь реализовать статистическую отчетность для внутренних компонентов веб-приложения OLTP. Например, я хочу отслеживать в режиме реального времени использование или производительность таких вещей, как: количество успешных / неудачных входов в систему, количество сеансов nhibernate, время для обработки HTTP-запроса, количество транзакций различных типов (заказов, обращений и т. Д.). Вся эта статистика отправляется через UDP на сервер statsd (https://github.com/etsy/statsd)) и отображается в виде графиков с Graphite.
Приложение использует внедрение зависимостей для подключения внутренних компонентов. Я хочу централизовать статистические отчеты для сервера statsd в своем собственном классе и скрыть его под интерфейсом. Тем не менее, я чувствую, что внедряю экземпляр класса / интерфейса отчетности stats в каждый компонент приложения, который сообщает о производительности или использовании данных как запах. Мне кажется, что события, связанные с отчетностью о производительности, должны быть чем-то вроде сквозной проблемы, почти как логирование.
Как вы подходите к внутреннему дизайну для такого запроса? Подойдете ли вы к внедрению конструктора, статическим методам (например, PerformanceCounters.Increment ("name.of.counter")), которые называются моими отслеживаемыми компонентами или как?
Если это помогает контексту, приложение создано на C # и использует ASP.NET и Castle Windsor в качестве IoC.
Спасибо,
Роберт