#include <optional> #include <string> #include <unordered_map> #include <vector> #include "cereal/messaging/messaging.h" struct CPUTime { int id; unsigned long utime, ntime, stime, itime; unsigned long iowtime, irqtime, sirqtime; }; struct ProcCache { int pid; std::string name, exe; std::vector<std::string> cmdline; }; struct ProcStat { int pid, ppid, processor; char state; long cutime, cstime, priority, nice, num_threads, rss; unsigned long utime, stime, vms; unsigned long long starttime; std::string name; }; namespace Parser { std::vector<int> pids(); std::optional<ProcStat> procStat(std::string stat); std::vector<std::string> cmdline(std::istream &stream); std::vector<CPUTime> cpuTimes(std::istream &stream); std::unordered_map<std::string, uint64_t> memInfo(std::istream &stream); const ProcCache &getProcExtraInfo(int pid, const std::string &name); }; // namespace Parser void buildProcLogMessage(MessageBuilder &msg);