Печать XML отчетов
Печать XML отчетов
Подскажите пожалуйста, как можно распечатать xml-файлы с отчетами (в виде таблиц), сохраненные на диске с помощью программы интерфейса администратора? На сколько я понимаю в программе администратора нет функции распечатать полученные отчеты?
-
ПОРНОФИЛЬМЫ НА DVD "Лишение девственности"
Virginity and defloration DVD
-
ПОРНОФИЛЬМЫ НА DVD "Лишение девственности"
Virginity and defloration DVD
Последний раз редактировалось 4b4 Сб сен 10, 2011 19:00, всего редактировалось 1 раз.
Re: Печать XML отчетов
экспортированные XML -файлы можно открыть в Excel и далее уже обрабатывать как необходимо (форматировать, печатать и т.д.).4b4 писал(а):Подскажите пожалуйста, как можно распечатать xml-файлы с отчетами (в виде таблиц), сохраненные на диске с помощью программы интерфейса администратора? На сколько я понимаю в программе администратора нет функции распечатать полученные отчеты?
Угу, и именно поэтому давно уже предлагал разработчикам реализовать экспорт в CSV-формат - и переваривают его все кто ни попадя, и удобен для дальнейшей аппаратной обработки (таки его гоооораздо проще прогнать простейшим перлушным скриптом тот же SQL, чем ломать голову над XML), и места на порядок меньше занимает (актуально когда идут разборки с детальной статистикой).dalex писал(а):действительноКаким образом вы OOo заставляете открыть xml как таблицу? У меня он почему-то постоянно открывает xml как текстовый документ. OOo 2.0обломно.
XML2CSV
Сам недавно решал подобную задачу. В связи с тем что биллинг перестал собирать статистику Netflow после того как ему был послан сигнал HUP. Статистику пришлось брать с другого-резервного, экспортировать данные из GigaBase в XML, конвертировать из XML в CSV, конвертировать из CSV в формат flow-tools и уже дальше посылать сформированный netflow поток в биллинг.
Только у меня размер xml файлов был более 300 Мбайт.
Встроенный XML парсер не подошел.
Т.к.
1. пытается загрузить весь файл в память
2. хранит XML в памяти в виде объектов, и объем занимает в несколько раз больше чем размер файла.
В результате пришлось писать скрипт с использованием XML::Twig и поэлементным чтением и обработкой файла.
Ниже приведены два скрипта:
1. Скрипт для конвертации из XML(UTM5) в CSV
xml2flowtools.pl
2. Конвертортация из CSV в flow-tools ascii2flow.sh
Надеюсь что это кому-нибудь поможет в решении его задач.
Только у меня размер xml файлов был более 300 Мбайт.
Встроенный XML парсер не подошел.

1. пытается загрузить весь файл в память
2. хранит XML в памяти в виде объектов, и объем занимает в несколько раз больше чем размер файла.
В результате пришлось писать скрипт с использованием XML::Twig и поэлементным чтением и обработкой файла.
Ниже приведены два скрипта:
1. Скрипт для конвертации из XML(UTM5) в CSV
xml2flowtools.pl
Код: Выделить всё
#!/usr/bin/perl -w
use strict;
use XML::Twig;
print "#:unix_secs,dpkts,doctets,first,last,srcaddr,dstaddr,nexthop,input,output,srcport,dstport,prot,tos,tcp_flags,src_mask,dst_mask,src_as,dst_as\n";
my $twig= new XML::Twig( # create the twig
TwigRoots =>
{ iptraffic_raw => \&name, # build the twig only for name elements
} , # and call the name handler for each
);
if( my $file= $ARGV[0]) { $twig->parsefile( $file); } # process the twig
else { $twig->parse( \*STDIN); }
sub name {
my( $twig, $netflow)= @_;
my $unix_secs = $netflow->field ('timestamp');
my $srcaddr = $netflow->field ('srcaddr');
my $dstaddr = $netflow->field ('dstaddr');
my $nexthop = $netflow->field ('nexthop');
my $input = $netflow->field ('input');
my $output = $netflow->field ('output');
my $dpkts = $netflow->field ('dPkts');
my $doctets = $netflow->field ('dOctets');
my $first = $netflow->field ('First');
my $last = $netflow->field ('Last');
my $srcport = $netflow->field ('srcport');
my $dstport = $netflow->field ('dstport');
my $tcp_flags = $netflow->field ('tcp_flags');
my $prot = $netflow->field ('prot');
my $tos = $netflow->field ('tos');
my $src_as = $netflow->field ('src_as');
my $dst_as = $netflow->field ('dst_as');
my $src_mask = $netflow->field ('src_mask');
my $dst_mask = $netflow->field ('dst_mask');
$srcaddr = $srcaddr < 0 ? ($srcaddr + 0xFFFFFFFF + 1):$srcaddr;
$srcaddr = inet_ntoa(pack("N", $srcaddr));
$dstaddr = $dstaddr < 0 ? ($dstaddr + 0xFFFFFFFF + 1):$dstaddr;
$dstaddr = inet_ntoa(pack("N", $dstaddr));
$nexthop = $nexthop < 0 ? ($nexthop + 0xFFFFFFFF + 1):$nexthop;
$nexthop = inet_ntoa(pack("V", $nexthop));
print "$unix_secs,$dpkts,$doctets,$first,$last,$srcaddr,$dstaddr,$nexthop,$input,$output,$srcport,$dstport,$prot,$tos,$tcp_flags,$src_mask,$dst_mask,$src_as,$dst_as\n";
$twig->purge; # free memory
Код: Выделить всё
#!/bin/bash
/usr/local/netflow/bin/flow-import -z0 -f2 -V5 -m 3FF31E1 -d3 <$1 >$2
to bas
Сделал всё по Вашим рекомендациям,получил файл iptraffic.csv .
Потом
ascii2flow.sh iptraffic.csv flows, затем
cat flows | /usr/local/netflow/bin/flow-send 127.0.0.1/127.0.0.1/9996
tcpdump -i lo port 9996 показывает наличие пакетов.Трафик не появляется.Я сделал выборку по времени ,соответствующему исходному gigabase файлу.
Прошу не пинать сильно,что я делаю не так?
Сделал всё по Вашим рекомендациям,получил файл iptraffic.csv .
Потом
ascii2flow.sh iptraffic.csv flows, затем
cat flows | /usr/local/netflow/bin/flow-send 127.0.0.1/127.0.0.1/9996
tcpdump -i lo port 9996 показывает наличие пакетов.Трафик не появляется.Я сделал выборку по времени ,соответствующему исходному gigabase файлу.
Прошу не пинать сильно,что я делаю не так?
2Yura_Sakh:
для экспорта статистики я использовал следующий скрипт:
и все импортировалось.
Только есть одно замечание. UTM5 не обращает внимание на timestamp в нетфлоу записях. Поэтому надо смотреть появляется ли детальная статистика именно в текущее время, а не в тот период времени за который она была первоначально экспортирована.
для экспорта статистики я использовал следующий скрипт:
Код: Выделить всё
#!/bin/bash
# Send all flows to collect
/usr/local/netflow/bin/flow-cat $1 | /usr/local/netflow/bin/flow-send -V5 -d5 -x1 0/127.0.0.1/9996
Только есть одно замечание. UTM5 не обращает внимание на timestamp в нетфлоу записях. Поэтому надо смотреть появляется ли детальная статистика именно в текущее время, а не в тот период времени за который она была первоначально экспортирована.
вот в таком виде у меня запустилась
Код: Выделить всё
use strict;
use XML::Twig;
use Socket;
print "#:unix_secs,dpkts,doctets,first,last,srcaddr,dstaddr,nexthop,input,output,srcport,dstport,prot,tos,tcp_flags,src_mask,dst_mask,src_as,dst_as\n";
my $twig= new XML::Twig( # create the twig
TwigRoots =>
{ iptraffic_raw => \&name, # build the twig only for name elements
} , # and call the name handler for each
);
if( my $file= $ARGV[0]) { $twig->parsefile( $file); } # process the twig
else { $twig->parse( \*STDIN); }
sub name {
my( $twig, $netflow)= @_;
my $unix_secs = $netflow->field ('timestamp');
my $srcaddr = $netflow->field ('srcaddr');
my $dstaddr = $netflow->field ('dstaddr');
my $nexthop = $netflow->field ('nexthop');
my $input = $netflow->field ('input');
my $output = $netflow->field ('output');
my $dpkts = $netflow->field ('dPkts');
my $doctets = $netflow->field ('dOctets');
my $first = $netflow->field ('First');
my $last = $netflow->field ('Last');
my $srcport = $netflow->field ('srcport');
my $dstport = $netflow->field ('dstport');
my $tcp_flags = $netflow->field ('tcp_flags');
my $prot = $netflow->field ('prot');
my $tos = $netflow->field ('tos');
my $src_as = $netflow->field ('src_as');
my $dst_as = $netflow->field ('dst_as');
my $src_mask = $netflow->field ('src_mask');
my $dst_mask = $netflow->field ('dst_mask');
$srcaddr = $srcaddr < 0 ? ($srcaddr + 0xFFFFFFFF + 1):$srcaddr;
$srcaddr = inet_ntoa(pack("N", $srcaddr));
$dstaddr = $dstaddr < 0 ? ($dstaddr + 0xFFFFFFFF + 1):$dstaddr;
$dstaddr = inet_ntoa(pack("N", $dstaddr));
$nexthop = $nexthop < 0 ? ($nexthop + 0xFFFFFFFF + 1):$nexthop;
$nexthop = inet_ntoa(pack("V", $nexthop));
print "$unix_secs,$dpkts,$doctets,$first,$last,$srcaddr,$dstaddr,$nexthop,$input,$output,$srcport,$dstport,$prot,$tos,$tcp_flags,$src_mask,$dst_mask,$src_as,$dst_as\n";
$twig->purge;
};# free memory