52 lines
1.8 KiB
C++
52 lines
1.8 KiB
C++
#include "MetricsObserver.hpp"
|
|
|
|
namespace matador::test {
|
|
MetricsObserver::MetricsObserver(utils::message_bus& bus) {
|
|
subscriptions.push_back(bus.subscribe<sql::statement_lock_failed_event>([this](const sql::statement_lock_failed_event &ev) {
|
|
std::lock_guard lock(mutex_);
|
|
lock_failure_count_++;
|
|
total_lock_wait_time_ += ev.duration;
|
|
}));
|
|
subscriptions.push_back(bus.subscribe<sql::statement_execution_event>([this](const sql::statement_execution_event &ev) {
|
|
std::lock_guard lock(mutex_);
|
|
execution_count_++;
|
|
total_execution_time_ += ev.duration;
|
|
}));
|
|
|
|
}
|
|
|
|
std::chrono::milliseconds MetricsObserver::get_average_lock_wait_time() const {
|
|
std::lock_guard lock(mutex_);
|
|
if (lock_failure_count_ == 0) {
|
|
return std::chrono::milliseconds{0};
|
|
}
|
|
const auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(total_lock_wait_time_);
|
|
return std::chrono::milliseconds(millis.count() / lock_failure_count_);
|
|
}
|
|
|
|
std::chrono::milliseconds MetricsObserver::get_average_execution_time() const {
|
|
std::lock_guard lock(mutex_);
|
|
if (execution_count_ == 0) {
|
|
return std::chrono::milliseconds{0};
|
|
}
|
|
|
|
const auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(total_execution_time_);
|
|
return std::chrono::milliseconds(millis.count() / execution_count_);
|
|
}
|
|
|
|
std::chrono::milliseconds MetricsObserver::get_total_lock_wait_time() const {
|
|
std::lock_guard lock(mutex_);
|
|
return std::chrono::duration_cast<std::chrono::milliseconds>(total_lock_wait_time_);
|
|
}
|
|
|
|
std::chrono::milliseconds MetricsObserver::get_total_execution_time() const {
|
|
std::lock_guard lock(mutex_);
|
|
return std::chrono::duration_cast<std::chrono::milliseconds>(total_execution_time_);
|
|
}
|
|
|
|
size_t MetricsObserver::get_lock_failure_count() const {
|
|
std::lock_guard lock(mutex_);
|
|
return lock_failure_count_;
|
|
}
|
|
}
|