// // Created by Мустафаев Селим Мустафаевич on 01.01.2024. // #include "DnsmasqSource.h" #include #include #include #include #include #include namespace views = std::ranges::views; DnsmasqSource::DnsmasqSource() { _leases.open("/var/lib/misc/dnsmasq.leases"); if(_leases.fail()) { throw std::runtime_error("failed to open leases file"); } } std::vector DnsmasqSource::readLeases() { _leases.clear(); _leases.seekg(0); std::string line; std::vector result; auto labels = std::array{ "time", "mac", "ip", "host", "id" }; while(std::getline(_leases, line)) { prometheus::Labels lineMap; for(const auto [index, item]: std::views::split(line, ' ') | views::enumerate) { lineMap[labels[index]] = std::string_view(item); } result.push_back(lineMap); } return result; }