Compare commits

..

No commits in common. "master" and "v0.1" have entirely different histories.
master ... v0.1

3 changed files with 26 additions and 13 deletions

View File

@ -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 23) set(CMAKE_CXX_STANDARD 20)
find_package(prometheus-cpp CONFIG REQUIRED) find_package(prometheus-cpp CONFIG REQUIRED)
@ -9,4 +9,3 @@ add_executable(aliencat_exporter main.cpp
DataSources/DnsmasqSource.cpp DataSources/DnsmasqSource.cpp
DataSources/DnsmasqSource.h) DataSources/DnsmasqSource.h)
target_link_libraries(aliencat_exporter PRIVATE prometheus-cpp::pull) target_link_libraries(aliencat_exporter PRIVATE prometheus-cpp::pull)
install(TARGETS aliencat_exporter)

View File

@ -3,24 +3,35 @@
// //
#include "DnsmasqSource.h" #include "DnsmasqSource.h"
#include <exception>
#include <sstream> #include <sstream>
#include <ranges> #include <iostream>
DnsmasqSource::DnsmasqSource() { 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() { std::vector<prometheus::Labels> DnsmasqSource::readLeases() {
std::ifstream leases("/var/lib/misc/dnsmasq.leases"); _leases.clear();
std::string line; _leases.seekg(0);
std::vector<prometheus::Labels> result;
auto labels = std::array{ "time", "mac", "ip", "host", "id" };
while(std::getline(leases, line)) { std::string line, time, mac, ip, host, id;
prometheus::Labels lineMap; std::stringstream ss;
for(const auto [index, item]: std::views::split(line, ' ') | std::views::enumerate) { std::vector<prometheus::Labels> result;
lineMap[labels[index]] = std::string_view(item);
} while(std::getline(_leases, line)) {
result.push_back(lineMap); ss << line;
ss >> time >> mac >> ip >> host >> id;
result.push_back({
{"time", time},
{"mac", mac},
{"ip", ip},
{"host", host},
{"id", id}
});
} }
return result; return result;

View File

@ -10,6 +10,9 @@
#include <vector> #include <vector>
class DnsmasqSource { class DnsmasqSource {
private:
std::ifstream _leases;
public: public:
DnsmasqSource(); DnsmasqSource();
std::vector<prometheus::Labels> readLeases(); std::vector<prometheus::Labels> readLeases();