Witam ponownie
Mam sobie plik wykonywalny, który pinguje wartości zawarte w tablicy. Po wykonaniu pingów wysyła do pliku html poprzez echo informację jest połączenie:wartość_z_tablicy, lub brak połączenia:wartość_z_tablicy.
Przykład tutaj:
http://83.238.199.3:8010/
Do pliku wrzuciłem polecenie, które zapisuję kopię co pół godziny (plik wykonywany jest co pół godziny). Jednakże chciałbym stworzyć plik w bashu, który będzie tworzył plik html z tabelką, która wczytuje te dane z kopiowanych co pół godziny pliku.
Jakimi poleceniami mogę się posiłkować? Wiem jak stworzyć tabelę w htmlu, jednak nie wiem jak przerzucić te wartości z tablicy i jak wczytywać dane z tych plików?
[+] bash - wczytywanie danych z pliku do tabeli html
-
- Posty: 10
- Rejestracja: 22 stycznia 2009, 08:16
1. Dlaczego akurat bash? przecież bozia dała Perla.
2. Nie bardzo rozumiem o co chodzi... czy o to, żeby z plików:
a.txt:
b.txt
zrobic cos takiego:
2. Nie bardzo rozumiem o co chodzi... czy o to, żeby z plików:
a.txt:
Kod: Zaznacz cały
jest polaczaenie: 10
nie ma polaczenia 20
Kod: Zaznacz cały
jest polaczenie 20
nie ma polaczenia: 10
Kod: Zaznacz cały
| a.txt | b.txt
--------------------
10 | tak | nie
20 | nie | tal
-
- Posty: 10
- Rejestracja: 22 stycznia 2009, 08:16
Nie, to nie o to chodzi.
W pliku wykonywalnym, wykonuję pingi do urządzeń (mam zmienną tablica, gdzie są ostatnie cyfry ip urządzenia). Po wykonaniu pingów otrzymuję plik log, w którym są wartości tablicy, a po dwukropku 1 lub 0 (działa nie działa).
Czyli mam adres:
192.168.0.
Tablica ma ostatnie wartości i je pinguję np:
192.168.0.(tu pobiera wartości zadeklarowane z tablicy np: 54)
Po spingowaniu adresów trzema pingami Dostaję 1, lub 0 zależnie od tego czy działa, czy nie. plik log wygląda więc tak:
54:1
122:1
125:0
177:1
W tym miejscu wartości są kopiowane (kopiowane co pół godziny gdyż, plik wykonywalny jest wykonywany właśnie co pół godziny)
Chciałbym te dane wczytać do tabelki - czyli tworzę plik, do którego są wysyłane polecenia htmlowskie.
I tu właśnie jest problem. Jak wstrzelić do pierwszej kolumny wartości z tablicy (ostatnia cząstka adresu IP), oraz jak w następnych kolumnach wczytywać te pliki log, czyli działa, nie działa, ewentualnie jak zamieniać wartości - że zamiast 1 tworzy zieloną komórkę, a zamiast 0 tworzy czerwoną.
W pliku wykonywalnym, wykonuję pingi do urządzeń (mam zmienną tablica, gdzie są ostatnie cyfry ip urządzenia). Po wykonaniu pingów otrzymuję plik log, w którym są wartości tablicy, a po dwukropku 1 lub 0 (działa nie działa).
Czyli mam adres:
192.168.0.
Tablica ma ostatnie wartości i je pinguję np:
192.168.0.(tu pobiera wartości zadeklarowane z tablicy np: 54)
Po spingowaniu adresów trzema pingami Dostaję 1, lub 0 zależnie od tego czy działa, czy nie. plik log wygląda więc tak:
54:1
122:1
125:0
177:1
W tym miejscu wartości są kopiowane (kopiowane co pół godziny gdyż, plik wykonywalny jest wykonywany właśnie co pół godziny)
Chciałbym te dane wczytać do tabelki - czyli tworzę plik, do którego są wysyłane polecenia htmlowskie.
I tu właśnie jest problem. Jak wstrzelić do pierwszej kolumny wartości z tablicy (ostatnia cząstka adresu IP), oraz jak w następnych kolumnach wczytywać te pliki log, czyli działa, nie działa, ewentualnie jak zamieniać wartości - że zamiast 1 tworzy zieloną komórkę, a zamiast 0 tworzy czerwoną.
chyba łapię...
masz plik log2html.pl
a korzysta się z tego tak:
./log2html.pl < plik_z_logiem.log > wynik_tabelki.html
edit:
możesz nawet odpalać swój program co to pinguje tak (jeżeli wywala ona swojego loga do STDOUT):
program_do_pingowania | log2html > tabelki.html
masz plik log2html.pl
Kod: Zaznacz cały
#!/usr/bin/perl -w
use strict;
use warnings;
my $IP = "192.168.0.";
my $MSG_OK = "mamy kontakt z bazą";
my $MSG_ERR = "Houston mamy problem";
print "<table>\n";
while (<>) {
chomp;
if (/^\s*([0-9]+)\s*:\s*([0-9]+)\s*/) {
my $color = "green";
my $msg = $MSG_OK;
if ($2 == 0) {
$color = "red";
$msg = $MSG_ERR;
}
print "\t<tr><td>$IP$1</td><td style=\"color: $color;\">$msg</td></tr>\n";
}
}
print "</table>\n";
0;
./log2html.pl < plik_z_logiem.log > wynik_tabelki.html
edit:
możesz nawet odpalać swój program co to pinguje tak (jeżeli wywala ona swojego loga do STDOUT):
program_do_pingowania | log2html > tabelki.html
-
- Posty: 10
- Rejestracja: 22 stycznia 2009, 08:16
Tak wygląda plik:
Mianowicie:
Jeden plik wykonuje pingi, tworzy log z datą, kolejne polecenie tworzy plik, który ma odczytywać dane.
Po wykonaniu mamy w pliku main_czasstart.log:
w drugiej kolumnie z pliku main_00-30.log itp.
Dane zamieniać na kolor komórki zielony lub czerwony. Czy mam to jakąś pętlą zrobić czy jak? Wiem jak wrzucić tabelkę do htmla, jak sprawić by była kolorowa, lecz nie wiem jak wczytać dane do niej.
[ Dodano: 2009-01-26, 07:57 ]
Czy jest ktoś w stanie pomóc? Czy coś bardziej wyjaśnić?
[ Dodano: 2009-02-04, 08:13 ]
Nie wiem czy komuś się przyda:
Najpierw wczytuje dane (0,1) z pliku, który zawiera:
Datę
1:12
0:30
1:45
Obcinam datę więc wczytanie:
Następnie sprawdzam czy 1 czy 0:
Kod: Zaznacz cały
#!/bin/bash
czas_start=`date +"%H-%M"`
plik=/var/www/testnet/testy/main_$czas_start.log
plik2=/var/www/testnet/testy/tabelka.html
date > $plik
#--------------petla bridge z podsiecia 52
tablica=(26 48 49 73 77 101 )
for ((a=0;a<6;a++)) ; do
extping="192.168.52.${tablica[$a]}"
teststracone=$(/bin/ping -c 3 -w 3 $extping|grep "100% packet loss")
testrech=$(/bin/ping -c 3 -w 3 $extping|grep Network)
if [ "$teststracone" = "" ] ; then
if [ "$testrech" = "" ] ; then
echo "1:${tablica[$a]}" >> $plik
else
echo "0:${tablica[$a]}" >> $plik
fi
else
echo "0:${tablica[$a]}" >> $plik
fi
done
#done
#plik html tabelka
##############################
echo "<!DOCTYPE HTML PUBLIC "-//W3C//DTD// HTML 4.01 Transitional//EN">" > $plik2
echo "<html><head>" >> $plik2
echo "<meta http-equiv=content-type content=text/html; CHARSET=iso-8859-2>" >> $plik2
echo "</head>" >> $plik2
echo "<body>" >> $plik2
date >> $plik2
echo "</body></html>" >> $plik2
Jeden plik wykonuje pingi, tworzy log z datą, kolejne polecenie tworzy plik, który ma odczytywać dane.
Po wykonaniu mamy w pliku main_czasstart.log:
Chciałbym aby w pierwszej kolumnie były dane odczytane z pliku main_00-00.log,1:26
1:48
1:49
1:73
0:77
0:101
192.168.52.77 i 101 nie działają jak widać.
I jak teraz po wklepaniu daty do pliku2, ma zczytywać dane? mam na myśli tabelkę:
--AP--00:00|00:30|01:00|01:30|02:00|... (tak dalej co pół godziny)
26___|_____|_____|_____|______|______|
48___|_____|_____|_____|______|______|
49___|_____|_____|_____|______|______|
73___|_____|_____|_____|______|______|
77___|_____|_____|_____|______|______|
101__|_____|_____|_____|______|______|
w drugiej kolumnie z pliku main_00-30.log itp.
Dane zamieniać na kolor komórki zielony lub czerwony. Czy mam to jakąś pętlą zrobić czy jak? Wiem jak wrzucić tabelkę do htmla, jak sprawić by była kolorowa, lecz nie wiem jak wczytać dane do niej.
[ Dodano: 2009-01-26, 07:57 ]
Czy jest ktoś w stanie pomóc? Czy coś bardziej wyjaśnić?
[ Dodano: 2009-02-04, 08:13 ]
Nie wiem czy komuś się przyda:
Najpierw wczytuje dane (0,1) z pliku, który zawiera:
Datę
1:12
0:30
1:45
Obcinam datę więc wczytanie:
Kod: Zaznacz cały
tail -n +2 /var/.../testy/main.log | cut -d\: -f1 |\
Kod: Zaznacz cały
while read x; do
case "$x" in
1) echo "<tr><td bg color="green">1</td></tr> >> $plik;;
0) echo "<tr><td bg color="red">1</td></tr> >> $plik;;
*);;
esac
done