Monitoring System 0.1.0
System resource monitoring with pluggable collectors and alerting
Loading...
Searching...
No Matches
security_collector.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
5#pragma once
6
21#include <atomic>
22#include <chrono>
23#include <cstdint>
24#include <memory>
25#include <mutex>
26#include <string>
27#include <unordered_map>
28#include <vector>
29
32
33namespace kcenon {
34namespace monitoring {
35
41 login_success = 1,
42 login_failure = 2,
43 logout = 3,
44 sudo_usage = 4,
46 account_created = 6,
47 account_deleted = 7,
49 session_start = 9,
50 session_end = 10,
51 unknown = 0
52};
53
60 switch (type) {
61 case security_event_type::login_success: return "LOGIN_SUCCESS";
62 case security_event_type::login_failure: return "LOGIN_FAILURE";
63 case security_event_type::logout: return "LOGOUT";
64 case security_event_type::sudo_usage: return "SUDO_USAGE";
65 case security_event_type::permission_change: return "PERMISSION_CHANGE";
66 case security_event_type::account_created: return "ACCOUNT_CREATED";
67 case security_event_type::account_deleted: return "ACCOUNT_DELETED";
68 case security_event_type::account_modified: return "ACCOUNT_MODIFIED";
69 case security_event_type::session_start: return "SESSION_START";
70 case security_event_type::session_end: return "SESSION_END";
71 default: return "UNKNOWN";
72 }
73}
74
81 std::string username;
82 std::string source;
83 std::string message;
84 bool success{false};
85 std::chrono::system_clock::time_point timestamp;
86};
87
93 uint64_t login_success{0};
94 uint64_t login_failure{0};
95 uint64_t logout{0};
96 uint64_t sudo_usage{0};
97 uint64_t permission_change{0};
98 uint64_t account_created{0};
99 uint64_t account_deleted{0};
100 uint64_t account_modified{0};
101 uint64_t unknown{0};
102
121
139
149};
150
157 uint64_t active_sessions{0};
158 std::vector<security_event> recent_events;
159 double events_per_second{0.0};
160 bool metrics_available{false};
161 std::chrono::system_clock::time_point timestamp;
162};
163
164// Forward declaration
165namespace platform {
166class metrics_provider;
167} // namespace platform
168
177 public:
180
181 // Non-copyable, non-moveable due to internal state
186
192
198
203 void set_max_recent_events(size_t max_events);
204
209 void set_mask_pii(bool mask_pii);
210
211 private:
212 std::unique_ptr<platform::metrics_provider> provider_;
214 bool mask_pii_{false};
215
216 std::string mask_username(const std::string& username) const;
217};
218
227 public:
230
231 // Non-copyable, non-moveable due to internal state
236
237 // collector_plugin interface implementation
238 auto name() const -> std::string_view override { return "security_collector"; }
239 auto collect() -> std::vector<metric> override;
240 auto interval() const -> std::chrono::milliseconds override { return collection_interval_; }
241 auto is_available() const -> bool override;
246 bool is_healthy() const;
247 auto get_metric_types() const -> std::vector<std::string> override;
248
258 bool initialize(const std::unordered_map<std::string, std::string>& config) override;
259
260
265 std::unordered_map<std::string, double> get_statistics() const override;
266
272
278
279 private:
281
282 // Configuration
283 bool enabled_{true};
284 bool mask_pii_{false};
287 std::chrono::milliseconds collection_interval_{std::chrono::seconds(60)};
288
289 // Statistics
290 mutable std::mutex stats_mutex_;
291 std::atomic<size_t> collection_count_{0};
292 std::atomic<size_t> collection_errors_{0};
294
295 // Helper methods
296 metric create_metric(const std::string& name, double value,
297 const std::unordered_map<std::string, std::string>& tags = {},
298 const std::string& unit = "") const;
299 void add_security_metrics(std::vector<metric>& metrics,
300 const security_metrics& security_data);
301};
302
303} // namespace monitoring
304} // namespace kcenon
Pure virtual interface for metric collector plugins.
Security event monitoring collector.
auto name() const -> std::string_view override
Get the unique name of this plugin.
security_collector(security_collector &&)=delete
security_collector & operator=(const security_collector &)=delete
std::chrono::milliseconds collection_interval_
void add_security_metrics(std::vector< metric > &metrics, const security_metrics &security_data)
auto collect() -> std::vector< metric > override
Collect current metrics from this plugin.
std::unordered_map< std::string, double > get_statistics() const override
security_collector & operator=(security_collector &&)=delete
bool initialize(const std::unordered_map< std::string, std::string > &config) override
security_collector(const security_collector &)=delete
metric create_metric(const std::string &name, double value, const std::unordered_map< std::string, std::string > &tags={}, const std::string &unit="") const
security_metrics get_last_metrics() const
auto get_metric_types() const -> std::vector< std::string > override
Get supported metric types.
std::unique_ptr< security_info_collector > collector_
auto is_available() const -> bool override
Check if this plugin is available on the current system.
auto interval() const -> std::chrono::milliseconds override
Get the collection interval for this plugin.
Security event data collector using platform abstraction layer.
security_info_collector & operator=(security_info_collector &&)=delete
security_info_collector & operator=(const security_info_collector &)=delete
std::unique_ptr< platform::metrics_provider > provider_
security_info_collector(security_info_collector &&)=delete
void set_max_recent_events(size_t max_events)
security_info_collector(const security_info_collector &)=delete
std::string mask_username(const std::string &username) const
Plugin interface for metric collectors.
Adapter for metric types to support interface definitions.
security_event_type
Types of security events tracked.
@ permission_change
Permission/ACL change.
@ sudo_usage
Privilege escalation (sudo)
@ login_success
Successful login attempt.
@ account_created
New account creation.
@ account_modified
Account modification.
@ login_failure
Failed login attempt.
@ platform
Platform/system power domain.
std::string security_event_type_to_string(security_event_type type)
Convert security_event_type to string representation.
Basic metric structure for interface compatibility.
Counts of security events by type.
void increment(security_event_type type)
uint64_t login_success
Successful login count.
uint64_t get_count(security_event_type type) const
uint64_t account_deleted
Account deletion count.
uint64_t permission_change
Permission change count.
uint64_t account_created
Account creation count.
uint64_t account_modified
Account modification count.
uint64_t sudo_usage
Sudo/privilege escalation count.
Individual security event information.
std::string username
Username involved (may be masked for privacy)
security_event_type type
Event type.
std::chrono::system_clock::time_point timestamp
Event timestamp.
bool success
Whether the action succeeded.
std::string message
Event message/details.
std::string source
Source IP/terminal.
Aggregated security event metrics.
bool metrics_available
Whether metrics are available.
std::chrono::system_clock::time_point timestamp
Reading timestamp.
std::vector< security_event > recent_events
Recent security events (limited)
uint64_t active_sessions
Current active login sessions.
security_event_counts event_counts
Event counts by type.