From 12d86cbfeaae2ca57787b61bf8757118ec614a0b Mon Sep 17 00:00:00 2001 From: WolverinDEV Date: Mon, 2 Mar 2020 20:40:48 +0100 Subject: [PATCH] Counting empty instances as well --- license/server/DatabaseHandler.cpp | 2 + license/server/DatabaseHandler.h | 3 +- license/server/StatisticManager.cpp | 1 + license/server/StatisticManager.h | 115 ++++++++++++++-------------- license/server/WebAPI.cpp | 2 + 5 files changed, 64 insertions(+), 59 deletions(-) diff --git a/license/server/DatabaseHandler.cpp b/license/server/DatabaseHandler.cpp index 60ddbc5..43f14b9 100644 --- a/license/server/DatabaseHandler.cpp +++ b/license/server/DatabaseHandler.cpp @@ -408,6 +408,7 @@ std::shared_ptr DatabaseHandler::list_statistics_u continue; /* last server request is too old to be counted */ info->instance_online++; + info->instance_empty += second.web_clients_online == 0 && second.clients_online == 0; info->queries_online += second.queries_online; info->bots_online += second.bots_online; info->web_clients_online += second.web_clients_online; @@ -441,6 +442,7 @@ std::shared_ptr DatabaseHandler::list_statistics_u continue; /* last server request is too old to be counted */ info->instance_online++; + info->instance_empty += second.web_clients_online == 0 && second.clients_online == 0; info->queries_online += second.queries_online; info->bots_online += second.bots_online; info->web_clients_online += second.web_clients_online; diff --git a/license/server/DatabaseHandler.h b/license/server/DatabaseHandler.h index 4b4b082..8f1e55f 100644 --- a/license/server/DatabaseHandler.h +++ b/license/server/DatabaseHandler.h @@ -70,7 +70,8 @@ namespace license::server::database { }; struct GlobalUserStatistics : public UserStatistics { - uint64_t instance_online = 0; + uint64_t instance_online{0}; + uint64_t instance_empty{0}; }; struct DatabaseUserStatistics : public UserStatistics { diff --git a/license/server/StatisticManager.cpp b/license/server/StatisticManager.cpp index 375ab34..732b529 100644 --- a/license/server/StatisticManager.cpp +++ b/license/server/StatisticManager.cpp @@ -148,6 +148,7 @@ std::shared_ptr StatisticManager::general_statistics() { stats->bots += entry->bots; stats->clients += entry->clients; stats->servers += entry->servers; + stats->empty_instances += entry->clients == 0; stats->instances++; } stats->age = system_clock::now(); diff --git a/license/server/StatisticManager.h b/license/server/StatisticManager.h index d41c5d7..f001d2d 100644 --- a/license/server/StatisticManager.h +++ b/license/server/StatisticManager.h @@ -5,70 +5,69 @@ #include #include "DatabaseHandler.h" -namespace license { - namespace stats { - struct GeneralStatistics { - std::chrono::system_clock::time_point age; +namespace license::stats { + struct GeneralStatistics { + std::chrono::system_clock::time_point age; - uint64_t instances = 0; - uint64_t servers = 0; - uint64_t clients = 0; - uint64_t bots = 0; - }; + uint64_t empty_instances{0}; + uint64_t instances{0}; + uint64_t servers{0}; + uint64_t clients{0}; + uint64_t bots{0}; + }; - struct HistoryStatistics { - enum HistoryPeriod { - DAY, - WEEK, - MONTH, - HALF_YEAR, - YEAR - }; - enum HistoryOffset { - NOW, - ONE_BEFORE, - SEVEN_BEFORE, - TWELVE_BEFORE - }; - enum HistoryType { - LAST_DAY, - DAY_YESTERDAY, - DAY_7DAYS_AGO, - LAST_WEEK, - LAST_MONTH, - LAST_HALF_YEAR - }; - static std::chrono::system_clock::time_point align_type(HistoryType type, const std::chrono::system_clock::time_point&); - static std::chrono::milliseconds time_period(HistoryType type); - static std::chrono::milliseconds cache_timeout(HistoryType type); - static std::chrono::milliseconds type_duration(HistoryType type); + struct HistoryStatistics { + enum HistoryPeriod { + DAY, + WEEK, + MONTH, + HALF_YEAR, + YEAR + }; + enum HistoryOffset { + NOW, + ONE_BEFORE, + SEVEN_BEFORE, + TWELVE_BEFORE + }; + enum HistoryType { + LAST_DAY, + DAY_YESTERDAY, + DAY_7DAYS_AGO, + LAST_WEEK, + LAST_MONTH, + LAST_HALF_YEAR + }; + static std::chrono::system_clock::time_point align_type(HistoryType type, const std::chrono::system_clock::time_point&); + static std::chrono::milliseconds time_period(HistoryType type); + static std::chrono::milliseconds cache_timeout(HistoryType type); + static std::chrono::milliseconds type_duration(HistoryType type); - std::chrono::system_clock::time_point evaluated; - std::chrono::system_clock::time_point begin; - std::chrono::system_clock::time_point end; - std::chrono::milliseconds period; - HistoryType type; + std::chrono::system_clock::time_point evaluated; + std::chrono::system_clock::time_point begin; + std::chrono::system_clock::time_point end; + std::chrono::milliseconds period; + HistoryType type; - std::shared_ptr statistics; - }; + std::shared_ptr statistics; + }; - class StatisticManager { - public: - explicit StatisticManager(std::shared_ptr /* manager */); - virtual ~StatisticManager(); + class StatisticManager { + public: + explicit StatisticManager(std::shared_ptr /* manager */); + virtual ~StatisticManager(); - void reset_cache_general(); - std::shared_ptr general_statistics(); - std::shared_ptr history(HistoryStatistics::HistoryType); - private: - std::shared_ptr license_manager; + void reset_cache_general(); + std::shared_ptr general_statistics(); + std::shared_ptr history(HistoryStatistics::HistoryType); + private: + std::shared_ptr license_manager; - std::recursive_mutex _general_statistics_lock; - std::recursive_mutex _general_statistics_generate_lock; - std::shared_ptr _general_statistics; + std::recursive_mutex _general_statistics_lock; + std::recursive_mutex _general_statistics_generate_lock; + std::shared_ptr _general_statistics; - std::map _history_locks; - std::map> _history; - }; - } + std::map _history_locks; + std::map> _history; + }; } \ No newline at end of file diff --git a/license/server/WebAPI.cpp b/license/server/WebAPI.cpp index dd84d68..db7719f 100644 --- a/license/server/WebAPI.cpp +++ b/license/server/WebAPI.cpp @@ -520,6 +520,7 @@ bool WebStatistics::handle_message(const std::shared_ptrrecord_count; index++) { auto& indexed_data = history_data[index]; + indexed_data["instances_empty"] = data->history[index].instance_empty; indexed_data["instances"] = data->history[index].instance_online; indexed_data["servers"] = data->history[index].servers_online; indexed_data["clients"] = data->history[index].clients_online; @@ -560,6 +561,7 @@ bool WebStatistics::handle_request(const std::shared_ptrstatistics_manager->general_statistics(); + json["statistics"]["instances_empty"] = to_string(stats->empty_instances); json["statistics"]["instances"] = to_string(stats->instances); json["statistics"]["servers"] = to_string(stats->servers); json["statistics"]["clients"] = to_string(stats->clients);