heartbeat

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

commit a2fd768907b0ada2f5a93e887624d06d4e46a8ef
parent c3d5a7cb79a73c1349b83e6c75014c28443cf1a9
Author: Remy Noulin <loader2x@gmail.com>
Date:   Fri,  7 Jul 2023 20:58:34 +0200

record events only on disk (not all messages)

heartbeat.c | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)

Diffstat:
Mheartbeat.c | 25+++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/heartbeat.c b/heartbeat.c @@ -514,13 +514,14 @@ void probe(char *cfgfile) { else { // this is the logger // write messages directly - record.m = msg; - record.time = getCurrentUnixTime(); - write(agentf[id], &record, sizeof(record)); + bool saveEvent = no; + record.m = msg; + record.time = getCurrentUnixTime(); cleanFinishSmallDictP(logAgent) = getG(completeCfg, rtSmallDictt, name); setG(logAgent, "time", getCurrentUnixTime()); char *newstate = messageId ? "alive" : "init"; if (!eqG($(logAgent, "state"), newstate)) { + saveEvent = yes; /* logD("%s is %s, previous state was %s", */ /* name#<{(|agent name|)}>#, */ /* newstate, */ @@ -537,6 +538,7 @@ void probe(char *cfgfile) { cast(smallDictt*,p,P); bool newstate = msg.status & (1UL << iI(probes)); if (getG(p, rtBool, "state") != newstate) { + saveEvent = yes; setG(p, "state", newstate); setG(p, "last", getCurrentUnixTime()); // send mail when service is down @@ -561,6 +563,10 @@ void probe(char *cfgfile) { } } // if probes + if (saveEvent) { + write(agentf[id], &record, sizeof(record)); + } + // set remote agents down if there hasn't been a message in a while iter(completeCfg, D) { if (!isOSmallDict(D)) continue; @@ -615,9 +621,9 @@ void probe(char *cfgfile) { logE("Invalid id, the logger doesn't send packets"); } else { - record.m = *m; - record.time = getCurrentUnixTime(); - write(agentf[m->id], &record, sizeof(record)); + bool saveEvent = no; + record.m = *m; + record.time = getCurrentUnixTime(); cleanAllocateSmallArray(mailMsg); @@ -626,6 +632,7 @@ void probe(char *cfgfile) { setG(agent, "time", getCurrentUnixTime()); char *newstate = m->messageId ? "alive" : "init"; if (!eqG($(agent, "state"), newstate)) { + saveEvent = yes; if (eqG($(agent, "state"), "alive")) { setG(agent, "rebooted", TRUE); setG(agent, "lastBoot", getCurrentUnixTime()); @@ -638,6 +645,7 @@ void probe(char *cfgfile) { setG(agent, "last", getCurrentUnixTime()); } if (m->messageId < u$(agent,"mId")) { + saveEvent = yes; setG(agent, "rebooted", TRUE); setG(agent, "lastBoot", getCurrentUnixTime()); // send mail when agent rebooted @@ -652,6 +660,7 @@ void probe(char *cfgfile) { cast(smallDictt*,p,P); bool newstate = m->status & (1UL << iI(probes)); if (getG(p, rtBool, "state") != newstate) { + saveEvent = yes; setG(p, "state", newstate); setG(p, "last", getCurrentUnixTime()); // send mail when service is down @@ -676,6 +685,10 @@ void probe(char *cfgfile) { } } // if probes + if (saveEvent) { + write(agentf[m->id], &record, sizeof(record)); + } + // send mail if (lenG(mailMsg)) { pError0(writeFileG(mailMsg, "mail.txt"));