BastionGuard/thirdparty/bastionguard-secure-connection/daemon/include/bsc/stats/Statistics.hpp
specialworld83 f0f913a209 Release 2.0
2026-07-15 10:52:22 +02:00

58 lines
2.1 KiB
C++

#pragma once
#include "bsc/model/Connection.hpp"
#include <cstdint>
#include <deque>
#include <map>
#include <mutex>
#include <string>
namespace bsc::stats {
struct Event {
std::string time;
bsc::model::Connection connection;
std::string rule_name;
std::int64_t unixnano{0};
};
class Statistics {
public:
explicit Statistics(std::size_t max_events = 250);
void record(const bsc::model::Connection& conn, const std::string& action, const std::string& rule_name);
void note_dns_response();
[[nodiscard]] std::uint64_t connections() const;
[[nodiscard]] std::uint64_t accepted() const;
[[nodiscard]] std::uint64_t dropped() const;
[[nodiscard]] std::uint64_t ignored() const;
[[nodiscard]] std::uint64_t rules() const;
[[nodiscard]] std::uint64_t dns_responses() const;
[[nodiscard]] std::uint64_t rule_hits() const;
[[nodiscard]] std::uint64_t rule_misses() const;
[[nodiscard]] std::map<std::string, std::uint64_t> by_proto() const;
[[nodiscard]] std::map<std::string, std::uint64_t> by_address() const;
[[nodiscard]] std::map<std::string, std::uint64_t> by_host() const;
[[nodiscard]] std::map<std::string, std::uint64_t> by_port() const;
[[nodiscard]] std::map<std::string, std::uint64_t> by_uid() const;
[[nodiscard]] std::map<std::string, std::uint64_t> by_executable() const;
[[nodiscard]] std::deque<Event> events() const;
private:
mutable std::mutex mutex_;
std::size_t max_events_;
std::uint64_t rules_{0};
std::uint64_t connections_{0};
std::uint64_t ignored_{0};
std::uint64_t accepted_{0};
std::uint64_t dropped_{0};
std::uint64_t dns_responses_{0};
std::uint64_t rule_hits_{0};
std::uint64_t rule_misses_{0};
std::map<std::string, std::uint64_t> by_proto_;
std::map<std::string, std::uint64_t> by_address_;
std::map<std::string, std::uint64_t> by_host_;
std::map<std::string, std::uint64_t> by_port_;
std::map<std::string, std::uint64_t> by_uid_;
std::map<std::string, std::uint64_t> by_executable_;
std::deque<Event> events_;
};
} // namespace bsc::stats