Приложение 1. Пример фильтра трассировки
Программа program.awk выполняет разбивку потока трассировочной информации на отдельные файлы с последующим их архивированием.
BEGIN {
Sum = 0;
File="server.log";
SizeLimit = 1000000;
MaxFilesCount = 10;
Index = 0;
FirstFileIndex = 0;
system("ls " File ".*.bz2 > /tmp/hotres_log_list");
for(;;)
{
Tmp = "";
getline Tmp < "/tmp/hotres_log_list";
Files[Index] = Tmp;
print "Files[" Index"]=" Tmp;
if ( Tmp == "" )
{
break;
}
Index++;
};
system("rm -f /tmp/hotres_log_list");
while ( Index - FirstFileIndex > MaxFilesCount)
{
print "Delete " Files[FirstFileIndex];
system("rm -f " Files[FirstFileIndex]);
delete Files[FirstFileIndex];
FirstFileIndex++;
}
}
#/Set timer 9 for/ { next; }
#/TIMEOUT EVENT Id=9/ {next;}
#/State MAIN has been written/ { next;}
#/Timeout 9 is ready/ {next;}
{
Sum = length($0) + Sum;
print $0 >> ""File;
if ( Sum > SizeLimit )
{
Sum = 0;
close (File);
FileName = File"."strftime("%y%m%d%H%M%S") Index;
system("mv -f "File" "FileName);
system("bzip2 "FileName);
Files[Index] = FileName ".bz2";
print "Index=" Index;
while ( Index - FirstFileIndex >= MaxFilesCount)
{
print "Delete " Files[FirstFileIndex];
system("rm -f " Files[FirstFileIndex]);
delete Files[FirstFileIndex];
FirstFileIndex++;
}
Index++;
}
}