#!/usr/bin/env python3 ''' NAME: lf_report_test.py PURPOSE: Common file for testing lf_report and lf_graph Library generates html and pdf output SETUP: /lanforge/html-reports directory needs to be present or output generated in local file EXAMPLE: ./lf_report_test.py : currently script does not accept input COPYWRITE Copyright 2021 Candela Technologies Inc License: Free to distribute and modify. LANforge systems must be licensed. INCLUDE_IN_README ''' import sys import os import importlib import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np import pandas as pd import pdfkit import random import argparse sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../"))) lf_report = importlib.import_module("py-scripts.lf_report") lf_report = lf_report.lf_report lf_graph = importlib.import_module("py-scripts.lf_graph") lf_bar_graph = lf_graph.lf_bar_graph lf_scatter_graph = lf_graph.lf_scatter_graph lf_stacked_graph = lf_graph.lf_stacked_graph lf_horizontal_stacked_graph = lf_graph.lf_horizontal_stacked_graph # Unit Test def main(): # Testing: generate data frame parser = argparse.ArgumentParser( prog="lf_report_test.py", formatter_class=argparse.RawTextHelpFormatter, description='''\ ----------------- NAME: lf_report_test.py PURPOSE: Common file for testing lf_report and lf_graph Library generates html and pdf output SETUP: /lanforge/html-reports directory needs to be present or output generated in local file EXAMPLE: ./lf_report_test.py : currently script does not accept input COPYWRITE Copyright 2021 Candela Technologies Inc License: Free to distribute and modify. LANforge systems must be licensed. INCLUDE_IN_README ''') parser.add_argument( '--mgr', '--lfmgr', dest='lfmgr', help='sample argument: where LANforge GUI is running', default='localhost') # the args parser is not really used , this is so the report is not generated when testing # the imports with --help args = parser.parse_args() print("LANforge manager {lfmgr}".format(lfmgr=args.lfmgr)) dataframe = pd.DataFrame({ 'product': ['CT521a-264-1ac-1n', 'CT521a-1ac-1ax', 'CT522-264-1ac2-1n', 'CT523c-2ac2-db-10g-cu', 'CT523c-3ac2-db-10g-cu', 'CT523c-8ax-ac10g-cu', 'CT523c-192-2ac2-1ac-10g'], 'radios': [1, 1, 2, 2, 6, 9, 3], 'MIMO': ['N', 'N', 'N', 'Y', 'Y', 'Y', 'Y'], 'stations': [200, 64, 200, 128, 384, 72, 192], '1 mbps': [300, 300, 300, 10000, 10000, 10000, 10000] }) print(dataframe) # Testing: generate data frame dataframe2 = pd.DataFrame({ 'station': [1, 2, 3, 4, 5, 6, 7], 'time_seconds': [23, 78, 22, 19, 45, 22, 25] }) # report = lf_report(_dataframe=dataframe) report = lf_report() report_path = report.get_path() report_path_date_time = report.get_path_date_time() print("path: {}".format(report_path)) print("path_date_time: {}".format(report_path_date_time)) report.set_title("Banner Title One") report.build_banner() # report.set_title("Banner Title Two") # report.build_banner() report.set_table_title("Title One") report.build_table_title() report.set_table_dataframe(dataframe) report.build_table() report.set_table_title("Title Two") report.build_table_title() report.set_table_dataframe(dataframe2) report.build_table() set_xaxis = [] y_set1 = [] y_set2 = [] y_set3 = [] for i in range(0, 30): set_xaxis.append(i) y_set1.append(random.randint(1, 50)) y_set2.append(random.randint(1, 50)) y_set3.append(random.randint(1, 50)) # test lf_graph in report dataset = [y_set1, y_set2, y_set3] x_axis_values = set_xaxis report.set_graph_title("Graph Title") report.build_graph_title() graph = lf_bar_graph(_data_set=dataset, _xaxis_name="stations", _yaxis_name="Throughput 2 (Mbps)", _xaxis_categories=x_axis_values, _graph_image_name="Bi-single_radio_2.4GHz", _label=["bi-downlink", "bi-uplink", 'uplink'], _color=['darkorange', 'forestgreen', 'blueviolet'], _color_edge='red', _grp_title="Throughput for each clients", _xaxis_step=5, _show_bar_value=True, _text_font=7, _text_rotation=45, _xticks_font=7, _legend_loc="best", _legend_box=(1, 1), _legend_ncol=1, _legend_fontsize=None, _enable_csv=True) graph_png = graph.build_bar_graph() print("graph name {}".format(graph_png)) report.set_graph_image(graph_png) # need to move the graph image to the results report.move_graph_image() if graph.enable_csv: report.set_csv_filename(graph_png) report.move_csv_file() report.build_graph() set1 = [1, 2, 3, 4] set2 = [[45, 67, 45, 34], [34, 56, 45, 34], [45, 78, 23, 45]] graph2 = lf_scatter_graph(_x_data_set=set1, _y_data_set=set2, _xaxis_name="x-axis", _values=None, _yaxis_name="y-axis", _graph_image_name="image_name1", _color=None, _label=["s1", "s2", "s3"], _enable_csv=False) graph_png = graph2.build_scatter_graph() print("graph name {}".format(graph_png)) report.set_graph_image(graph_png) report.move_graph_image() report.build_graph() # this will generate graph which is independent,we can customize the value # with different colors graph2 = lf_scatter_graph(_x_data_set=set1, _y_data_set=[45, 67, 45, 34], _values=[0, 0, 0, 1], _xaxis_name="x-axis", _yaxis_name="y-axis", _graph_image_name="image_name_map", _color=None, _label=["s1", "s2"], _enable_csv=False) graph_png = graph2.build_scatter_graph() print("graph name {}".format(graph_png)) report.set_graph_image(graph_png) report.move_graph_image() report.build_graph() dataset = [["1", "2", "3", "4"], [12, 45, 67, 34], [23, 67, 23, 12], [25, 45, 34, 23]] graph = lf_stacked_graph(_data_set=dataset, _xaxis_name="Stations", _yaxis_name="Login PASS/FAIL", _label=['Success', 'Fail', 'both'], _graph_image_name="login_pass_fail1", _color=None, _enable_csv=False) graph_png = graph.build_stacked_graph() print("graph name {}".format(graph_png)) report.set_graph_image(graph_png) report.move_graph_image() report.build_graph() graph = lf_horizontal_stacked_graph(_seg=2, _yaxis_set=('A', 'B'), _xaxis_set1=[12, 65], _xaxis_set2=[23, 34], _unit="", _xaxis_name="Stations", _label=['Success', 'Fail'], _graph_image_name="image_name_pass_fail", _color=["r", "g"], _figsize=(9, 4), _enable_csv=False) graph_png = graph.build_horizontal_stacked_graph() print("graph name {}".format(graph_png)) report.set_graph_image(graph_png) report.move_graph_image() report.build_graph() # report.build_all() html_file = report.write_html() print("returned file {}".format(html_file)) print(html_file) # try other pdf formats # report.write_pdf() # report.write_pdf(_page_size = 'A3', _orientation='Landscape') # report.write_pdf(_page_size = 'A4', _orientation='Landscape') report.write_pdf(_page_size='Legal', _orientation='Landscape') # report.write_pdf(_page_size = 'Legal', _orientation='Portrait') # report.generate_report() if __name__ == "__main__": main()