58 lines
2.1 KiB
C++
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
|