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:
| M | heartbeat.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 {