diff options
Diffstat (limited to 'src/system-stats/logger.cpp')
-rw-r--r-- | src/system-stats/logger.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/system-stats/logger.cpp b/src/system-stats/logger.cpp new file mode 100644 index 0000000..418e693 --- /dev/null +++ b/src/system-stats/logger.cpp @@ -0,0 +1,82 @@ +#include <iostream> +#include "common.h" +#include "date.h" + +namespace fs = std::filesystem; + +const std::string LogFile::date() +{ + namespace C = std::chrono; + namespace D = date; + + std::ostringstream str; + auto tp = C::system_clock::now(); + auto dp = D::floor<D::days>(tp); + auto yd = D::year_month_day {dp}; + auto tm = D::make_time( + C::duration_cast<C::milliseconds>(tp - dp)); + + str << yd.year() << "-" + << static_cast<unsigned>(yd.month()) << "-" + << yd.day() << "_" + << tm.hours().count(); + return str.str(); +} + +void demo_perms(std::filesystem::perms p) +{ + using std::filesystem::perms; + auto show = [=](char op, perms perm) + { + std::cerr << (perms::none == (perm & p) ? '-' : op); + }; + show('r', perms::owner_read); + show('w', perms::owner_write); + show('x', perms::owner_exec); + show('r', perms::group_read); + show('w', perms::group_write); + show('x', perms::group_exec); + show('r', perms::others_read); + show('w', perms::others_write); + show('x', perms::others_exec); + std::cerr << '\n'; +} + +LogFile::LogFile() +{ + base = fs::path("/var/log/" APP_NAME); + try { + if(fs::exists(base)) + if(not fs::is_directory(base)) + fs::remove(base); + + if(not fs::exists(base)) + fs::create_directories(base); + + if(fs::create_directory(base / ".test")) + fs::remove(base / ".test"); + } catch (const std::exception& e) { + std::cerr << e.what() << std::endl; + stdout = true; + } +} + +void LogFile::change(refstream& fstr) +{ + if(stdout) + return; + + if(not (std::addressof(fstr.get()) == std::addressof(stream))) + fstr = std::ref(stream); + + std::string now = date(); + + if(not (date_ == now)) { + if(stream.is_open()) + stream.close(); + date_ = now; + } + + if(not stream.is_open()) + stream.open(base / (date_ + ".log")); +} |