[+] bash - wczytywanie danych z pliku do tabeli html

Potrzebujesz pomocy z C, C++, perl, python, itp.
blackmetal_x
Posty: 10
Rejestracja: 22 stycznia 2009, 08:16

[+] bash - wczytywanie danych z pliku do tabeli html

Post autor: blackmetal_x »

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?
Awatar użytkownika
kajoj
Posty: 12
Rejestracja: 09 stycznia 2009, 11:53
Lokalizacja: Bydgoszcz

Post autor: kajoj »

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:

Kod: Zaznacz cały

jest polaczaenie: 10
nie ma polaczenia 20
b.txt

Kod: Zaznacz cały

jest polaczenie 20
nie ma polaczenia: 10
zrobic cos takiego:

Kod: Zaznacz cały

    | a.txt | b.txt
--------------------
10 | tak | nie
20 | nie | tal
blackmetal_x
Posty: 10
Rejestracja: 22 stycznia 2009, 08:16

Post autor: blackmetal_x »

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ą.
Awatar użytkownika
kajoj
Posty: 12
Rejestracja: 09 stycznia 2009, 11:53
Lokalizacja: Bydgoszcz

Post autor: kajoj »

chyba łapię...
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;
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
blackmetal_x
Posty: 10
Rejestracja: 22 stycznia 2009, 08:16

Post autor: blackmetal_x »

Tak wygląda plik:

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 
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:
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__|_____|_____|_____|______|______|
Chciałbym aby w pierwszej kolumnie były dane odczytane z pliku main_00-00.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:

Kod: Zaznacz cały

tail -n +2 /var/.../testy/main.log | cut -d\: -f1 |\
Następnie sprawdzam czy 1 czy 0:

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
ODPOWIEDZ