aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--default_script4
-rw-r--r--foolsm.c85
-rw-r--r--foolsm.h2
-rw-r--r--foolsm.spec12
-rw-r--r--group_script2
5 files changed, 76 insertions, 29 deletions
diff --git a/default_script b/default_script
index 37daffe..e5e8bf3 100644
--- a/default_script
+++ b/default_script
@@ -26,6 +26,8 @@ AVG_RTT=${13}
SRCIP=${14}
PREVSTATE=${15}
TIMESTAMP=${16}
+MIN_RTT=${17}
+MAX_RTT=${18}
if [ -z "${WARN_EMAIL}" ] ; then
exit 0
@@ -59,7 +61,9 @@ reply_late = ${REPLY_LATE} packets that received a reply after timeout
cons_rcvd = ${CONS_RCVD} consecutively received replies in sequence
cons_wait = ${CONS_WAIT} consecutive packets waiting for reply
cons_miss = ${CONS_MISS} consecutive packets that have timed out
+min_rtt = ${MIN_RTT} [usec], from received packets
avg_rtt = ${AVG_RTT} average rtt [usec], calculated from received packets
+max_rtt = ${MAX_RTT} [usec], from received packets
BR,
Your Foolsm installation
diff --git a/foolsm.c b/foolsm.c
index 8d93b09..f03cd97 100644
--- a/foolsm.c
+++ b/foolsm.c
@@ -262,6 +262,8 @@ static void update_stats(CONFIG *first) {
t->consecutive_waiting = 0;
t->consecutive_missing = 0;
t->consecutive_rcvd = 0;
+ t->min_rtt = 0;
+ t->max_rtt = 0;
/* check consecutive pkts */
seq = t->seq % FOLLOWED_PKTS;
@@ -303,6 +305,9 @@ static void update_stats(CONFIG *first) {
if(t->sentpkts[i].flags.replied) {
t->replied++;
rtt += t->sentpkts[i].rtt; /* count rtt sum in usec from replied pkts rtt which is in usec */
+
+ if(t->min_rtt == 0 || t->min_rtt > t->sentpkts[i].rtt) t->min_rtt = t->sentpkts[i].rtt;
+ if(t->max_rtt < t->sentpkts[i].rtt) t->max_rtt = t->sentpkts[i].rtt;
}
if(t->sentpkts[i].flags.timeout) t->timeout++;
if(t->sentpkts[i].flags.waiting) t->waiting++;
@@ -314,8 +319,8 @@ static void update_stats(CONFIG *first) {
if(t->timeout > t->timeout_max) t->timeout_max = t->timeout;
if(t->consecutive_missing > t->consecutive_missing_max) t->consecutive_missing_max = t->consecutive_missing;
- if(cfg.debug >= 9) syslog(LOG_INFO, "name = %s, replied = %d, waiting = %d, timeout = %d, late reply = %d, cons rcvd = %d, cons wait = %d, cons miss = %d, avg_rtt = %.3f, seq = %d, status = %s",
- cur->name, t->replied, t->waiting, t->timeout, t->reply_late, t->consecutive_rcvd, t->consecutive_waiting, t->consecutive_missing, t->avg_rtt / 1000.0, t->seq, get_status_str(t->status));
+ if(cfg.debug >= 9) syslog(LOG_INFO, "name = %s, replied = %d, waiting = %d, timeout = %d, late reply = %d, cons rcvd = %d, cons wait = %d, cons miss = %d, min_rtt = %.3f, avg_rtt = %.3f, max_rtt = %.03f, seq = %d, status = %s",
+ cur->name, t->replied, t->waiting, t->timeout, t->reply_late, t->consecutive_rcvd, t->consecutive_waiting, t->consecutive_missing, t->min_rtt / 1000.0, t->avg_rtt / 1000.0, t->max_rtt / 1000.0, t->seq, get_status_str(t->status));
}
}
@@ -332,8 +337,8 @@ static void dump_statuses(CONFIG *first) {
/* dump is controlled by SIGUSR1 and then we should show all statuses anyway */
if(get_dump() || t->status_change || ((t->status == DOWN || t->status == LONG_DOWN) && t->downseq == (t->seq % FOLLOWED_PKTS) && t->seq != t->downseqreported && !t->status_change)) {
- if(cfg.debug >= 6) syslog(LOG_INFO, "name = %s, replied = %d, waiting = %d, timeout = %d, timeout max = %d, late reply = %d, cons rcvd = %d, cons wait = %d, cons miss = %d, cons miss max = %d, avg_rtt = %.3f, seq = %d, status = %s",
- cur->name, t->replied, t->waiting, t->timeout, t->timeout_max, t->reply_late, t->consecutive_rcvd, t->consecutive_waiting, t->consecutive_missing, t->consecutive_missing_max, t->avg_rtt / 1000.0, t->seq, get_status_str(t->status));
+ if(cfg.debug >= 6) syslog(LOG_INFO, "name = %s, replied = %d, waiting = %d, timeout = %d, timeout max = %d, late reply = %d, cons rcvd = %d, cons wait = %d, cons miss = %d, cons miss max = %d, min_rtt = %.3f, avg_rtt = %.3f, max_rtt = %.03f, seq = %d, status = %s",
+ cur->name, t->replied, t->waiting, t->timeout, t->timeout_max, t->reply_late, t->consecutive_rcvd, t->consecutive_waiting, t->consecutive_missing, t->consecutive_missing_max, t->min_rtt / 1000.0, t->avg_rtt / 1000.0, t->max_rtt / 1000.0, t->seq, get_status_str(t->status));
if(cfg.debug >= 7) {
/* 100 should be enough for the comments and such, but I don't care to count */
@@ -425,7 +430,7 @@ static void decide(CONFIG *first) {
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
cur->eventscript,
get_status_str(t->status),
cur->name,
@@ -442,7 +447,9 @@ static void decide(CONFIG *first) {
t->avg_rtt,
cur->dstinfo->ai_family == AF_INET ? inet_ntoa(t->src) : inet_ntop(AF_INET6, &t->src6, sbuf, INET6_ADDRSTRLEN),
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ t->min_rtt,
+ t->max_rtt);
envp = exec_queue_envp();
if(cur->queue && *cur->queue) {
@@ -460,7 +467,7 @@ static void decide(CONFIG *first) {
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
cur->notifyscript,
get_status_str(t->status),
cur->name,
@@ -477,7 +484,9 @@ static void decide(CONFIG *first) {
t->avg_rtt,
cur->dstinfo->ai_family == AF_INET ? inet_ntoa(t->src) : inet_ntop(AF_INET6, &t->src6, sbuf, INET6_ADDRSTRLEN),
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ t->min_rtt,
+ t->max_rtt);
envp = exec_queue_envp();
@@ -507,7 +516,7 @@ static void decide(CONFIG *first) {
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
cur->long_down_eventscript,
get_status_str(t->status),
cur->name,
@@ -524,7 +533,9 @@ static void decide(CONFIG *first) {
t->avg_rtt,
cur->dstinfo->ai_family == AF_INET ? inet_ntoa(t->src) : inet_ntop(AF_INET6, &t->src6, sbuf, INET6_ADDRSTRLEN),
get_status_str(prevstatus),
- t->down_timestamp.tv_sec);
+ t->down_timestamp.tv_sec,
+ t->min_rtt,
+ t->max_rtt);
envp = exec_queue_envp();
@@ -543,7 +554,7 @@ static void decide(CONFIG *first) {
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
cur->long_down_notifyscript,
get_status_str(t->status),
cur->name,
@@ -560,7 +571,9 @@ static void decide(CONFIG *first) {
t->avg_rtt,
cur->dstinfo->ai_family == AF_INET ? inet_ntoa(t->src) : inet_ntop(AF_INET6, &t->src6, sbuf, INET6_ADDRSTRLEN),
get_status_str(prevstatus),
- t->down_timestamp.tv_sec);
+ t->down_timestamp.tv_sec,
+ t->min_rtt,
+ t->max_rtt);
envp = exec_queue_envp();
@@ -590,7 +603,7 @@ static void decide(CONFIG *first) {
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
cur->long_down_eventscript,
get_status_str(t->status),
cur->name,
@@ -607,7 +620,9 @@ static void decide(CONFIG *first) {
t->avg_rtt,
cur->dstinfo->ai_family == AF_INET ? inet_ntoa(t->src) : inet_ntop(AF_INET6, &t->src6, sbuf, INET6_ADDRSTRLEN),
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ t->min_rtt,
+ t->max_rtt);
envp = exec_queue_envp();
@@ -626,7 +641,7 @@ static void decide(CONFIG *first) {
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
cur->long_down_notifyscript,
get_status_str(t->status),
cur->name,
@@ -643,7 +658,9 @@ static void decide(CONFIG *first) {
t->avg_rtt,
cur->dstinfo->ai_family == AF_INET ? inet_ntoa(t->src) : inet_ntop(AF_INET6, &t->src6, sbuf, INET6_ADDRSTRLEN),
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ t->min_rtt,
+ t->max_rtt);
envp = exec_queue_envp();
@@ -661,7 +678,7 @@ static void decide(CONFIG *first) {
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
cur->eventscript,
get_status_str(t->status),
cur->name,
@@ -678,7 +695,9 @@ static void decide(CONFIG *first) {
t->avg_rtt,
cur->dstinfo->ai_family == AF_INET ? inet_ntoa(t->src) : inet_ntop(AF_INET6, &t->src6, sbuf, INET6_ADDRSTRLEN),
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ t->min_rtt,
+ t->max_rtt);
envp = exec_queue_envp();
@@ -697,7 +716,7 @@ static void decide(CONFIG *first) {
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
cur->notifyscript,
get_status_str(t->status),
cur->name,
@@ -714,7 +733,9 @@ static void decide(CONFIG *first) {
t->avg_rtt,
cur->dstinfo->ai_family == AF_INET ? inet_ntoa(t->src) : inet_ntop(AF_INET6, &t->src6, sbuf, INET6_ADDRSTRLEN),
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ t->min_rtt,
+ t->max_rtt);
envp = exec_queue_envp();
@@ -770,7 +791,7 @@ static void groups_decide(GROUPS *firstg){
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
curg->eventscript,
get_status_str(curg->status),
curg->name,
@@ -787,7 +808,9 @@ static void groups_decide(GROUPS *firstg){
0,
"",
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ 0,
+ 0);
envp = exec_queue_envp();
if(curg->queue && *curg->queue) {
@@ -803,7 +826,7 @@ static void groups_decide(GROUPS *firstg){
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
curg->notifyscript,
get_status_str(curg->status),
curg->name,
@@ -820,7 +843,9 @@ static void groups_decide(GROUPS *firstg){
0,
"",
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ 0,
+ 0);
envp = exec_queue_envp();
forkexec(argv, envp);
@@ -837,7 +862,7 @@ static void groups_decide(GROUPS *firstg){
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
curg->eventscript,
get_status_str(curg->status),
curg->name,
@@ -854,7 +879,9 @@ static void groups_decide(GROUPS *firstg){
0,
"",
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ 0,
+ 0);
envp = exec_queue_envp();
if(curg->queue && *curg->queue) {
@@ -870,7 +897,7 @@ static void groups_decide(GROUPS *firstg){
char **argv;
char **envp;
- argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d",
+ argv = exec_queue_argv("%s %s %s %s %s %s %d %d %d %d %d %d %d %d %s %s %d %d %d",
curg->notifyscript,
get_status_str(curg->status),
curg->name,
@@ -887,7 +914,9 @@ static void groups_decide(GROUPS *firstg){
0,
"",
get_status_str(prevstatus),
- current_time.tv_sec);
+ current_time.tv_sec,
+ 0,
+ 0);
envp = exec_queue_envp();
forkexec(argv, envp);
diff --git a/foolsm.h b/foolsm.h
index 4a50ad9..5d98154 100644
--- a/foolsm.h
+++ b/foolsm.h
@@ -63,7 +63,9 @@ typedef struct target {
int consecutive_missing;
int consecutive_missing_max;
int consecutive_rcvd;
+ long min_rtt;
long avg_rtt;
+ long max_rtt;
int status_change;
} TARGET;
diff --git a/foolsm.spec b/foolsm.spec
index 70a2f89..b127834 100644
--- a/foolsm.spec
+++ b/foolsm.spec
@@ -2,7 +2,7 @@
Summary: The Foobar Link Status Monitor
Name: foolsm
-Version: 1.0.18
+Version: 1.0.21
Release: 1%{?dist}
License: GPLv2
URL: https://lsm.foobar.fi/
@@ -78,6 +78,16 @@ install -m0644 foolsm.service %{buildroot}%{_unitdir}/
%{_datadir}/munin/plugins/foolsm_
%changelog
+* Wed Aug 18 2021 Mika Ilmaranta <ilmis@nullnet.fi> - 1.0.21-1
+- ensure sane value for connection min_rtt
+
+* Wed Aug 18 2021 Mika Ilmaranta <ilmis@nullnet.fi> - 1.0.20-1
+- fixed comparison logic error
+
+* Mon Aug 16 2021 Mika Ilmaranta <ilmis@nullnet.fi> - 1.0.19-1
+- added min & max rtt. making them the last parameters scripts get to not
+ break old user scripts
+
* Mon Jul 19 2021 Mika Ilmaranta <ilmis@nullnet.fi> - 1.0.18-1
- fixed compile time warnings with el8 compiler
diff --git a/group_script b/group_script
index b72d151..033fc64 100644
--- a/group_script
+++ b/group_script
@@ -25,6 +25,8 @@ AVG_RTT=${13}
SRCIP=${14}
PREVSTATE=${15}
TIMESTAMP=${16}
+MIN_RTT=${17}
+MAX_RTT=${18}
if [ -z "${WARN_EMAIL}" ] ; then
exit 0