Reopening leases file on every reading
This commit is contained in:
parent
db34e6c37a
commit
3a288fbf42
@ -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);
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user