Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 5

#!/usr/bin/perl use Date::Parse; use Time::Format; use strict; my $ZabbixSender = "/opt/zabbix/sbin/zabbix_sender"; my $ZabbixServerIP = "x.x.x.x"; my $ZabbixPort = "10051"; my $ZabbixDataFile = "/tmp/zabbix-tsm.

$$"; my $ReportingHost = "hostname_where_script_is_run"; my my my my my my my my my $SessionKey = "tsm.session"; $DriveLoadKey = "tsm.driveload"; $ScratchKey = "tsm.libvol.scratch"; $VolKey = "tsm.libvol.total"; $PrivateKey = "tsm.libvol.private"; $DBPctUtilKey = "tsm.db.pctutil"; $DBMaxPctUtilKey = "tsm.db.maxpctutil"; $DBCacheHitPctKey = "tsm.db.cachehit"; $DBCacheWaitPctKey = "tsm.db.cachewait";

my $DRMediaOffsiteKey = "tsm.drm.offsite"; my my my my my my my my my my my my my my my my my my my $LogPctUtilKey = "tsm.log.pctutil"; $LogMaxPctUtilKey = "tsm.log.maxpctutil"; $LogPoolPctUtilKey = "tsm.log.poolpctutil"; $LogPoolPctWaitKey = "tsm.log.poolpctwait"; $SessionCount; $DriveLoadCount; %StgpoolUtil; $ScratchCount; $VolCount; $PrivateCount; $DBPctUtil; $DBMaxPctUtil; $DBCacheHitPct; $DBCacheWaitPct; $LogPctUtil; $LogMaxPctUtil; $LogPoolPctUtil; $LogPoolPctWait; $DRMediaOffsite;

sub round { my( $f ) = @_; my $ret; $ret = int( $f * 100.0 ); if( ( $f - $ret ) >= 0.5 ) { $ret++; }

$ret / 100.0; } sub GetLogInfo { my @tmp; open( FOO, "dsmadmc -id=admin -pass=XXXXX -dataonly=yes -comma " . "\"select pct_utilized, max_pct_utilized, log_pool_pct_util, log_pool _pct_wait from log\" " ); @tmp= <FOO>; close( FOO ); @tmp = split( /,/, $tmp[0] ); $LogPctUtil = $tmp[0]; $LogMaxPctUtil = $tmp[1]; $LogPoolPctUtil = $tmp[2]; $LogPoolPctWait = $tmp[3]; chop( $LogPoolPctWait ); } sub GetDBInfo { my @tmp; open( FOO, "dsmadmc -id=admin -pass=XXXXX -dataonly=yes -comma " . "\"select pct_utilized, max_pct_utilized, cache_hit_pct, cache_wait_p ct from db\" " ); @tmp= <FOO>; close( FOO ); @tmp = split( /,/, $tmp[0] ); $DBPctUtil = $tmp[0]; $DBMaxPctUtil = $tmp[1]; $DBCacheHitPct = $tmp[2]; $DBCacheWaitPct = $tmp[3]; chop( $DBCacheWaitPct ); } sub GetDRMediaInfo { my @tmp; open( FOO, "dsmadmc -id=admin -pass=XXXXX -dataonly=yes -comma " . "\"select count\(state\) from drmedia where location = 'OFFSITE'\" " ); @tmp= <FOO>; close( FOO ); $DRMediaOffsite = $tmp[0]; chop( $DRMediaOffsite ); }

sub GetLibvolumeInfo { my @tmp; open( FOO, "dsmadmc -id=admin -pass=XXXXX -dataonly=yes -comma " . "\"select count\(status\) from libvolumes where status = 'Scratch'\" " ); @tmp= <FOO>; close( FOO ); $ScratchCount = $tmp[0]; chop( $ScratchCount ); open( FOO, "dsmadmc -id=admin -pass=XXXXX -dataonly=yes -comma " . "\"select count\(status\) from libvolumes\" " ); @tmp= <FOO>; close( FOO ); $VolCount = $tmp[0]; chop( $VolCount ); open( FOO, "dsmadmc -id=admin -pass=XXXXX -dataonly=yes -comma " . "\"select count\(status\) from libvolumes where status = 'Private'\" " ); @tmp= <FOO>; close( FOO ); $PrivateCount = $tmp[0]; chop( $PrivateCount ); } sub GetData { my @tmp; my $l; GetLibvolumeInfo(); GetDBInfo(); GetLogInfo(); GetDRMediaInfo(); # # Get session count # open( FOO, "dsmadmc -id=admin -pass=XXXXX -dataonly=yes -comma " . "\"select count\(session_id\) from sessions\" " ); @tmp= <FOO>; close( FOO ); $SessionCount = $tmp[0]; chop( $SessionCount ); $SessionCount--; # don't count myself

# # Get tape usage # open( FOO, "dsmadmc -id=admin -pass=XXXXX -dataonly=yes -comma " . "\"select count\(drive_state\) from drives where drive_state <> 'EMPTY '\" " ); @tmp = <FOO>; close( FOO ); $DriveLoadCount = $tmp[0]; chop( $DriveLoadCount ); # # Get Stgpool utilization # open( FOO, "dsmadmc -id=admin -pass=XXXXX -dataonly=yes -comma " . "\"select STGPOOL_NAME, PCT_UTILIZED from stgpools\" " ); while( $l = <FOO> ) { chop( $l ); @tmp = split( /,/, $l ); $tmp[0] = lc $tmp[0]; $StgpoolUtil{$tmp[0]} = $tmp[1]; } close( FOO ); } sub CreateDataFile { my $i; open( DATA, "> $ZabbixDataFile" ) die "zabbix-tsm: $ZabbixDataFile: $!"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$SessionKey $SessionCount\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$DriveLoadKey $DriveLoadCount\n"; foreach $i ( keys %StgpoolUtil ) { print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort "; print DATA "tsm.stg.$i.util "; print DATA "$StgpoolUtil{$i}\n"; } print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$ScratchKey $ScratchCount\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$VolKey $VolCount\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$PrivateKey $PrivateCount\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$DBPctUtilKey $DBPctUtil\n";

print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$DBMaxPctUtilKey $DBMaxPctUtil\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$DBCacheHitPctKey $DBCacheHitPct\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$DBCacheWaitPctKey $DBCacheWaitPct\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$LogPctUtilKey $LogPctUtil\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$LogMaxPctUtilKey $LogMaxPctUtil\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$LogPoolPctUtilKey $LogPoolPctUtil\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$LogPoolPctWaitKey $LogPoolPctWait\n"; print DATA "$ZabbixServerIP $ReportingHost $ZabbixPort " . "$DRMediaOffsiteKey $DRMediaOffsite\n"; close( DATA ); } sub Send2Zabbix { my $cmd; # # Send date to Zabbix # $cmd = "$ZabbixSender -z $ZabbixServerIP -p $ZabbixPort "; $cmd .= "-i $ZabbixDataFile > /dev/null 2>&1"; system( $cmd ); } GetData(); CreateDataFile(); Send2Zabbix(); unlink( $ZabbixDataFile );

You might also like