diff options
-rw-r--r-- | THANKS.in | 1 | ||||
-rw-r--r-- | plugins/check_nwstat.c | 53 |
2 files changed, 54 insertions, 0 deletions
@@ -406,6 +406,7 @@ Wolfgang Nieder | |||
406 | andrew bezella | 406 | andrew bezella |
407 | Lorenz Gruenwald | 407 | Lorenz Gruenwald |
408 | John Morrissey | 408 | John Morrissey |
409 | Ralph Gottschalkson | ||
409 | Arkadiusz Miśkiewicz | 410 | Arkadiusz Miśkiewicz |
410 | Björn Berg | 411 | Björn Berg |
411 | Franz Schwartau | 412 | Franz Schwartau |
diff --git a/plugins/check_nwstat.c b/plugins/check_nwstat.c index 12a729e0..10c493b6 100644 --- a/plugins/check_nwstat.c +++ b/plugins/check_nwstat.c | |||
@@ -46,6 +46,7 @@ enum checkvar { | |||
46 | VPF, /* check % free space on volume */ | 46 | VPF, /* check % free space on volume */ |
47 | VMF, /* check MB free space on volume */ | 47 | VMF, /* check MB free space on volume */ |
48 | VMU, /* check MB used space on volume */ | 48 | VMU, /* check MB used space on volume */ |
49 | VPU, /* check % used space on volume */ | ||
49 | VMP, /* check MB purgeable space on volume */ | 50 | VMP, /* check MB purgeable space on volume */ |
50 | VKF, /* check KB free space on volume */ | 51 | VKF, /* check KB free space on volume */ |
51 | LTCH, /* check long-term cache hit percentage */ | 52 | LTCH, /* check long-term cache hit percentage */ |
@@ -146,6 +147,8 @@ main(int argc, char **argv) { | |||
146 | unsigned long nss6_value=0L; | 147 | unsigned long nss6_value=0L; |
147 | unsigned long nss7_value=0L; | 148 | unsigned long nss7_value=0L; |
148 | unsigned long total_disk_space=0L; | 149 | unsigned long total_disk_space=0L; |
150 | unsigned long used_disk_space=0L; | ||
151 | unsigned long percent_used_disk_space=0L; | ||
149 | unsigned long purgeable_disk_space=0L; | 152 | unsigned long purgeable_disk_space=0L; |
150 | unsigned long non_purgeable_disk_space=0L; | 153 | unsigned long non_purgeable_disk_space=0L; |
151 | unsigned long percent_free_space=0; | 154 | unsigned long percent_free_space=0; |
@@ -452,7 +455,50 @@ main(int argc, char **argv) { | |||
452 | warning_value, | 455 | warning_value, |
453 | critical_value); | 456 | critical_value); |
454 | } | 457 | } |
458 | /* check % used space on volume */ | ||
459 | } else if (vars_to_check==VPU) { | ||
460 | close(sd); | ||
461 | my_tcp_connect (server_address, server_port, &sd); | ||
462 | |||
463 | asprintf (&send_buffer,"VMU%s\r\n",volume_name); | ||
464 | result=send_tcp_request(sd,send_buffer,recv_buffer,sizeof(recv_buffer)); | ||
465 | |||
466 | if (result!=STATE_OK) | ||
467 | return result; | ||
468 | |||
469 | if (!strcmp(recv_buffer,"-1\n")) { | ||
470 | asprintf (&output_message,_("CRITICAL - Volume '%s' does not exist!"),volume_name); | ||
471 | result=STATE_CRITICAL; | ||
472 | |||
473 | } else { | ||
474 | used_disk_space=strtoul(recv_buffer,NULL,10); | ||
475 | close(sd); | ||
476 | my_tcp_connect (server_address, server_port, &sd); | ||
477 | /* get total volume in MB */ | ||
478 | asprintf (&send_buffer,"VMS%s\r\n",volume_name); | ||
479 | result=send_tcp_request(sd,send_buffer,recv_buffer,sizeof(recv_buffer)); | ||
480 | if (result!=STATE_OK) | ||
481 | return result; | ||
482 | total_disk_space=strtoul(recv_buffer,NULL,10); | ||
483 | /* calculate percent used on volume */ | ||
484 | percent_used_disk_space=(unsigned long)(((double)used_disk_space/(double)total_disk_space)*100.0); | ||
455 | 485 | ||
486 | if (check_critical_value && percent_used_disk_space >= critical_value) | ||
487 | result=STATE_CRITICAL; | ||
488 | else if (check_warning_value && percent_used_disk_space >= warning_value) | ||
489 | result=STATE_WARNING; | ||
490 | |||
491 | asprintf (&output_message,_("%lu MB (%lu%%) used on volume %s - total %lu MB|Used space in percent on %s=%lu;%lu;%lu;0;100"), | ||
492 | used_disk_space, | ||
493 | percent_used_disk_space, | ||
494 | volume_name, | ||
495 | total_disk_space, | ||
496 | volume_name, | ||
497 | percent_used_disk_space, | ||
498 | warning_value, | ||
499 | critical_value | ||
500 | ); | ||
501 | } | ||
456 | 502 | ||
457 | /* check % free space on volume */ | 503 | /* check % free space on volume */ |
458 | } else if (vars_to_check==VPF) { | 504 | } else if (vars_to_check==VPF) { |
@@ -1450,6 +1496,12 @@ int process_arguments(int argc, char **argv) { | |||
1450 | if (!strcmp(volume_name,"")) | 1496 | if (!strcmp(volume_name,"")) |
1451 | volume_name = strdup ("SYS"); | 1497 | volume_name = strdup ("SYS"); |
1452 | } | 1498 | } |
1499 | else if (strncmp(optarg,"VPU",3)==0) { | ||
1500 | vars_to_check=VPU; | ||
1501 | volume_name = strdup (optarg+3); | ||
1502 | if (!strcmp(volume_name,"")) | ||
1503 | volume_name = strdup ("SYS"); | ||
1504 | } | ||
1453 | else if (strncmp(optarg,"VPP",3)==0) { | 1505 | else if (strncmp(optarg,"VPP",3)==0) { |
1454 | vars_to_check=VPP; | 1506 | vars_to_check=VPP; |
1455 | volume_name = strdup (optarg+3); | 1507 | volume_name = strdup (optarg+3); |
@@ -1626,6 +1678,7 @@ void print_help(void) | |||
1626 | printf (" %s\n", _("OFILES = number of open files")); | 1678 | printf (" %s\n", _("OFILES = number of open files")); |
1627 | printf (" %s\n", _(" VMF<vol> = MB of free space on Volume <vol>")); | 1679 | printf (" %s\n", _(" VMF<vol> = MB of free space on Volume <vol>")); |
1628 | printf (" %s\n", _(" VMU<vol> = MB used space on Volume <vol>")); | 1680 | printf (" %s\n", _(" VMU<vol> = MB used space on Volume <vol>")); |
1681 | printf (" %s\n", _(" VPU<vol> = percent used space on Volume <vol>")); | ||
1629 | printf (" %s\n", _(" VMP<vol> = MB of purgeable space on Volume <vol>")); | 1682 | printf (" %s\n", _(" VMP<vol> = MB of purgeable space on Volume <vol>")); |
1630 | printf (" %s\n", _(" VPF<vol> = percent free space on volume <vol>")); | 1683 | printf (" %s\n", _(" VPF<vol> = percent free space on volume <vol>")); |
1631 | printf (" %s\n", _(" VKF<vol> = KB of free space on volume <vol>")); | 1684 | printf (" %s\n", _(" VKF<vol> = KB of free space on volume <vol>")); |