Во-первых, посмотрите вверх Data::Dumper
и Data::Dump
.Это поможет вам, когда вы работаете со структурами данных.
Чтобы построить линейный график, вам нужны данные временных рядов.Похоже, у вас есть несколько файлов, каждый снимок в данный момент времени.Сейчас вы просто суммируете их, вместо этого вам нужно загрузить все данные.Таким образом, вы можете сохранить что-то вроде:
foreach my $file (@files) {
my $time = get_time_from_file($file); # regexp on name, whatever
# ...
$cpu_util{$1}{$time} = $2; # or $cpu_util{$time}{$1}
#...
}
У вас будет время и программа в вашей структуре данных, так что вы сможете создавать графики с течением времени.Это, конечно, будет использовать больше памяти (но я предполагаю, что на самом деле это не проблема, если у вас не так много этих файлов).
edit 1
Как только вы получитевсе данные загружаются в память, вы можете нарезать их, как вы хотите.Таким образом, вы можете составить график одной программы с течением времени или что-то еще.CGI.pm определенно "oldschool" (именно так мы и писали на Perl CGI в середине 90-х), но он должен хорошо работать для создания окна выбора.Вы можете увидеть то, что выбрано, используя param
метод:
my $selected = $CGI->param('selectbox_name');
if (defined $selected) {
# code to display graph
} else {
# code to display menu
}
Вы можете предварительно сгенерировать все графики, независимо от того, хорошая ли это идея или нет, зависит от того, насколько графами это будет, сколько трафика у каждогоможно узнать, каковы требования к времени отклика и т. д.
(Вы также можете посмотреть на такие вещи, как HTML::Template
, Template Toolkit, Mason, CGI::Application
и Catalyst. Кроме того, вместо многократной обработкифайлы, вы можете захотеть сохранить результаты где-то. SQLite и rrdtool приходят на ум. Но изучение всего этого сразу, вероятно, будет довольно трудоемким.)