18#include <shared_mutex>
21#include <unordered_map>
70template <
typename SessionType>
119 return count >= threshold;
139 std::string
id = session_id.empty() ?
generate_id() : session_id;
164 std::string
id = session_id.empty() ?
generate_id() : session_id;
205 std::vector<session_ptr> sessions;
208 sessions.push_back(info.session);
219 std::vector<std::string> ids;
237 template <
typename T = SessionType>
239 -> std::enable_if_t<session_traits<T>::has_activity_tracking,
void> {
243 it->second.update_activity();
254 template <
typename T = SessionType>
256 -> std::enable_if_t<session_traits<T>::has_activity_tracking,
257 std::optional<std::chrono::milliseconds>> {
261 return it->second.idle_duration();
272 template <
typename T = SessionType>
274 -> std::enable_if_t<session_traits<T>::has_activity_tracking,
size_t> {
275 std::vector<std::pair<std::string, session_ptr>> to_remove;
282 to_remove.emplace_back(
id, info.session);
289 for (
const auto& [
id, session] : to_remove) {
293 session->stop_session();
322 std::vector<session_ptr> sessions;
327 sessions.push_back(info.session);
332 for (
auto& session : sessions) {
335 session->stop_session();
398 return static_cast<double>(
session_count_.load(std::memory_order_acquire)) /
463 static std::atomic<uint64_t> counter{0};
465 std::to_string(counter.fetch_add(1, std::memory_order_relaxed));
Thread-safe session lifecycle management template.
session_manager_base(session_manager_base &&)=delete
auto add_session_with_id(session_ptr session, const std::string &session_id="") -> std::string
Add a session and return the assigned ID.
std::unordered_map< std::string, info_type > active_sessions_
std::atomic< uint64_t > total_accepted_
auto get_total_cleaned_up() const -> uint64_t
Get total cleaned up sessions.
auto get_session(const std::string &session_id) const -> session_ptr
Get session by ID.
session_manager_base(const session_config &config=session_config())
Constructs a session manager with the given configuration.
auto get_all_session_ids() const -> std::vector< std::string >
Get all session IDs.
auto get_total_rejected() const -> uint64_t
Get total rejected connections.
auto get_stats() const -> stats
Get comprehensive statistics.
std::atomic< size_t > session_count_
auto get_total_accepted() const -> uint64_t
Get total accepted connections.
std::shared_mutex sessions_mutex_
std::atomic< uint64_t > total_rejected_
auto get_idle_duration(const std::string &session_id) const -> std::enable_if_t< session_traits< T >::has_activity_tracking, std::optional< std::chrono::milliseconds > >
Get idle duration for a session.
auto update_activity(const std::string &session_id) -> std::enable_if_t< session_traits< T >::has_activity_tracking, void >
Update session activity timestamp.
auto remove_session(const std::string &session_id) -> bool
Remove session by ID.
auto get_utilization() const -> double
Get current session utilization.
virtual ~session_manager_base()=default
auto get_config() const -> const session_config &
Get current configuration.
auto set_max_sessions(size_t max_sessions) -> void
Set maximum sessions.
auto stop_all_sessions() -> void
Stop all sessions gracefully.
session_manager_base(const session_manager_base &)=delete
auto cleanup_idle_sessions() -> std::enable_if_t< session_traits< T >::has_activity_tracking, size_t >
Cleanup idle sessions that exceeded idle_timeout.
auto can_accept_connection() const -> bool
Check if new connection can be accepted.
session_info_t< SessionType > info_type
auto is_backpressure_active() const -> bool
Check if backpressure should be applied.
auto get_all_sessions() const -> std::vector< session_ptr >
Get all active sessions.
std::atomic< uint64_t > total_cleaned_up_
auto add_session(session_ptr session, const std::string &session_id="") -> bool
Add a session to the manager.
session_manager_base & operator=(const session_manager_base &)=delete
std::shared_ptr< SessionType > session_ptr
static auto generate_id() -> std::string
Generate a unique session ID.
auto get_session_count() const -> size_t
Get current session count.
auto clear_all_sessions() -> void
Clear all sessions.
session_manager_base & operator=(session_manager_base &&)=delete
Configuration for session management.
std::chrono::milliseconds cleanup_interval
std::chrono::milliseconds idle_timeout
double backpressure_threshold
Wrapper for session with optional activity tracking.
Comprehensive session manager statistics.
uint64_t total_cleaned_up
std::chrono::milliseconds idle_timeout
Customization point for session manager behavior.
static constexpr const char * id_prefix
ID prefix for auto-generated session IDs.
static constexpr bool stop_on_clear
Call session's stop method when clearing all sessions.