#!/usr/local/bin/python # Copyright (C) 2005 Krzysztof Kozlowski # License: GNU General Public License version 2 # http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # version 2 as published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # Ostatnia zmiana: 27.06.2005 # # Utworzenie strony HTML z wykresami ruchu sieciowego na podstawie # danych z "traffic_get" # import sys import os import string # Ustawienia : TABLE_HEIGHT = 200 # Wysokosc tabeli TD_WIDTH = 15 # Szerokosc jednego slupka MAX_COLS = 30 # Ilosc slupkow if ((len(sys.argv) != 4) or (not(os.path.exists(sys.argv[1])))): print 'Wywolanie: ' print ' ' + sys.argv[0] + ' plik_wej plik_wyj tytul' sys.exit() else: PLIK_IN = sys.argv[1] PLIK_OUT = sys.argv[2] TYTUL = sys.argv[3] # ######################################## # Funkcje # Dodaje do tablic jedna wartosc z cols[] # Jezeli (new_value==1), to jako nowy element w tablicy, a inaczej dodaje ostatniego elementu def add_one_value(sum_tbl, pkts_tbl, date_tbl, cols, new_value): if (new_value == 1): sum_tbl.append(int(cols[1])) pkts_tbl.append(int(cols[2])) date_tbl.append(cols[0]) else: sum_tbl[len(sum_tbl)-1] = sum_tbl[len(sum_tbl)-1] + int(cols[1]) pkts_tbl[len(pkts_tbl)-1] = pkts_tbl[len(pkts_tbl)-1] + int(cols[2]) date_tbl[len(date_tbl)-1] = cols[0] # Zwraca maksymalna wartosc w tabeli def find_max_value(table): max = 1 ; for i in table: if (i > max): max = i return max # Ucina tabele do "max_size" def trim_table(tbl, max_size): if (len(tbl) > max_size): nadmiar = len(tbl) - max_size del tbl[0:nadmiar] # Skaluje wartosc "i" transferu wzgledem wartosci "max" def norm_sum_maxes(i, max): if (i > max): return (i/1024/1024, '[MB]') else: return (i/1024, '[kb]') # Skaluje wartosc "i" liczby pakietow wzgledem wartosci "max" def norm_pkts_maxes(i, max): if (i > max): return (i/1000, '[tys. pkt]') else: return (i, '[pkt]') # Wypisuje do "file" kolumne legendy def HTML_write_legend(file, tbl_height, max, max_legend): # Legenda : file.write(' \n') file.write(' \n') file.write(' \n') file.write('
' + str(max) + ' ' + max_legend + '
\n') ; file.write(' \n') file.write(' \n') file.write('
' + str(max/2) + ' ' + max_legend +'
\n') ; file.write('
0
\n') file.write(' \n') # Rysuje do "file" jeden slupek wykresu : def HTML_make_one_bar(file, height, width): file.write(' \n') file.write(' \n') file.write('
 
\n') # Wypisuje do "file" kolejne kolumny reprezentujace dane def HTML_write_data(file, tbl_height, td_width, max, data): for i in data: file.write(' \n') wysokosc = int((float(i)/max * tbl_height)) HTML_make_one_bar(file, wysokosc, td_width) file.write(' \n') def HTML_write_chart_title(file, title): file.write('\n

' + title + '

\n') ; # Ryzuje do "file" caly wykres o wysokosci "tbl_height", szerokosci kolumny "td_width" # Z maksymalna wartoscia "max", opisem osi "max_legend" i wartoscia na osi "max_legend_val" # Danymi sa "data", a podstawe czasu stanowi "date_data" def HTML_write_one_chart(file, tbl_height, td_width, max, max_legend, max_legend_val, data, date_data): file.write('\n\n') file.write('\n') HTML_write_legend(file, tbl_height, max_legend_val, max_legend) HTML_write_data(file, tbl_height, td_width, max, data) file.write('\n') HTML_write_bottom_dates(file, len(date_data), date_data[0], date_data[int((len(date_data)-1)/2)], date_data[len(date_data)-1]) file.write('
\n') file.write('

\n') # Wypisuje do "file" daty pod pozioma osia def HTML_write_bottom_dates(file, columns, start, middle, stop): if (columns > 5): file.write(' \n') ; file.write('\n') ; file.write(' \n') ; file.write(' \n') ; file.write(' \n') ; file.write(' \n') ; file.write(' \n') ; file.write(' \n') ; file.write('
' + start + '' + middle + '' + stop + '
\n') ; file.write('\n') ; # ######################################## # ODSTEP = 1h DANE = open(PLIK_IN,"r") HTML = open(PLIK_OUT,"w") HTML.write('\n') HTML.write('
' + TYTUL + '


') SUM_1h = [] SUM_8h = [] SUM_24h = [] PKTS_1h = [] PKTS_8h = [] PKTS_24h = [] DATES_1h = [] DATES_8h = [] DATES_24h = [] MAX_SUM_1h = 1 MAX_SUM_8h = 1 MAX_SUM_24h = 1 MAX_PKTS_1h = 1 MAX_PKTS_8h = 1 MAX_PKTS_24h = 1 # Wczytanie danych : count = 0 for line in DANE.readlines(): cols = string.split(line, "\t\t") add_one_value(SUM_1h, PKTS_1h, DATES_1h, cols, 1) if (count % 8 == 0): add_one_value(SUM_8h, PKTS_8h, DATES_8h, cols, 1) else: add_one_value(SUM_8h, PKTS_8h, DATES_8h, cols, 0) if (count % 24 == 0): add_one_value(SUM_24h, PKTS_24h, DATES_24h, cols, 1) else: add_one_value(SUM_24h, PKTS_24h, DATES_24h, cols, 0) count = count + 1 # Skasowanie nadmiarowych danych : trim_table(SUM_1h, MAX_COLS) trim_table(PKTS_1h, MAX_COLS) trim_table(DATES_1h, MAX_COLS) trim_table(SUM_8h, MAX_COLS) trim_table(PKTS_8h, MAX_COLS) trim_table(DATES_8h, MAX_COLS) trim_table(SUM_24h, MAX_COLS) trim_table(PKTS_24h, MAX_COLS) trim_table(DATES_24h, MAX_COLS) # Znajdywanie maksymalnych wartosci : MAX_SUM_1h = find_max_value(SUM_1h) MAX_PKTS_1h = find_max_value(PKTS_1h) MAX_SUM_8h = find_max_value(SUM_8h) MAX_PKTS_8h = find_max_value(PKTS_8h) MAX_SUM_24h = find_max_value(SUM_24h) MAX_PKTS_24h = find_max_value(PKTS_24h) # Normalizacja maksimow : # 2 MB = 2 * 1024 * 1024 = 2097152 (MAX_SUM_1h_LEGEND_VAL, MAX_SUM_1h_LEGEND) = norm_sum_maxes(MAX_SUM_1h, 2097152) (MAX_PKTS_1h_LEGEND_VAL, MAX_PKTS_1h_LEGEND) = norm_pkts_maxes(MAX_PKTS_1h, 4000) (MAX_SUM_8h_LEGEND_VAL, MAX_SUM_8h_LEGEND) = norm_sum_maxes(MAX_SUM_8h, 2097152) (MAX_PKTS_8h_LEGEND_VAL, MAX_PKTS_8h_LEGEND) = norm_pkts_maxes(MAX_PKTS_8h, 4000) (MAX_SUM_24h_LEGEND_VAL, MAX_SUM_24h_LEGEND) = norm_sum_maxes(MAX_SUM_24h, 2097152) (MAX_PKTS_24h_LEGEND_VAL, MAX_PKTS_24h_LEGEND) = norm_pkts_maxes(MAX_PKTS_24h, 4000) # Tabelka sumarycznego 1-godzinnego transferu : HTML_write_chart_title(HTML, TYTUL + ' - wykres transferu (co 1h)') HTML_write_one_chart(HTML, TABLE_HEIGHT, TD_WIDTH, MAX_SUM_1h, MAX_SUM_1h_LEGEND, MAX_SUM_1h_LEGEND_VAL, SUM_1h, DATES_1h) # Tabelka pakietow : HTML_write_chart_title(HTML, TYTUL + ' - wykres liczby pakietow (co 1h)') HTML_write_one_chart(HTML, TABLE_HEIGHT, TD_WIDTH, MAX_PKTS_1h, MAX_PKTS_1h_LEGEND, MAX_PKTS_1h_LEGEND_VAL, PKTS_1h, DATES_1h) HTML_write_chart_title(HTML, TYTUL + ' - wykres transferu (co 8h)') HTML_write_one_chart(HTML, TABLE_HEIGHT, TD_WIDTH, MAX_SUM_8h, MAX_SUM_8h_LEGEND, MAX_SUM_8h_LEGEND_VAL, SUM_8h, DATES_8h) HTML_write_chart_title(HTML, TYTUL + ' - wykres liczby pakietow (co 8h)') HTML_write_one_chart(HTML, TABLE_HEIGHT, TD_WIDTH, MAX_PKTS_8h, MAX_PKTS_8h_LEGEND, MAX_PKTS_8h_LEGEND_VAL, PKTS_8h, DATES_8h) HTML_write_chart_title(HTML, TYTUL + ' - wykres transferu (co 24h)') HTML_write_one_chart(HTML, TABLE_HEIGHT, TD_WIDTH, MAX_SUM_24h, MAX_SUM_24h_LEGEND, MAX_SUM_24h_LEGEND_VAL, SUM_24h, DATES_24h) HTML_write_chart_title(HTML, TYTUL + ' - wykres liczby pakietow (co 24h)') HTML_write_one_chart(HTML, TABLE_HEIGHT, TD_WIDTH, MAX_PKTS_24h, MAX_PKTS_24h_LEGEND, MAX_PKTS_24h_LEGEND_VAL, PKTS_24h, DATES_24h) HTML.write('\n\n') HTML.close() DANE.close()