Прямо сейчас я работаю над программой на PHP и Perl для чтения системных данных компьютера, и мы использовали SNMP для сбора данных (точнее, вынуждены). После извлечения данных мы должны были сохранить данные в базе данных, а затем использовать данные для построения линейного графика.
На данный момент я использую этот perl-скрипт для получения информации об использовании ЦП/процессора компьютера.
$MIB1 = ".1.3.6.1.2.1.25.3.3.1.2"; #Cpu Processors
$HOST = shift; #or localhost for testing
$count = 0;
#print out all the processors of the computer and their values
#SNMP is used with perl because of the libraries
#snmpwalk retrieves information from the computers by the computer name and MIB
#as there are many values, they are stored in an array to be used
(@values) = &snmpwalk("$HOST","$MIB1");
foreach $value (@values)
{
$count++;
if ($value) {
#fixes the value for presentation
$goodvalue = &strip_comment($value);
#prints out the result. $count will count out the processor number
print "CPU Usage of Processor $count: $goodvalue%\n"; }
if ($value > 90){
#warns user if the processor usage is over 90%
print "Warning: CPU Usage over 90%! \n"
}
else { warn "No response from host :$HOST:\n"; } #provides error
}
Код, вернее, SNMP извлекает несколько отдельных процессоров, и многие должны знать, что на одном компьютере может быть много процессоров, поэтому хранение этих данных в базе данных не очень практично (например, если на одном компьютере всего 2 процессора, на следующем имеет 4, а тот, что в другом конце комнаты, имеет 100.)
Поэтому мне было интересно, может ли кто-нибудь помочь улучшить этот код или изменить его, чтобы я мог сложить их все вместе, найти среднее значение использования ЦП/процессора и сохранить его в базе данных. Потому что я не слишком уверен, как это сделать, поскольку цикл сканирует только 1 процессор за раз, и может быть неизвестно, сколько их.
Заранее спасибо.