ping_tool: Erreichbarkeiten und Paketverluste in einer Datenbank sammeln

Um Verbindungsprobleme meines Internetanschlusses besser analysieren zu können, suchte ich nach einem Tool, das Latenzen und Paketverlustraten zu mehreren Hosts sammeln kann. Die verschiedenen Hosts sollten in meinem Fall alle Hops auf meiner Route zu Google sein, um sehen zu können, wo die Verbindungsprobleme auftreten. Nach kurzer, erfolgloser Suche schrieb ich selbst ein Tool, dass ping benutzt und ermittelte Werte in einer MySQL-Datenbank zusammenträgt. Welche Hosts überwacht und in welche Datenbank Ergebnisse eingetragen werden sollen, wird über eine XML-Datei konfiguriert. Das Tool ist sehr mit der heißen Nadel gestrickt und muss bei einer Verwendung außerhalb von GNU/Linux vermutlich angepasst werden. Der Code ist mit ca. 100 Zeilen aber auch noch recht übersichtlich: ping_tool.cpp

Zum Bauen werden neben einem C++11-fähigen Compiler die Boost- und die MySQL++-Library benötigt. Auf Debian-basierten Systemen können die Abhängigkeiten leicht über die Paketverwaltung installiert werden.

# apt-get install build-essential libboost-all-dev libmysql++-dev

Ein minimales Makefile baut aus dem Sourcecode das Programm. Gegebenenfalls müssen die Pfade angepasst werden.

CPPFLAGS := -std=c++0x -pthread -I/usr/include/mysql -I/usr/include/mysql++
LDLIBS   := -lmysqlpp -lmysqlclient_r

all: ping_tool

Zur Konfiguration erwartet das Programm eine XML-Datei als erstes Argument.

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <me>myhostname</me>
    <hosts>
        <host>first.com</host>
        <host>second.com</host>
        <!-- ... -->
    </hosts>
    <mysql>
        <database>mydatabase</database>
        <server>myserver.com</server>
        <user>myusername</user>
        <passwd>mypassword</passwd>
    </mysql>
</config>