[Orca-users] Re: I know this question has been asked a million times ...
pawlicja
epluribus at usa.net
Tue May 7 20:01:14 PDT 2002
--- In orca-users at y..., Sean O'Neill <soneill at o...> wrote:
> Just curious if anyone has beat up the multiple graph problem for
disks
> yet. I have a case right now where a system has 6 graphs for each
type of
> disk graph. Why? Because the system is being "tweaked" by the
> administrator (e.g. mounting and ummounting file systems, etc etc).
>
> REALLY ugly. Just curious.
Well, I've come up with a script that works for me. Basically, it
assumes that your most recent orcallator data file is correct, and
will rearrange/remove/add columns in old data files to be
consistent. That way, when the rrd files and graphs are regenerated,
duplicate plots are gone!
Check it out. BTW - I know it's not the most elegant example of perl
programming, but hey...
#!/usr/local/bin/perl
#
# orcafix.pl - Joe Pawlicki - May 2002
# Modify the orcallator data files, to prevent rrd files which
result
# in multiple plots for disk space and inode usage. This
situation
# arises because filesystems can change over time, and orca
doesn't
# handle this well.
#
# Step 1: Copy script to all orcallator clients
# Step 2: Backup orcallator data files
# Step 3: Stop orcallator process on client
# Step 4: Uncompress all orcallator data files on client
# Step 5: Run orcafix.pl on client; when prompted, enter the
name of the
# most recent data file
# Step 6: Re-compress older data files (using gzip, bzip, etc.)
# Step 7: Start orcallator process on client
# Step 8: When orcafix has been run on all clients, remove the
rrd files and
# web pages from the reporting host
# Step 9: Resync the client data files to the reporting host
by your normal
# procedures, and run orca to regenerate rrd files and
web pages
#
use File::Copy;
print "orcafix.pl - This script will modify the orcallator data files
in\n";
print "the current directory, so that filesystem data is consistent
with the\n";
print "most recent data file. You must provide the name of the most
recent\n";
print "data file, and all data files in this directory must be
uncompressed.\n";
print "\nDo you want to continue?\n";
$ANS = <STDIN>;
if ( $ANS !~ /^[y|Y]/ ) {
print "Exiting.\n";
exit;
}
print "Enter the most recent data file name:\n";
$newest = <STDIN>;
chomp $newest;
open CURRENT, "$newest" || die "Couldn't open data file $newest";
# Load the most current data file into a big array
while (<CURRENT>) {
@singleline = split /\s+/;
push @CurrentData, [ @singleline ];
}
close CURRENT;
# Get the field headings from the first line of the data file
$firstref = $CurrentData[0];
for $x (0 .. $#{$firstref}) {
$curfields[$x] = $firstref->[$x];
}
# Get the list of all orcallator files in the current directory
opendir THISDIR, ".";
@filelist = readdir THISDIR;
closedir THISDIR;
chomp @filelist;
### Main loop - repeat for every file in the current directory
foreach $filename (@filelist) {
if ( $filename =~ "orcallator-" && $filename ne $newest ) {
print "Working on file: $filename\n";
open THISFILE, "$filename" || die "Couldn't open data file
$filename";
# Load entire data file into array
while (<THISFILE>) {
@singleline = split /\s+/;
push @OldData, [ @singleline ];
}
close THISFILE;
rename "$filename", "$filename.sav" || die "Couldn't rename file
$filename";
# Get columns from the first line of the data file
$firstref = $OldData[0];
for $x (0 .. $#{$firstref}) {
$oldfields[$x] = $firstref->[$x];
}
# Compare columns to the good headings to be preserved, add zero
data
# if column doesn't exist in old data file
for $curposition ( 0 .. $#curfields ) {
$match = 0;
for $oldposition ( 0 .. $#oldfields ) {
if ( $oldfields[$oldposition] eq $curfields[$curposition] ) {
$match = 1; # Matching column found in old data file
for $i ( 0 .. $#OldData ) {
$ChangedData[$i][$curposition] = $OldData[$i]
[$oldposition];
}
}
}
if ( $match == 0 ) { # No matching column found, insert zeroes
$ChangedData[0][$curposition] = $curfields[$curposition];
for $i ( 1 .. $#OldData ) {
$ChangedData[$i][$curposition] = "0.0";
}
}
}
# Write out modified data file
open OUT, ">$filename" || die "Couldn't create file $filename";
for $j (0 .. $#ChangedData) {
$ref = $ChangedData[$j];
for $k (0 .. $#{$ref}) {
print OUT "$ref->[$k] ";
}
print OUT "\n";
}
close OUT;
undef @OldData;
undef @oldfields;
undef @ChangedData;
undef @changedfields;
}
}
### End main loop
More information about the Orca-users
mailing list