#! /usr/bin/awk -f
###
### TOPXML.AWK
### (c) 2003 Software Poetry
### http://www.softwarepoetry.com/webob
###
### Takes batch output from "top" and turns it into xml on stdout:
###
### top -b -n1 | topxml.awk
### top -b -n1 -p PID | topxml.awk
### top -b -n1 `cat /home/webob/webob.pid` | topxml.awk
###
BEGIN {
fInProcs = 0;
print "";
}
END {
print "\t\n";
}
($1 == "CPU") \
{
gsub(/\%/, "");
printf("\t\n\t\t%s\n", $3);
printf("\t\t%s\n", $5);
printf("\t\t%s\n", $7);
printf("\t\t%s\n\t\n", $9);
}
($1 == "Mem:") \
{
gsub(/K/, "");
printf("\t\n\t\t%s\n", $2);
printf("\t\t%s\n", $4);
printf("\t\t%s\n\t\n", $6);
}
($1 == "Swap:") \
{
gsub(/K/, "");
printf("\t\n\t\t%s\n", $2);
printf("\t\t%s\n", $4);
printf("\t\t%s\n\t\n", $6);
}
($1 == "PID") \
{
fInProcs = 1;
print "\t";
gsub(/\%/, "");
for (i = 1; i <= NF; ++i)
rgszNames[i] = tolower($i);
next;
}
{
if (fInProcs)
{
print "\t\t";
gsub(/\r/, "");
gsub(/\&/, "\\&");
gsub(/, "\\<");
gsub(/>/, "\\>");
gsub(/\"/, "\\"");
for (i = 1; i <= NF; ++i)
printf("\t\t\t<%s>%s%s>\n", rgszNames[i], $i, rgszNames[i]);
print "\t\t";
}
}