Compare commits

..

1 Commits

Author SHA1 Message Date
3a288fbf42 Reopening leases file on every reading 2024-01-04 15:44:45 +03:00
3 changed files with 3 additions and 28 deletions

View File

@ -3,33 +3,21 @@
//
#include "DnsmasqSource.h"
#include <exception>
#include <sstream>
#include <iostream>
#include <ranges>
#include <array>
#include <algorithm>
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<prometheus::Labels> DnsmasqSource::readLeases() {
_leases.clear();
_leases.seekg(0);
std::ifstream leases("/var/lib/misc/dnsmasq.leases");
std::string line;
std::vector<prometheus::Labels> 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);

View File

@ -10,18 +10,6 @@
#include <vector>
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<prometheus::Labels> readLeases();

View File

@ -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;
}
}