From 17433b0cbcacc3f41fd500551baf4d52d291e0c9 Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sat, 2 May 2020 18:12:46 +0200 Subject: Statistics: IPv6 and HTTP fractions --- plugins/statistics/statistics.cpp | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/statistics/statistics.cpp b/plugins/statistics/statistics.cpp index 543cc4e..5eef858 100644 --- a/plugins/statistics/statistics.cpp +++ b/plugins/statistics/statistics.cpp @@ -1,6 +1,7 @@ #include "statistics.h" #include +#include #include #include @@ -25,6 +26,30 @@ namespace { return status + " " + message; } + // returns sum over specified column + uint64_t getSum(const std::string& stats, size_t column) + { + uint64_t result{0}; + + std::istringstream is{stats}; + std::string line; + + while (std::getline(is, line) && !is.eof()) { + + std::vector elements; + boost::algorithm::split(elements, line, [](char c){ return c == ','; }); + + if (column >= elements.size()) { + std::cerr << "Error: No column " << column << " found." << std::endl; + return 0; + } + + result += stoull(elements[column]); + } + + return result; + } + } // anonymous namespace std::string statistics_plugin::name() @@ -80,10 +105,20 @@ std::string statistics_plugin::generate_page( std::string result{header}; + std::string statistics{GetServerParam("statistics")}; + double ipv6_fraction_by_requests {double(getSum(statistics, 5)) / getSum(statistics, 1)}; + double ipv6_fraction_by_bytes {double(getSum(statistics, 7) + getSum(statistics, 8)) / (getSum(statistics, 3) + getSum(statistics, 4))}; + double https_fraction_by_requests {double(getSum(statistics, 9)) / getSum(statistics, 1)}; + double https_fraction_by_bytes {double(getSum(statistics, 11) + getSum(statistics, 12)) / (getSum(statistics, 3) + getSum(statistics, 4))}; + result += "

Webserver Statistics

"; result += "

Host uptime: "s + GetServerParam("uptime_host") + "

"; result += "

Host webserver: "s + GetServerParam("uptime_webserver") + "

"; - result += "
"s + GetServerParam("statistics") + "
"s; + result += "

IPv6 fraction by requests: "s + std::to_string(ipv6_fraction_by_requests * 100) + "

"; + result += "

IPv6 fraction by bytes: "s + std::to_string(ipv6_fraction_by_bytes * 100) + "

"; + result += "

HTTPS fraction by requests: "s + std::to_string(https_fraction_by_requests * 100) + "

"; + result += "

HTTPS fraction by bytes: "s + std::to_string(https_fraction_by_bytes * 100) + "

"; + result += "
"s + statistics + "
"s; result += footer; -- cgit v1.2.3