/* check_dircount.c check number of entries in a directory for monitoring spool directories by Doke Scott, doke at udel.edu, 12 Sep 2003 */ #include #include #include #include #include int verbose = 0; char *program_name; char *crit_range = "20000"; char *warn_range = "10000"; void usage( int rc ) { fprintf( stderr, "Usage: %s [-v] [-c range] [-w range] \n" " -v verbose\n" " -c range critical if outside range, default 20000\n" " -w range critical if outside range, default 10000\n" " range is 200:1000, :1000, 200:, 1000, inclusive\n", program_name ); exit( rc ); } int in_range( int count, char *range ) { int l = 0, h = 0; if ( strchr( range, ':' ) ) { if ( sscanf( range, "%u:%u", &l, &h ) == 2 ) { //printf( "count %d, l %d, h %d\n", count, l, h ); if ( count < l || h < count ) return 0; return 1; } else if ( sscanf( range, ":%u", &h ) == 1 ) { //printf( "count %d, l %d, h %d\n", count, l, h ); if ( h < count ) return 0; return 1; } else if ( sscanf( range, "%u:", &l ) == 1 ) { //printf( "count %d, l %d, h %d\n", count, l, h ); if ( count < l ) return 0; return 1; } } else if ( sscanf( range, "%u", &h ) == 1 ) { //printf( "count %d, l %d, h %d\n", count, l, h ); if ( h < count ) return 0; return 1; } fprintf( stderr, "cannot parse range '%s'\n", range ); usage( -1 ); } int main( int argc, char **argv ) { char *dirname; DIR *dirp; int c, count, rc; program_name = argv[0]; while ( ( c = getopt( argc, argv, "vc:w:" ) ) >= 0 ) { switch ( c ) { case 'v': verbose++; break; case 'c': crit_range = optarg; break; case 'w': warn_range = optarg; break; default: usage( -1 ); break; } } if ( optind >= argc || ! argv[ optind ] ) usage( -1 ); dirname = argv[ optind ]; dirp = opendir( dirname ); if ( ! dirp ) { fprintf( stderr, "can't open directory %s: %s\n", dirname, strerror( errno ) ); exit( -1 ); } count = 0; while ( readdir( dirp ) ) { count++; } closedir( dirp ); count -= 2; // . and .. if ( ! in_range( count, crit_range ) ) { printf( "CRITICAL" ); rc = 2; } else if ( ! in_range( count, warn_range ) ) { printf( "Warning" ); rc = 1; } else { printf( "OK" ); rc = 0; } printf( ": %d files in %s\n", count, dirname ); return rc; }