Quantcast
Channel: THE SAN GUY
Viewing all articles
Browse latest Browse all 214

Reporting on Clariion / VNX Block Storage Pool capacity with a bash script

$
0
0

I recently added a post about how to report on Celerra & VNX File pool sizes with a bash script (http://emcsan.wordpress.com/2013/08/05/reporting-on-celerravnx-nas-pool-sizes-with-a-bash-script/). I’ve also been doing that for a long time with our Clariion and VNX block pools so I thought I’d share that information as well.

I use a cron job to schedule the report daily and copy it to our internal web server. I then run the csv2html.pl perl script (from http://www.jpsdomain.org/source/perl.html) to convert it to an HTML output file to add to our intranet report page. This is likely the most viewed report I create on a daily basis as we always seem to be running low on available capacity.

The output of the script looks similar to this:

PoolReport

Here is the bash script that creates the report:

TODAY=$(date)
#Add the current time/date stamp to the top of the report
echo $TODAY >;; /scripts/PoolReport.csv
#Create a file with the standard navisphere CLI output for each storage pool (to be processed later into the format I want)
naviseccli -h VNX_1 storagepool -list -id 0 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_0.csv
naviseccli -h VNX_1 storagepool -list -id 1 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_1.csv
naviseccli -h VNX_1 storagepool -list -id 2 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_2.csv
naviseccli -h VNX_1 storagepool -list -id 3 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_3.csv
naviseccli -h VNX_1 storagepool -list -id 4 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_6.csv
naviseccli -h VNX_2 storagepool -list -id 0 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_4.csv
naviseccli -h VNX_2 storagepool -list -id 1 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_5.csv
naviseccli -h VNX_2 storagepool -list -id 2 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_7.csv
naviseccli -h VNX_2 storagepool -list -id 3 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_8.csv
Naviseccli -h VNX_3 storagepool -list -id 0 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site1_6.csv
naviseccli -h VNX_4 storagepool -list -id 0 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site2_0.csv
naviseccli -h VNX_4 storagepool -list -id 1 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site2_1.csv
naviseccli -h VNX_4 storagepool -list -id 2 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site2_2.csv
naviseccli -h VNX_4 storagepool -list -id 3 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site2_3.csv
naviseccli -h VNX_5 storagepool -list -id 0 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site2_4.csv
naviseccli -h VNX_6 storagepool -list -id 0 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site3_0.csv
naviseccli -h VNX_6 storagepool -list -id 1 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site3_1.csv
naviseccli -h VNX_7 storagepool -list -id 0 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site3_0.csv
naviseccli -h VNX_7 storagepool -list -id 1 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site3_1.csv
naviseccli -h VNX_8 storagepool -list -id 0 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site4_0.csv
naviseccli -h VNX_8 storagepool -list -id 1 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site4_1.csv
naviseccli -h VNX_9 storagepool -list -id 0 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site5_0.csv
naviseccli -h VNX_9 storagepool -list -id 1 -availableCap -consumedCap -UserCap -prcntFull >;;/scripts/report_site5_1.csv
#Create a new file for each site’s storage pool (from the file generated in the previous step) hat contains only the info that I want.
cat /scripts/report_site1_4.csv | grep Name >;; /scripts/Site1Pool4.csv
cat /scripts/report_site1_4.csv | grep GBs >;;>;;/scripts/Site1Pool4.csv
cat /scripts/report_site1_4.csv | grep Full >;;>;;/scripts/Site1Pool4.csv
cat /scripts/report_site1_5.csv | grep Name >;; /scripts/Site1Pool5.csv
cat /scripts/report_site1_5.csv | grep GBs >;;>;;/scripts/Site1Pool5.csv
cat /scripts/report_site1_5.csv | grep Full >;;>;;/scripts/Site1Pool5.csv
cat /scripts/report_site1_0.csv | grep Name >;; /scripts/Site1Pool0.csv
cat /scripts/report_site1_0.csv | grep GBs >;;>;;/scripts/Site1Pool0.csv
cat /scripts/report_site1_0.csv | grep Full >;;>;;/scripts/Site1Pool0.csv
cat /scripts/report_site1_1.csv | grep Name >;; /scripts/Site1Pool1.csv
cat /scripts/report_site1_1.csv | grep GBs >;;>;;/scripts/Site1Pool1.csv
cat /scripts/report_site1_1.csv | grep Full >;;>;;/scripts/Site1Pool1.csv
cat /scripts/report_site1_2.csv | grep Name >;; /scripts/Site1Pool2.csv
cat /scripts/report_site1_2.csv | grep GBs >;;>;;/scripts/Site1Pool2.csv
cat /scripts/report_site1_2.csv | grep Full >;;>;;/scripts/Site1Pool2.csv
cat /scripts/report_site1_7.csv | grep Name >;; /scripts/Site1Pool7.csv
cat /scripts/report_site1_7.csv | grep GBs >;;>;;/scripts/Site1Pool7.csv
cat /scripts/report_site1_7.csv | grep Full >;;>;;/scripts/Site1Pool7.csv
cat /scripts/report_site1_8.csv | grep Name >;; /scripts/Site1Pool8.csv
cat /scripts/report_site1_8.csv | grep GBs >;;>;;/scripts/Site1Pool8.csv
cat /scripts/report_site1_8.csv | grep Full >;;>;;/scripts/Site1Pool8.csv
cat /scripts/report_site1_3.csv | grep Name >;; /scripts/Site1Pool3.csv
cat /scripts/report_site1_3.csv | grep GBs >;;>;;/scripts/Site1Pool3.csv
cat /scripts/report_site1_3.csv | grep Full >;;>;;/scripts/Site1Pool3.csv
cat /scripts/report_site1_6.csv | grep Name >;; /scripts/Site1Pool6.csv
cat /scripts/report_site1_6.csv | grep GBs >;;>;;/scripts/Site1Pool6.csv
cat /scripts/report_site1_6.csv | grep Full >;;>;;/scripts/Site1Pool6.csv
cat /scripts/report_site1_6.csv | grep Name >;; /scripts/Site1Pool6.csv
cat /scripts/report_site1_6.csv | grep GBs >;;>;;/scripts/Site1Pool6.csv
cat /scripts/report_site1_6.csv | grep Full >;;>;;/scripts/Site1Pool6.csv
cat /scripts/report_site2_0.csv | grep Name >;; /scripts/Site2Pool0.csv
cat /scripts/report_site2_0.csv | grep GBs >;;>;;/scripts/Site2Pool0.csv
cat /scripts/report_site2_0.csv | grep Full >;;>;;/scripts/Site2Pool0.csv
cat /scripts/report_site2_1.csv | grep Name >;; /scripts/Site2Pool1.csv
cat /scripts/report_site2_1.csv | grep GBs >;;>;;/scripts/Site2Pool1.csv
cat /scripts/report_site2_1.csv | grep Full >;;>;;/scripts/Site2Pool1.csv
cat /scripts/report_site2_2.csv | grep Name >;; /scripts/Site2Pool2.csv
cat /scripts/report_site2_2.csv | grep GBs >;;>;;/scripts/Site2Pool2.csv
cat /scripts/report_site2_2.csv | grep Full >;;>;;/scripts/Site2Pool2.csv
cat /scripts/report_site2_3.csv | grep Name >;; /scripts/Site2Pool3.csv
cat /scripts/report_site2_3.csv | grep GBs >;;>;;/scripts/Site2Pool3.csv
cat /scripts/report_site2_3.csv | grep Full >;;>;;/scripts/Site2Pool3.csv
cat /scripts/report_site2_4.csv | grep Name >;; /scripts/Site2Pool4.csv
cat /scripts/report_site2_4.csv | grep GBs >;;>;;/scripts/Site2Pool4.csv
cat /scripts/report_site2_4.csv | grep Full >;;>;;/scripts/Site2Pool4.csv
cat /scripts/report_site3_0.csv | grep Name >;; /scripts/Site3Pool0.csv
cat /scripts/report_site3_0.csv | grep GBs >;;>;;/scripts/Site3Pool0.csv
cat /scripts/report_site3_0.csv | grep Full >;;>;;/scripts/Site3Pool0.csv
cat /scripts/report_site3_1.csv | grep Name >;; /scripts/Site3Pool1.csv
cat /scripts/report_site3_1.csv | grep GBs >;;>;;/scripts/Site3Pool1.csv
cat /scripts/report_site3_1.csv | grep Full >;;>;;/scripts/Site3Pool1.csv
cat /scripts/report_site3_0.csv | grep Name >;; /scripts/Site4Pool0.csv
cat /scripts/report_site3_0.csv | grep GBs >;;>;;/scripts/Site4Pool0.csv
cat /scripts/report_site3_0.csv | grep Full >;;>;;/scripts/Site4Pool0.csv
cat /scripts/report_site3_1.csv | grep Name >;; /scripts/Site4Pool1.csv
cat /scripts/report_site3_1.csv | grep GBs >;;>;;/scripts/Site4Pool1.csv
cat /scripts/report_site3_1.csv | grep Full >;;>;;/scripts/Site4Pool1.csv
cat /scripts/report_site4_0.csv | grep Name >;; /scripts/Site5Pool0.csv
cat /scripts/report_site4_0.csv | grep GBs >;;>;;/scripts/Site5Pool0.csv
cat /scripts/report_site4_0.csv | grep Full >;;>;;/scripts/Site5Pool0.csv
cat /scripts/report_site4_1.csv | grep Name >;; /scripts/Site5Pool1.csv
cat /scripts/report_site4_1.csv | grep GBs >;;>;;/scripts/Site5Pool1.csv
cat /scripts/report_site4_1.csv | grep Full >;;>;;/scripts/Site5Pool1.csv
cat /scripts/report_site5_0.csv | grep Name >;; /scripts/Site6Pool0.csv
cat /scripts/report_site5_0.csv | grep GBs >;;>;;/scripts/Site6Pool0.csv
cat /scripts/report_site5_0.csv | grep Full >;;>;;/scripts/Site6Pool0.csv
cat /scripts/report_site5_1.csv | grep Name >;; /scripts/Site6Pool1.csv
cat /scripts/report_site5_1.csv | grep GBs >;;>;;/scripts/Site6Pool1.csv
cat /scripts/report_site5_1.csv | grep Full >;;>;;/scripts/Site6Pool1.csv
#The last section creates the final output for the report before it is processed into an html table. It creates a single line for each storage pool with the total GB available, total GB used, available GB, and the percent utilization of the pool.
echo ‘Pool Name’,'Total GB ‘,’Used GB ‘,’Available GB ‘,’Percent Full ‘ >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool0.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool0.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool0.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool0.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool0.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool1.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool1.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool1.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool1.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool1.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool2.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool2.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool2.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool2.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool2.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool3.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool3.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool3.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool3.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool3.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool6.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool6.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool6.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool6.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool6.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo ” “,’Total GB’,'Used GB’,'Available GB’,'Percent Full’ >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool4.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool4.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool4.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool4.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool4.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool5.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool5.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool5.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool5.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool5.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool7.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool7.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool7.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool7.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool7.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool8.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool8.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool8.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool8.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool8.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo ” “,’Total GB’,'Used GB’,'Available GB’,'Percent Full’ >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site1Pool6.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site1Pool6.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site1Pool6.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site1Pool6.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site1Pool6.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo ” “,’Total GB’,'Used GB’,'Available GB’,'Percent Full’ >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site2Pool0.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site2Pool0.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site2Pool0.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site2Pool0.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site2Pool0.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site2Pool1.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site2Pool1.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site2Pool1.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site2Pool1.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site2Pool1.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site2Pool2.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site2Pool2.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site2Pool2.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site2Pool2.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site2Pool2.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site2Pool3.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site2Pool3.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site2Pool3.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site2Pool3.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site2Pool3.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo ” “,’Total GB’,'Used GB’,'Available GB’,'Percent Full’ >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site2Pool4.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site2Pool4.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site2Pool4.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site2Pool4.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site2Pool4.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo ” “,’Total GB’,'Used GB’,'Available GB’,'Percent Full’ >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site3Pool0.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site3Pool0.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site3Pool0.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site3Pool0.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site3Pool0.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site3Pool1.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site3Pool1.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site3Pool1.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site3Pool1.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site3Pool1.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo ” “,’Total GB’,'Used GB’,'Available GB’,'Percent Full’ >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site4Pool0.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site4Pool0.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site4Pool0.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site4Pool0.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site4Pool0.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site4Pool1.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site4Pool1.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site4Pool1.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site4Pool1.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site4Pool1.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo ” “,’Total GB’,'Used GB’,'Available GB’,'Percent Full’ >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site5Pool0.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site5Pool0.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site5Pool0.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site5Pool0.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site5Pool0.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site5Pool1.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site5Pool1.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site5Pool1.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site5Pool1.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site5Pool1.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo ” “,’Total GB’,'Used GB’,'Available GB’,'Percent Full’ >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site6Pool0.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site6Pool0.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site6Pool0.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site6Pool0.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site6Pool0.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
echo `grep Name /scripts/Site6Pool1.csv |awk ‘{print $3}’`”,”`grep -i User /scripts/Site6Pool1.csv |awk ‘{print $4}’`”,”`grep -i Consumed /scripts/Site6Pool1.csv |awk ‘{print $4}’`”,”`grep -i Available /scripts/Site6Pool1.csv |awk ‘{print $4}’`”,”`grep -i Full /scripts/Site6Pool1.csv |awk ‘{print $3}’` >;;>;; /scripts/PoolReport.csv
#Convert the file to HTML for use on the internal web server
./csv2htm.pl -e -T -i /scripts/PoolReport.csv -o /webfolder/PoolReport.html


Viewing all articles
Browse latest Browse all 214

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>