#!/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(' | ' + str(max) + ' ' + max_legend + ' | \n')
file.write(' \n') ;
file.write(' \n')
file.write(' | ' + str(max/2) + ' ' + max_legend +' | \n')
file.write(' \n') ;
file.write(' \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(' | ' + start + ' | \n') ;
file.write(' ' + middle + ' | \n') ;
file.write(' ' + stop + ' | \n') ;
file.write(' \n') ;
file.write(' \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()