heartbeat

Simple server monitor system using encrypted messages over udp
git clone https://noulin.net/git/heartbeat.git
Log | Files | Refs | README

commit 6563aef02d892af9d9bf068d07010958f22ae49d
parent 9a1799ba1c17cb3c95cdfb4aaee3ccb9c296d46e
Author: Remy Noulin <loader2x@gmail.com>
Date:   Sat,  8 Jul 2023 07:09:20 +0200

send data to monitor

heartbeat.c | 60 ++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 38 insertions(+), 22 deletions(-)

Diffstat:
Mheartbeat.c | 60++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 38 insertions(+), 22 deletions(-)

diff --git a/heartbeat.c b/heartbeat.c @@ -281,6 +281,7 @@ void probe(char *cfgfile) { // get port and agent name // setup agent // setup logger + // create client socket // create socket for brigde (only if not logger) // start server or bridge for the agents // message structures @@ -331,9 +332,12 @@ void probe(char *cfgfile) { u32 id = u$(agent, "id"); bool logger = hasG(agent, "logger"); - // when dst is null, it is the logger - char *dst = $(agent, "bridge"); - if (!dst and not logger) { + if (logger) { + // set monitor port + port = u$(agent, "monitorPort"); + } + char *dst = logger ? "localhost" /*TODO add monitorIp*/ : $(agent, "bridge"); + if (!dst) { logE("Missing bridge address."); XFailure; } @@ -419,31 +423,31 @@ void probe(char *cfgfile) { } - // create socket for brigde (only if not logger) + // create client socket + // sock is client socket or monitor socket on logger int sock = -1; struct sockaddr_in server; struct hostent *hp; - if (not logger) { - sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - if (sock < 0) { - logE("Failed to create socket: %s", strerror(errno)); - XFailure; - } - - server.sin_family = AF_INET; + sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + if (sock < 0) { + logE("Failed to create socket: %s", strerror(errno)); + XFailure; + } - hp = gethostbyname(dst); - if (hp==0) { - logE("gethostbyname failed: %s", strerror(errno)); - close(sock); - XFailure; - } + server.sin_family = AF_INET; - memcpy(&server.sin_addr, hp->h_addr, hp->h_length); - server.sin_port = htons(port); + hp = gethostbyname(dst); + if (hp==0) { + logE("gethostbyname failed: %s", strerror(errno)); + close(sock); + XFailure; } + memcpy(&server.sin_addr, hp->h_addr, hp->h_length); + server.sin_port = htons(port); + + // create socket for brigde (only if not logger) // start server or bridge for the agents int bridgesock; struct sockaddr_in bridge; @@ -616,8 +620,14 @@ void probe(char *cfgfile) { sendMail(mutt); } - // TODO send to monitor + // send to monitor //lv(completeCfg); + cleanCharP(monitorData) = toStringG(completeCfg); + if (sendto(sock, monitorData, lenG(monitorData)+1, 0, (const struct sockaddr *)&server, sizeof(server)) < 0) { + logE("send failed: %s", strerror(errno)); + close(sock); + XFailure; + } } // bridge messages from others @@ -735,8 +745,14 @@ void probe(char *cfgfile) { sendMail(mutt); } - // TODO send to monitor + // send to monitor //lv(completeCfg); + cleanCharP(monitorData) = toStringG(completeCfg); + if (sendto(sock, monitorData, lenG(monitorData)+1, 0, (const struct sockaddr *)&server, sizeof(server)) < 0) { + logE("send failed: %s", strerror(errno)); + close(sock); + XFailure; + } } } else {