Fixed parsing dhcp leases
This commit is contained in:
parent
2c9466aea9
commit
db34e6c37a
@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.27)
|
cmake_minimum_required(VERSION 3.27)
|
||||||
project(aliencat_exporter)
|
project(aliencat_exporter)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
|
|
||||||
find_package(prometheus-cpp CONFIG REQUIRED)
|
find_package(prometheus-cpp CONFIG REQUIRED)
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,11 @@
|
|||||||
#include <exception>
|
#include <exception>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <ranges>
|
||||||
|
#include <array>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
namespace views = std::ranges::views;
|
||||||
|
|
||||||
DnsmasqSource::DnsmasqSource() {
|
DnsmasqSource::DnsmasqSource() {
|
||||||
_leases.open("/var/lib/misc/dnsmasq.leases");
|
_leases.open("/var/lib/misc/dnsmasq.leases");
|
||||||
@ -18,20 +23,16 @@ std::vector<prometheus::Labels> DnsmasqSource::readLeases() {
|
|||||||
_leases.clear();
|
_leases.clear();
|
||||||
_leases.seekg(0);
|
_leases.seekg(0);
|
||||||
|
|
||||||
std::string line, time, mac, ip, host, id;
|
std::string line;
|
||||||
std::stringstream ss;
|
|
||||||
std::vector<prometheus::Labels> result;
|
std::vector<prometheus::Labels> result;
|
||||||
|
auto labels = std::array{ "time", "mac", "ip", "host", "id" };
|
||||||
|
|
||||||
while(std::getline(_leases, line)) {
|
while(std::getline(_leases, line)) {
|
||||||
ss << line;
|
prometheus::Labels lineMap;
|
||||||
ss >> time >> mac >> ip >> host >> id;
|
for(const auto [index, item]: std::views::split(line, ' ') | views::enumerate) {
|
||||||
result.push_back({
|
lineMap[labels[index]] = std::string_view(item);
|
||||||
{"time", time},
|
}
|
||||||
{"mac", mac},
|
result.push_back(lineMap);
|
||||||
{"ip", ip},
|
|
||||||
{"host", host},
|
|
||||||
{"id", id}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@ -10,6 +10,15 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
class DnsmasqSource {
|
class DnsmasqSource {
|
||||||
|
public:
|
||||||
|
enum LeaseField: int {
|
||||||
|
EXPIRY_TIME = 0,
|
||||||
|
MAC = 1,
|
||||||
|
IP = 2,
|
||||||
|
HOST = 3,
|
||||||
|
ID = 4
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::ifstream _leases;
|
std::ifstream _leases;
|
||||||
|
|
||||||
|
|||||||
1
main.cpp
1
main.cpp
@ -24,6 +24,7 @@ int main() {
|
|||||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||||
for(const auto& leaseLabels: dnsmasq.readLeases()) {
|
for(const auto& leaseLabels: dnsmasq.readLeases()) {
|
||||||
gouge.Add(leaseLabels).Set(1);
|
gouge.Add(leaseLabels).Set(1);
|
||||||
|
std::cout << "mac: " << leaseLabels.at("mac") << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user