Сделал небольшой проект h43.unixpin.com для генерации отчетов модульных массивов Hitachi, таких как HUS100, AMS2000, AMS1000 итд

Генерит html код, вся графика на  javascript  (flot + jquery). Позволяет выделять мышью на графиках период времени, включать-отключать чекбоксами выводимые данные. Написан на perl, но есть бинарник для Windows.

Генерятся отчеты на основе pfm-файлов, которые собираются с массивов с помощью CLI или GUI SNM2 (Storage navigator modular 2).

Получется что-то типа этого:

Если пробросить временный инет через proxy, то ставить модули в Solaris perl становится заметно веселее ;)
Solaris 10:
# export PATH=/usr/sfw/bin:$PATH
# export http_proxy=10.77.77.10:3128
# /usr/perl5/bin/perlgcc -MCPAN -e shell
Are you ready for manual configuration? [yes] no
...
cpan> o conf tar '/usr/sfw/bin/gtar'
cpan> o conf make '/usr/sfw/bin/gmake'
cpan> o conf urllist http://www.cpan.org http://www.cpan.dk
cpan> o conf ncftpget ''
cpan> o conf commit
commit: wrote /usr/perl5/5.8.4/lib/CPAN/Config.pm
cpan> install DBI

Посмотреть свой текущий конфиг CPAN
cpan> o conf

Удалить текущий конфиг CPAN и почистить все
rm /usr/perl5/5.8.4/lib/CPAN/Config.pm
rm -rf ~/.cpan

Ссылки в тему

Понадобилось тут автоматизировать проверку web-приложения из командной строки. Суть такая — заходим на страницу, логинимся, затем идем на страницу поиска, там вводим запрос, нажимаем кнопку «найти», попадаем на страницу с результатом и ищем там определенную фразу. Все как бы просто и понятно, но ввод значений в форме поиска реализован через ajax. Чтобы понять, что отравляет броузер на сервер и что получает ставим Firefox + аддон HttpFox .
По результатам исследования был найден и подрихтован почти полностью переписан подходящий скриптик.
Особенности:
Куки и User-agent сохраняются в пределах всего сеанса.
В массиве анонимных хэшей @Urls нужно заменить ссылки url, отправляемые данные form, и expect ожидаемые данные на полученных страницах. Соответственно, по массиву идем и последовательно получаем страницы с сайта.
В expect ожидаемых данных можно использовать регулярные выражения и круглые скобки для выборки определенных данных. То что выбралось в круглых скобках ($1,$2 итд) сохраняется в переменных $e1,$e2 итд. Например получаем на странице строку «blalala uid=123456», ищем в ней uid
expect=>q(blalala uid=(\d+))
а затем подставляем ее в отправляемые данные
form=>'data=blalabla&uid=${e1}'

Для чего можно использовать этот скриптик? Для проверки связки сервер приложений-база данных, для массовой автоматической регистрации пользователей, для спама из командной строки ну итд
Дружно качаем check_web_app.pl

ssd vs cXtXdX

09.06.2010

Solaris в логах иногда оставляет сообщения, типа
Jun 22 04:07:11
midframe scsi: [ID 799468 kern.info] ssd251 at scsi_vhci0: name g600015d000230b000000000000001707, bus address g600015d000230b000000000000001707

ссылающиеся на ssd имя диска (или на sd, или dad). Как найти соответсвие между экземпляром драйвера и путем, определяемым через cXtXdX ?
Написал для этого небольшой скрипт:
$ ./whatdisk.pl
Device Driver Device SN Device ID
c1t0d0 ssd0 0744BB20JC id1,ssd@n5000cca004141e9c
c1t1d0 ssd1 0816S52E4D id1,ssd@n2000001d38707617
c1t3d0 ssd3 062244LX6L id1,ssd@n20000014c3d9c52d
c1t5d0 ssd4 062244LNCF id1,ssd@n20000014c3d9c1e5
c1t2d0 ssd5 062244LQ4W id1,ssd@n20000014c3d9caa1

Закачать whatdisk.pl

Ссылки в тему:
Немного об именах дисковых устройств в Solaris
man iostat
man sd

Есть такой инструмент — PAR Packager , и сделать exe-шник с его помощью проще простого:

C:\ pp -o filename.exe filename.pl

Не помню, входит ли утилитка в состав ActivePerl. Если что — запускаете ppm из командной строки и устанавливаете PAR. Для любителей рисовать окошки из perl — есть логичное продолжение — tkpp. Недостаток конечно есть — размер exe-шника, да и скорость выполнения — будет точно такой же, как и у perl-скрипта.

Что еще можно использовать?

1. Когда-то, для этого же я использовал perl2exe от IndigoStar. Но так как это коммерческий продукт, то по окончании программа выплевывала строчку о том, что это «незарегистрированная версия». К тому же, как отмечают продвинутые камрады — достаточно просто раскомпилировать обратно и получить исходники.

2. Есть такая утилитка — perlcc. Генерирует исходник на C, который можно потом собрать с помощью компилятора. К сожалению, существует не для всех версий perl — последняя версия 5.8.9 (я когда-то пробовал этот путь, но что-то там получалось не очень весело, типа компилировалось только с VisualStudio , плюс еще какой-то геморой с либами, может быть сейчас что-то и изменилось). Но с точки зрения размера выполняемого файла — без вариантов ;)
ЗЫ — только что попробовал скомпилить скриптик в 2 строки под Solaris — компилится, но при выполнении падает в корку ;(, так что ситуация далека от идеала.

По мотивам стандартной документации Perlvar.

Считать целиком файл в переменную:

open (MOCK, $filename) or die "$!";
local $/;
# переопределяем встроенную переменную "разделитель строк" ($/ или $INPUT_RECORD_SEPARATOR или $RS)
$_ =<MOCK> ;    # захавать моск файл целиком
close (MOCK);

Напечатать содержимое массива:
@a=qw( 1 2fewf wf g ag f);
local $,="\n";
# переопределяем встроенную переменную "разделитель полей" ($, или $OUTPUT_FIELD_SEPARATOR или $OFS)
print @a;

Читать полностью »

Иногда требуется вычислить разницу в днях между двумя датами:

$ perl -e ‘use Date::Calc qw(:all); print Delta_Days(2007,8,17, 2009,3,20)’
581
или, если неустановлен модуль Date::Calc, то

$ perl -e ‘use POSIX; $y0=2007; $m0=8; $d0=17; $y1=2009; $m1=3; $d1=20; printf( «%i\n», POSIX::difftime( POSIX::mktime(0,0,0,$d1,$m1-1,$y1-1900), POSIX::mktime(0,0,0,$d0,$m0-1,$y0-1900) ) / 86400 );’
581

На днях пришлось анализировать два Sun Explorer-а, собранных с одного сервера с периодом в полгода. Так как ничего unix-ового под рукой не было, то попробовал с ходу найти программку, которая сравнивает 2 каталога и выводит отсутствующие файлы и сообственно различия. Вот… сходу бесплатных утилит не нашлось, пришлось написать на perl. Итак, скрипт, который

    находит файлы, отсутствующие во втором каталоге
    находит файлы, отличающиеся по дате модификации и размеру
    находит файлы, отличающиеся по содержанию

Так как написан на perl, то под Windows требует установленного perl (ActivePerl, например) или можно скачать скомпилированный бинарник.

Читать полностью »