Skip to content
API Documentation
BastionGuard™
ProcMon.hpp
Go to the documentation of this file.
1#pragma once
3#include <chrono>
4#include <cstdint>
5#include <mutex>
6#include <optional>
7#include <string>
8#include <unordered_map>
9#include <vector>
10
11namespace bsc::proc {
12
13class ProcMon {
14 public:
15 std::optional<bsc::model::ProcessInfo> inspect(std::uint32_t pid, bool checksums = false) const;
16 std::optional<bsc::model::ProcessInfo> cached(std::uint32_t pid, bool allow_recent_exit = true) const;
17 std::vector<bsc::model::ProcessInfo> recent_candidates(std::uint32_t uid,
18 std::chrono::milliseconds max_age = std::chrono::milliseconds(5000),
19 std::size_t limit = 8) const;
20 std::vector<bsc::model::ProcessInfo> recent_candidates_any(std::chrono::milliseconds max_age = std::chrono::milliseconds(1500),
21 std::size_t limit = 8) const;
22 void cache_process(const bsc::model::ProcessInfo& info) const;
23 void invalidate(std::uint32_t pid) const;
24 void note_fork(std::uint32_t child_pid, std::uint32_t parent_pid) const;
25 void note_exec(std::uint32_t pid, bool checksums = false) const;
26 void note_exit(std::uint32_t pid) const;
27
28 private:
29 struct CacheEntry {
31 bool has_checksums{false};
32 std::chrono::steady_clock::time_point updated_at{};
33 };
34
35 static std::optional<bsc::model::ProcessInfo> inspect_procfs(std::uint32_t pid, bool checksums);
36
37 mutable std::mutex cache_mutex_;
38 mutable std::unordered_map<std::uint32_t, CacheEntry> cache_;
39 mutable std::unordered_map<std::uint32_t, CacheEntry> exited_;
40};
41
42} // namespace bsc::proc
std::vector< bsc::model::ProcessInfo > recent_candidates_any(std::chrono::milliseconds max_age=std::chrono::milliseconds(1500), std::size_t limit=8) const
Definition ProcMon.cpp:165
std::unordered_map< std::uint32_t, CacheEntry > exited_
Definition ProcMon.hpp:39
std::mutex cache_mutex_
Definition ProcMon.hpp:37
void note_exit(std::uint32_t pid) const
Definition ProcMon.cpp:263
static std::optional< bsc::model::ProcessInfo > inspect_procfs(std::uint32_t pid, bool checksums)
Definition ProcMon.cpp:66
std::vector< bsc::model::ProcessInfo > recent_candidates(std::uint32_t uid, std::chrono::milliseconds max_age=std::chrono::milliseconds(5000), std::size_t limit=8) const
Definition ProcMon.cpp:135
void cache_process(const bsc::model::ProcessInfo &info) const
Definition ProcMon.cpp:227
std::optional< bsc::model::ProcessInfo > cached(std::uint32_t pid, bool allow_recent_exit=true) const
Definition ProcMon.cpp:122
void note_fork(std::uint32_t child_pid, std::uint32_t parent_pid) const
Definition ProcMon.cpp:242
std::unordered_map< std::uint32_t, CacheEntry > cache_
Definition ProcMon.hpp:38
void invalidate(std::uint32_t pid) const
Definition ProcMon.cpp:236
void note_exec(std::uint32_t pid, bool checksums=false) const
Definition ProcMon.cpp:257
std::optional< bsc::model::ProcessInfo > inspect(std::uint32_t pid, bool checksums=false) const
Definition ProcMon.cpp:192
bsc::model::ProcessInfo info
Definition ProcMon.hpp:30
std::chrono::steady_clock::time_point updated_at
Definition ProcMon.hpp:32