Использование Perl Hash для заполнения выпадающего списка? - PullRequest
0 голосов
/ 09 ноября 2010

Оповещение новичка Я хочу в основном прочитать несколько файлов, чтобы получить из них некоторые данные. Я хочу проанализировать эти данные в хеш-таблице, чтобы в итоге создать гистограмму.

Вот тип файла, который я читаю. Все файлы намного больше и имеют больше записей:

> Name      CPU Time     CPU Load Percentage
> 
> -----------------------------------------
> 
> System                7962        3.00% 
> 
> Adobe Photoshop       6783        0.19% 
> 
> MSN Messenger         4490        0.01% 
> 
> Google Chrome         8783        0.02% 
> 
> Idle                   120       94.00% 
> 
> =========================================

Вот мой соответствующий код для Perl:

#!/usr/bin/perl
use warnings;
use Data::Dumper;  


  #Looping through the end of the file  
  while (<DATA>) 
   {
   #Selecting only the CPU Processes
   if (/(.*?)\s+\d+\s+(\d+\.\d+)\%/){
   #Populating the hash with only Process name and % (eg: Idle 94.00%)
    $cpu_util{ $1 } = $2;
    }
   }

  #Assigning the axis labels to be pushed onto the graph
  @xvalues = keys %cpu_util;
  @yvalues = values %cpu_util;  

      }

Теперь я могу успешно разбивать данные из нескольких файлов и отображать один график. Однако я хотел бы иметь возможность отображать только один график. Предоставьте пользователю возможность выбрать, какой процесс его интересует, а затем создайте линейный график этих точек.

Однако я не совсем уверен, как это сделать. Я знаю, что все мои процессы хранятся в моем хэше через пары ключ / значение. Итак («Idle -> 94%») и т. Д. В конечном итоге я хотел бы показать пользователя, раскрывающийся список ... и в нем перечислены все ключи в хэше. Когда пользователь выбирает конкретный ключ, он генерирует для него GD :: Graph. Думаю, я сгенерирую графики для каждого ключа перед самой раздачей и сохраню их как изображения Выбор определенной опции просто связывает их с нужным изображением ...

Я немного читал в Интернете о реализации раскрывающегося списка с использованием CGI, но я не зашел слишком далеко. Я подумываю о создании еще одной HTML-страницы с выпадающим списком, но я не уверен, как получить значения для динамического заполнения из хэша, хранящегося в Perl.

1 Ответ

1 голос
/ 09 ноября 2010

Во-первых, посмотрите вверх 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 приходят на ум. Но изучение всего этого сразу, вероятно, будет довольно трудоемким.)

...