Используете Perl Hash для заполнения раскрывающегося списка?

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

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

> 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 ..


person c0d3rs    schedule 09.11.2010    source источник


Ответы (1)


Сначала найдите 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}
    #...
}

Тогда у вас будет время и программа в вашей структуре данных, чтобы вы могли строить графики с течением времени. Это, конечно, потребует больше памяти (но я предполагаю, что на самом деле это не проблема, если у вас есть несколько таких файлов).

редактировать 1

После того, как вы загрузили все данные в память, вы можете нарезать их как хотите. Таким образом, вы можете построить график одной программы с течением времени или что-то еще. CGI.pm определенно «олдскульный» (именно так мы писали 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. Но изучение всего этого сразу, вероятно, будет довольно ошеломляющим.)

person derobert    schedule 09.11.2010
comment
Привет, Роберт, я загружаю данные, но не с информацией о времени. Я обновил свой код тем, что делаю. Я отредактировал это, так как думал, что это не имеет отношения к делу ... - person c0d3rs; 09.11.2010
comment
@ c0d3rs: Надеюсь, мой раздел редактирования 1 поможет еще немного. В частности, несмотря на то, что это может показаться подавляющим, вам действительно стоит взглянуть на rrdtool и инфраструктуру, уже существующую вокруг него. Существуют модули Perl для взаимодействия с ним, и он будет обрабатывать все графики за вас. - person derobert; 10.11.2010