From 3a288fbf42f810731d27ca06c7688ee47be35bc5 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Thu, 4 Jan 2024 15:44:45 +0300 Subject: [PATCH] Reopening leases file on every reading --- DataSources/DnsmasqSource.cpp | 18 +++--------------- DataSources/DnsmasqSource.h | 12 ------------ main.cpp | 1 - 3 files changed, 3 insertions(+), 28 deletions(-) diff --git a/DataSources/DnsmasqSource.cpp b/DataSources/DnsmasqSource.cpp index 561e6c4..840bfc9 100644 --- a/DataSources/DnsmasqSource.cpp +++ b/DataSources/DnsmasqSource.cpp @@ -3,33 +3,21 @@ // #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::ifstream leases("/var/lib/misc/dnsmasq.leases"); std::string line; std::vector result; auto labels = std::array{ "time", "mac", "ip", "host", "id" }; - while(std::getline(_leases, line)) { + while(std::getline(leases, line)) { prometheus::Labels lineMap; - for(const auto [index, item]: std::views::split(line, ' ') | views::enumerate) { + for(const auto [index, item]: std::views::split(line, ' ') | std::views::enumerate) { lineMap[labels[index]] = std::string_view(item); } result.push_back(lineMap); diff --git a/DataSources/DnsmasqSource.h b/DataSources/DnsmasqSource.h index d2fc87e..5f34e04 100644 --- a/DataSources/DnsmasqSource.h +++ b/DataSources/DnsmasqSource.h @@ -10,18 +10,6 @@ #include class DnsmasqSource { -public: - enum LeaseField: int { - EXPIRY_TIME = 0, - MAC = 1, - IP = 2, - HOST = 3, - ID = 4 - }; - -private: - std::ifstream _leases; - public: DnsmasqSource(); std::vector readLeases(); diff --git a/main.cpp b/main.cpp index 9db103d..80d5450 100644 --- a/main.cpp +++ b/main.cpp @@ -24,7 +24,6 @@ int main() { std::this_thread::sleep_for(std::chrono::seconds(1)); for(const auto& leaseLabels: dnsmasq.readLeases()) { gouge.Add(leaseLabels).Set(1); - std::cout << "mac: " << leaseLabels.at("mac") << std::endl; } }