I personally faced this challenge myself and found that using the built-in function bpschedreq -predict or nbpemreq -predict was just not adequate. Not only was it cumbersome, I found that some of the time it did not even display jobs that I knew were going to run.
To resolve this issue, I wrote the nbpol script. This script when used will allow you to peer into a specific date and see what schedules will kick off and at what time. It also allows you to print out a histogram summarizing where your volume of jobs run. The syntax is as follows:
Usage: nbpol -y (year) -m (month) -d (day) -t (am|pm|all) (-graph)
Below is the actual perl code:
#!/usr/bin/perl
#########################################################################################
# nbpol: Script to determine which policies will run on a given day when policies #
# are calendar based. #
# written: Benjamin Schmaus #
# date: 070108 #
#########################################################################################
use DateTime;
use Getopt::Long;
use CGI;
use Time::Local;
use POSIX qw(strftime);
$first = "0";$last = "0";
$schd1 = "SCHED ";$schd2 = "SCHED";
$counter = "0";
$hour = "0";$minute = "0";$second = "0";
$arraycount = 0;
@gac = 0;
options();
@policies = `/usr/openv/netbackup/bin/admincmd/bppllist -l`;
datetime2();
printf "%-30s %-20s %-15s %-15s\n","Policy","Schedule","Start Time","Duration";
printf "%-30s %-20s %-15s %-15s\n","------","--------","----------","--------";
foreach $policies (@policies) {
$counter = 0;
chomp($policies);
open DATA, "/usr/openv/netbackup/bin/admincmd/bpplsched $policies -l|";
while () {
$line = $_;
chomp($line);
if ($line =~ /$schd1/ && $first eq "0") { first(); }
if ($line =~ /$schd2/ && $first eq "1") { checks(); }
}
close DATA;
for ($out = 0; $out < $counter; $out++) {
$policies =~ s/\s*$//g;
if ($schedcaldayoweek[$out] =~ /$datum/) {
parseit();
if ($windowl > 0) {
if (($time eq "am") && ($starttime < 12)) {
printf "%-30s %-20s %-15s %-15s\n",$policies,$schedule2,$starttime,$windowl;
$gac[int($starttime)] = $gac[int($starttime)] + 1;
} elsif (($time eq "pm") && ($starttime > 11.99)) {
printf "%-30s %-20s %-15s %-15s\n",$policies,$schedule2,$starttime,$windowl;
$gac[int($starttime)] = $gac[int($starttime)] + 1;
} elsif ($time eq "all") {
printf "%-30s %-20s %-15s %-15s\n",$policies,$schedule2,$starttime,$windowl;
$gac[int($starttime)] = $gac[int($starttime)] + 1;
}
}
}
}
}
if ($graph = "1") {
graphit();
}
exit;
sub graphit {
print "\n\n";
print "Hr\tNumber of Jobs\n";
print "--\t---------------\n";
for ($loop = 0; $loop < 24; $loop++) {
print "$loop\t";
for ($loop2 = 0; $loop2 < $gac[$loop]; $loop2++) {
print "*";
}
print "\n";
}
}
sub options {
$help="";$year="" ;$month="";$day="";$time="";$graph="";
GetOptions ('h|help'=>\$help,'y|year=s'=>\$year,'m|month=s'=>\$month,'d|day=s'=>\$day,'t|time=s'=>\$time,'graph'=>\$graph);
if ($help) {
print "Usage: nbpol -y -m -d -t [ -graph ]\n";
exit;
}
if (($year eq "") || ($month eq "") || ($day eq "") || ($time eq "")) {
print "Usage: nbpol -y -m -d -t [ -graph ]\n";
exit;
}
}
sub parseit {
$field2 = ($dow*2);
$field1 = ($dow*2)-1;
@schedtmp = split(/[ \t]+/,$schedule[$out]);
$schedule2 = $schedtmp[1];
@schedwintmp = split(/[ \t]+/,$schedwin[$out]);
$starttime = ($schedwintmp[$field1]/(60*60));
$starttime =~ s/(^\d{1,}\.\d{2})(.*$)/$1/;
$windowl = ($schedwintmp[$field2]/(60*60));
$windowl =~s/(^\d{1,}\.\d{2})(.*$)/$1/;
}
sub datetime2 {
$dt = DateTime->new(year=>$year, month=>$month,day=>$day,hour=>$hour,minute=>$minute,second=>$second,nanosecond=>00,time_zone=>'America/Chicago',);
print "$dt\n";
$dow = $dt->day_of_week; ##### 1-7 (Monday is 1) - also dow, wday
$wod = $dt->weekday_of_month(); ##### 1-5 weeks
if ($dow eq "7") { $dow = "1"; } else { $dow = $dow +1; }
$datum = "$dow,$wod";
chomp($datum);
}
sub first {
$first = "1";
$schedule[$counter] = "$line";
}
sub checks {
if ($line =~ /SCHEDCALENDAR/) {
$schedcalendar[$counter] = "SCHEDCALENDAR enabled";
}
if ($line =~ /SCHEDCALDAYOWEEK/) {
$schedcaldayoweek[$counter] = "$line";
}
if ($line =~ /SCHEDWIN/) {
$schedwin[$counter] = "$line";
}
if ($line =~ /SCHEDRES/) {
$schedres[$counter] = "$line";
}
if ($line =~ /SCHEDPOOL/) {
$schedpool[$counter] = "$line";
}
if ($line =~ /SCHEDRL/) {
$schedrl[$counter] = "$line";
}
if ($line =~ /SCHEDFOE/) {
$schedfoe[$counter] = "$line";
$first = "0";
$counter = $counter+1;
}
}