@rem = ' @goto endofperl '; $USAGE = " Usage: $0 datafile topchk-showconn takes the output of \"repadmin /showconn\" and summarizes the topology. "; die $USAGE unless @ARGV; printf("\n\n"); $InFile = ""; $replhours = 168; # No schedule means that DS replicates every hour. $hostsite = "unknown"; $hostsrv = "unknown"; $fromsite = "unknown"; $fromsrv = "unknown"; $schedule = "none"; $enable = "unknown"; $cxtion = "unknown"; $skiprest = 0; while (<>) { if ($InFile ne $ARGV) { &PrintSummary(); $InFile = $ARGV; $modtime = (stat $InFile)[9]; printf("Processing file %s Modify Time: %s\n\n", $InFile, scalar localtime($modtime)); $infilelist = $infilelist . " " . $InFile; $skiprest = 0; } if ($skiprest) {next;} chop; ($func, @a) = split(":"); if (($func eq "") || ($func =~ m/^#/)) {next;} if (m/connections found./) {$skiprest = 1; next;} if ($func =~ m/Connection name/) { if ($cxtion ne "unknown") {&PrintRecord();} $cxtion = $a[0]; $schedule = "none"; next; } if ($func =~ m/enabledConnection/) { #printf("%s\n", $_); $enable = uc($a[0]); next; } if ($func =~ m/Server DNS name/) { $srvdns = $a[0]; if ($srvdns eq " (null)") {++$NullDnsCount;} next; } if ($func =~ m/Server DN name/) { #printf("%s\n", $_); #Server DN name : CN=NTDS Settings,CN=C0010000,CN=Servers,CN=0100Site,CN=Sites,CN=Configuratio... ($hostsrv, $hostsite) = m/cn=ntds settings,cn=(.*),cn=servers,cn=(.*),cn=sites/i; if (m/LostAndFound/) { ++$LostCount; $hostsite = "Lost"; $hostsrv = "AndFound"; } next; } if ($func =~ m/fromServer/) { #printf("%s\n", $_); # # fromServer: Site-76\CYBER0760 # ($fromsite, $fromsrv) = ($a[0] =~ m/ (.*)\\(.*)/); $from = $fromsite . "\\" . $fromsrv; $host = $hostsite . "\\" . $hostsrv; $fromlist{uc($from)}++; $hostlist{uc($host)}++; next; } if ($cxtion ne "unknown") { # # Mon: 001000000000000000000010 # # Count the number of non-zero hours # if (m/Sun\:|Mon\:|Tue\:|Wed\:|Thu\:|Fri\:|Sat\:/) { ($dayname, $scvector) = split; if ($dayname eq "Sun:" ) {$replhours = 0;} if ($dayname eq "Mon:" ) {$schedule = lc($scvector);} # save Monday's schedule. for ($i=0; $i < 24; $i++) { if (substr($scvector, $i, 1) ne "0") {$replhours++;} } if ($daynum eq "Sat:") { &PrintRecord(); } # Day 7: output record. } } # # If start of a new Set. Print summary info on last one. # if ($func =~ m/Base DN/) { &PrintSummary(); printf("\n\n%s\n\n", $_); next; } } &PrintSummary(); exit; sub PrintRecord { printf("cxtion: %-36s host:%20s\\%-16s from:%20s\\%-16s RepHrs: %3d Sched: %-24s enabled: %5s\n", $cxtion, $hostsite, $hostsrv, $fromsite, $fromsrv, $replhours, $schedule, $enable); # # Track the number of connections with the same Monday schedule and the same per-week repl hours. # $monsched{$schedule}++; $hoursched{$replhours}++; if ($enable =~ m/FALSE/) {$disabledcxtion++;} $cxtioncount++; $cxtion = "unknown"; $fromsite = "unknown"; $fromsrv = "unknown"; $enable = "unknown"; $replhours = 168; $schedule = "none"; } sub PrintSummary { if ($cxtioncount == 0) {return;} if ($cxtion ne "unknown") { # # print the last connection record. # &PrintRecord(); } printf("\n\n Servers referenced from cxtions (From List) \n\n"); foreach $param (sort keys(%fromlist)) { printf("%-25s %5d %5d\n", $param, $fromlist{$param}, $hostlist{$param}); } printf("\n\n Servers hosting cxtions (Host List) \n\n"); foreach $param (sort keys(%hostlist)) { printf("%-25s %5d %5d\n", $param, $hostlist{$param}, $fromlist{$param}); } printf("\n\n\n S U M M A R Y R E P O R T \n\n"); printf("\nConnection objects: %5d\n", $cxtioncount); printf("\nConnection objects set to disabled: %5d\n", $disabledcxtion); printf("\nConnection objects with null Server DNS names: %5d\n", $NullDnsCount); printf("\nConnection objects in LostAndFound: %5d\n", $LostCount); printf("\n\nNumber connections with given Monday Schedule\n\n"); foreach $param (sort keys(%monsched)) { printf("%-28s %5d\n", $param, $monsched{$param}); } printf("\n\nNumber connections with per-week active replication hours\n\n"); foreach $param (sort keys(%hoursched)) { printf("%-28s %5d\n", $hoursched{$param}, $param); } print "\f\n"; $replhours = 168; # No schedule means that DS replicates every hour. $hostsite = "unknown"; $hostsrv = "unknown"; $fromsite = "unknown"; $fromsrv = "unknown"; $schedule = "none"; $enable = "unknown"; $cxtion = "unknown"; $cxtioncount = 0; $disabledcxtion = 0; undef %monsched; undef %hoursched; undef %fromlist; undef %hostlist; } __END__ :endofperl @perl %~dpn0.cmd %*