Adding -x option which allows user to specify a threshold and check if atleast those many hosts are active

pull/138/head
deepak0004 6 years ago
parent 180c6dd8d0
commit 7338b4b859

@ -225,6 +225,10 @@ Show targets that are unreachable.
Print B<fping> version information. Print B<fping> version information.
=item B<-x>, B<--reachable>=I<N>
Given a list of hosts, this mode prints if number of active hosts>=N or not.
=back =back
=head1 EXAMPLES =head1 EXAMPLES

@ -239,7 +239,7 @@ int socket6 = -1;
int hints_ai_family = AF_UNSPEC; int hints_ai_family = AF_UNSPEC;
#endif #endif
unsigned int debugging = 0; unsigned int debugging = 1;
/* times get *100 because all times are calculated in 10 usec units, not ms */ /* times get *100 because all times are calculated in 10 usec units, not ms */
unsigned int retry = DEFAULT_RETRY; unsigned int retry = DEFAULT_RETRY;
@ -248,7 +248,7 @@ unsigned int interval = DEFAULT_INTERVAL * 100;
unsigned int perhost_interval = DEFAULT_PERHOST_INTERVAL * 100; unsigned int perhost_interval = DEFAULT_PERHOST_INTERVAL * 100;
float backoff = DEFAULT_BACKOFF_FACTOR; float backoff = DEFAULT_BACKOFF_FACTOR;
unsigned int ping_data_size = DEFAULT_PING_DATA_SIZE; unsigned int ping_data_size = DEFAULT_PING_DATA_SIZE;
unsigned int count = 1; unsigned int count = 1, reachable = 1;
unsigned int trials; unsigned int trials;
unsigned int report_interval = 0; unsigned int report_interval = 0;
unsigned int ttl = 0; unsigned int ttl = 0;
@ -285,7 +285,7 @@ struct timezone tz;
/* switches */ /* switches */
int generate_flag = 0; /* flag for IP list generation */ int generate_flag = 0; /* flag for IP list generation */
int verbose_flag, quiet_flag, stats_flag, unreachable_flag, alive_flag; int verbose_flag, quiet_flag, stats_flag, unreachable_flag, alive_flag;
int elapsed_flag, version_flag, count_flag, loop_flag, netdata_flag; int elapsed_flag, version_flag, count_flag, loop_flag, netdata_flag, reachable_flag;
int per_recv_flag, report_all_rtts_flag, name_flag, addr_flag, backoff_flag, rdns_flag; int per_recv_flag, report_all_rtts_flag, name_flag, addr_flag, backoff_flag, rdns_flag;
int multif_flag, timeout_flag; int multif_flag, timeout_flag;
int outage_flag = 0; int outage_flag = 0;
@ -414,6 +414,7 @@ int main(int argc, char** argv)
{ NULL, 'T', OPTPARSE_REQUIRED }, { NULL, 'T', OPTPARSE_REQUIRED },
{ "unreach", 'u', OPTPARSE_NONE }, { "unreach", 'u', OPTPARSE_NONE },
{ "version", 'v', OPTPARSE_NONE }, { "version", 'v', OPTPARSE_NONE },
{ "reachable", 'x', OPTPARSE_REQUIRED },
{ 0, 0, 0 } { 0, 0, 0 }
}; };
@ -604,6 +605,12 @@ int main(int argc, char** argv)
printf("%s: comments to %s\n", prog, EMAIL); printf("%s: comments to %s\n", prog, EMAIL);
exit(0); exit(0);
case 'x':
if (!(reachable = (unsigned int)atoi(optparse_state.optarg)))
usage(1);
reachable_flag = 1;
break;
case 'f': case 'f':
filename = optparse_state.optarg; filename = optparse_state.optarg;
break; break;
@ -732,7 +739,7 @@ int main(int argc, char** argv)
exit(1); exit(1);
} }
if (alive_flag || unreachable_flag) if (alive_flag || unreachable_flag || reachable_flag)
verbose_flag = 0; verbose_flag = 0;
if (count_flag) { if (count_flag) {
@ -812,6 +819,8 @@ int main(int argc, char** argv)
fprintf(stderr, " unreachable_flag set\n"); fprintf(stderr, " unreachable_flag set\n");
if (alive_flag) if (alive_flag)
fprintf(stderr, " alive_flag set\n"); fprintf(stderr, " alive_flag set\n");
if (reachable_flag)
fprintf(stderr, " reachable_flag set\n");
if (elapsed_flag) if (elapsed_flag)
fprintf(stderr, " elapsed_flag set\n"); fprintf(stderr, " elapsed_flag set\n");
if (version_flag) if (version_flag)
@ -1272,6 +1281,13 @@ void main_loop()
timeval_add(&next_report_time, report_interval); timeval_add(&next_report_time, report_interval);
} }
} }
if (reachable_flag) {
if ((num_hosts-num_unreachable >= reachable)) {
printf(">=%d hosts are reachable\n", reachable);
} else {
printf("<%d hosts are reachable\n", reachable);
}
}
} }
/************************************************************ /************************************************************
@ -2767,5 +2783,6 @@ void usage(int is_error)
fprintf(out, " -s, --stats print final stats\n"); fprintf(out, " -s, --stats print final stats\n");
fprintf(out, " -u, --unreach show targets that are unreachable\n"); fprintf(out, " -u, --unreach show targets that are unreachable\n");
fprintf(out, " -v, --version show version\n"); fprintf(out, " -v, --version show version\n");
fprintf(out, " -x, --reachable=N shows if >=N hosts are reachable or not\n");
exit(is_error); exit(is_error);
} }
Loading…
Cancel
Save