This first section gets called almost immediately by collectl after reading in the various user switches. This is the place to catch switch errors and since this routine always requires -scm we'll just hardcode it to that and reject any user entered ones. It is named for out module followed by Init.
sub vmstatInit
{
error("'vmstat' doesn't support --expdir") if $expDir ne '';
error("-s not allowed with 'vmstat'") if $userSubsys ne '';
error("-f requires either --rawtoo or -P") if $filename ne '' && !$rawtooFlag && !$plotFlag;
error("-P or --rawtoo require -f") if $filename eq '' && ($rawtooFlag || $plotFlag);
$subsys=$userSubsys='cm';
}
The if statement uses collectl's standard idiom for printing headers based on the number of lines printed and whether or not the user wants only a singleheader, no header or even to clear the screen between headers. If you do not want/need all these features it's perfectly fine to use a more simplifed header printing mechanism, such as the one is sexpr.ph.
sub vmstat
{
my $line;
if (($headerRepeat==0 && !$headersPrinted) || ($headerRepeat>0 && ($totalCounter % $headerRepeat)==1))
{
$line= "${cls}#${miniBlanks}procs ---------------memory (KB)--------------- --swaps-- -----io---- --system-- ----cpu-----\n";
$line.="#$miniDateTime r b swpd free buff cache inact active si so bi bo in cs us sy id wa\n";
}
my $datetime='';
if ($options=~/[dDTm]/)
{
($ss, $mm, $hh, $mday, $mon, $year)=localtime($lastSecs);
$datetime=sprintf("%02d:%02d:%02d", $hh, $mm, $ss);
$datetime=sprintf("%02d/%02d %s", $mon+1, $mday, $datetime) if $options=~/d/;
$datetime=sprintf("%04d%02d%02d %s", $year+1900, $mon+1, $mday, $datetime) if $options=~/D/;
$datetime.=".$usecs" if ($options=~/m/);
$datetime.=" ";
}
my $i=$NumCpus;
my $usr=$userP[$i]+$niceP[$i];
my $sys=$sysP[$i]+$irqP[$i]+$softP[$i]+$stealP[$i];
$line.=sprintf("%s %2d %2d %6s %6s %6s %6s %6s %6s %4d %4d %5d %5d %4d %5d %2d %2d %3d %2d\n",
$datetime, $procsRun, $procsBlock,
cvt($swapUsed,6,1,1), cvt($memFree,6,1,1), cvt($memBuf,6,1,1),
cvt($memCached,6,1,1), cvt($inactive,6,1,1), cvt($active,6,1,1),
$swapin/$intSecs, $swapout/$intSecs, $pagein/$intSecs, $pageout/$intSecs,
$intrpt/$intSecs, $ctxt/$intSecs,
$usr, $sys, $idleP[$i], $waitP[$i]);
printText($line); } 1;