mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-11-01 11:18:03 +00:00
cc_9800_3504.py:COPYWRITE cc_module_9800_3504.py:COPYWRITE cc_module_test.py:COPYWRITE controller.py:COPYWRITE lf_tx_power.py:COPYWRITE py-scripts/lf_csv.py:COPYWRITE py-scripts/lf_graph.py:COPYWRITE py-scripts/lf_kpi_csv.py:COPYWRITE py-scripts/lf_pcap.py:COPYWRITE py-scripts/lf_report_test.py:COPYWRITE py-scripts/lf_snp_test.py:COPYWRITE Signed-off-by: Chuck SmileyRekiere <chuck.smileyrekiere@candelatech.com>
619 lines
22 KiB
Python
Executable File
619 lines
22 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
NAME: lf_graph.py
|
|
|
|
PURPOSE:
|
|
Common Library for generating graphs for LANforge output
|
|
|
|
SETUP:
|
|
/lanforge/html-reports directory needs to be present or output generated in local file
|
|
|
|
EXAMPLE:
|
|
see: /py-scritps/lf_report_test.py for example
|
|
|
|
COPYRIGHT:
|
|
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 numpy as np
|
|
import pdfkit
|
|
from matplotlib.colors import ListedColormap
|
|
import argparse
|
|
|
|
sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../")))
|
|
|
|
lf_csv = importlib.import_module("py-scripts.lf_csv")
|
|
lf_csv = lf_csv.lf_csv
|
|
|
|
# internal candela references included during intial phases, to be deleted
|
|
# at future date
|
|
|
|
# graph reporting classes
|
|
|
|
|
|
class lf_bar_graph:
|
|
def __init__(self, _data_set=None,
|
|
_xaxis_name="x-axis",
|
|
_yaxis_name="y-axis",
|
|
_xaxis_categories=None,
|
|
_xaxis_label=None,
|
|
_graph_title="",
|
|
_title_size=16,
|
|
_graph_image_name="image_name",
|
|
_label=None,
|
|
_color=None,
|
|
_bar_width=0.25,
|
|
_color_edge='grey',
|
|
_font_weight='bold',
|
|
_color_name=None,
|
|
_figsize=(10, 5),
|
|
_show_bar_value=False,
|
|
_xaxis_step=1,
|
|
_xticks_font=None,
|
|
_xaxis_value_location=0,
|
|
_text_font=None,
|
|
_text_rotation=None,
|
|
_grp_title="",
|
|
_legend_handles=None,
|
|
_legend_loc="best",
|
|
_legend_box=None,
|
|
_legend_ncol=1,
|
|
_legend_fontsize=None,
|
|
_dpi=96,
|
|
_enable_csv=False):
|
|
|
|
if _data_set is None:
|
|
_data_set = [[30.4, 55.3, 69.2, 37.1], [45.1, 67.2, 34.3, 22.4], [22.5, 45.6, 12.7, 34.8]]
|
|
if _xaxis_categories is None:
|
|
_xaxis_categories = [1, 2, 3, 4]
|
|
if _xaxis_label is None:
|
|
_xaxis_label = ["a", "b", "c", "d"]
|
|
if _label is None:
|
|
_label = ["bi-downlink", "bi-uplink", 'uplink']
|
|
if _color_name is None:
|
|
_color_name = ['lightcoral', 'darkgrey', 'r', 'g', 'b', 'y']
|
|
self.data_set = _data_set
|
|
self.xaxis_name = _xaxis_name
|
|
self.yaxis_name = _yaxis_name
|
|
self.xaxis_categories = _xaxis_categories
|
|
self.xaxis_label = _xaxis_label
|
|
self.title = _graph_title
|
|
self.title_size = _title_size
|
|
self.graph_image_name = _graph_image_name
|
|
self.label = _label
|
|
self.color = _color
|
|
self.bar_width = _bar_width
|
|
self.color_edge = _color_edge
|
|
self.font_weight = _font_weight
|
|
self.color_name = _color_name
|
|
self.figsize = _figsize
|
|
self.show_bar_value = _show_bar_value
|
|
self.xaxis_step = _xaxis_step
|
|
self.xticks_font = _xticks_font
|
|
self._xaxis_value_location = _xaxis_value_location
|
|
self.text_font = _text_font
|
|
self.text_rotation = _text_rotation
|
|
self.grp_title = _grp_title
|
|
self.enable_csv = _enable_csv
|
|
self.lf_csv = lf_csv()
|
|
self.legend_handles = _legend_handles
|
|
self.legend_loc = _legend_loc
|
|
self.legend_box = _legend_box
|
|
self.legend_ncol = _legend_ncol
|
|
self.legend_fontsize = _legend_fontsize
|
|
|
|
def build_bar_graph(self):
|
|
if self.color is None:
|
|
i = 0
|
|
self.color = []
|
|
for _ in self.data_set:
|
|
self.color.append(self.color_name[i])
|
|
i = i + 1
|
|
|
|
plt.subplots(figsize=self.figsize)
|
|
i = 0
|
|
|
|
def show_value(rectangles):
|
|
for rect in rectangles:
|
|
h = rect.get_height()
|
|
plt.text(rect.get_x() + rect.get_width() / 2., h, h,
|
|
ha='center', va='bottom', rotation=self.text_rotation, fontsize=self.text_font)
|
|
|
|
for _ in self.data_set:
|
|
if i > 0:
|
|
br = br1
|
|
br2 = [x + self.bar_width for x in br]
|
|
rects = plt.bar(br2, self.data_set[i], color=self.color[i], width=self.bar_width,
|
|
edgecolor=self.color_edge, label=self.label[i])
|
|
if self.show_bar_value:
|
|
show_value(rects)
|
|
br1 = br2
|
|
i = i + 1
|
|
else:
|
|
br1 = np.arange(len(self.data_set[i]))
|
|
rects = plt.bar(br1, self.data_set[i], color=self.color[i], width=self.bar_width,
|
|
edgecolor=self.color_edge, label=self.label[i])
|
|
if self.show_bar_value:
|
|
show_value(rects)
|
|
i = i + 1
|
|
plt.xlabel(self.xaxis_name, fontweight='bold', fontsize=15)
|
|
plt.ylabel(self.yaxis_name, fontweight='bold', fontsize=15)
|
|
if self.xaxis_categories[0] == 0:
|
|
plt.xticks(np.arange(0,
|
|
len(self.xaxis_categories),
|
|
step=self.xaxis_step),
|
|
fontsize=self.xticks_font)
|
|
else:
|
|
plt.xticks([i + self._xaxis_value_location for i in np.arange(0, len(self.data_set[0]), step=self.xaxis_step)],
|
|
self.xaxis_categories, fontsize=self.xticks_font)
|
|
plt.legend(
|
|
handles=self.legend_handles,
|
|
loc=self.legend_loc,
|
|
bbox_to_anchor=self.legend_box,
|
|
ncol=self.legend_ncol,
|
|
fontsize=self.legend_fontsize)
|
|
plt.suptitle(self.title, fontsize=self.title_size)
|
|
plt.title(self.grp_title)
|
|
plt.gcf()
|
|
plt.savefig("%s.png" % self.graph_image_name, dpi=96)
|
|
plt.close()
|
|
print("{}.png".format(self.graph_image_name))
|
|
if self.enable_csv:
|
|
if self.data_set is not None and self.xaxis_categories is not None:
|
|
if len(self.xaxis_categories) == len(self.data_set[0]):
|
|
self.lf_csv.columns = []
|
|
self.lf_csv.rows = []
|
|
self.lf_csv.columns.append(self.xaxis_name)
|
|
self.lf_csv.columns.extend(self.label)
|
|
self.lf_csv.rows.append(self.xaxis_categories)
|
|
self.lf_csv.rows.extend(self.data_set)
|
|
self.lf_csv.filename = f"{self.graph_image_name}.csv"
|
|
self.lf_csv.generate_csv()
|
|
else:
|
|
raise ValueError(
|
|
"Length and x-axis values and y-axis values should be same.")
|
|
else:
|
|
print("No Dataset Found")
|
|
print("{}.csv".format(self.graph_image_name))
|
|
return "%s.png" % self.graph_image_name
|
|
|
|
|
|
class lf_scatter_graph:
|
|
def __init__(self,
|
|
_x_data_set=None,
|
|
_y_data_set=None,
|
|
_values=None,
|
|
_xaxis_name="x-axis",
|
|
_yaxis_name="y-axis",
|
|
_label=None,
|
|
_graph_image_name="image_name1",
|
|
_color=None,
|
|
_figsize=(9, 4),
|
|
_enable_csv=True):
|
|
if _x_data_set is None:
|
|
_x_data_set = ["sta0 ", "sta1", "sta2", "sta3"]
|
|
if _y_data_set is None:
|
|
_y_data_set = [[30, 55, 69, 37]]
|
|
if _label is None:
|
|
_label = ["num1", "num2"]
|
|
self.x_data_set = _x_data_set
|
|
self.y_data_set = _y_data_set
|
|
self.xaxis_name = _xaxis_name
|
|
self.yaxis_name = _yaxis_name
|
|
self.figsize = _figsize
|
|
self.graph_image_name = _graph_image_name
|
|
self.color = _color
|
|
self.label = _label
|
|
self.values = _values
|
|
self.enable_csv = _enable_csv
|
|
self.lf_csv = lf_csv()
|
|
|
|
def build_scatter_graph(self):
|
|
if self.color is None:
|
|
self.color = [
|
|
"orchid",
|
|
"lime",
|
|
"aquamarine",
|
|
"royalblue",
|
|
"darkgray",
|
|
"maroon"]
|
|
plt.subplots(figsize=self.figsize)
|
|
if self.values is None:
|
|
plt.scatter(
|
|
self.x_data_set,
|
|
self.y_data_set[0],
|
|
color=self.color[0],
|
|
label=self.label[0])
|
|
if len(self.y_data_set) > 1:
|
|
for i in range(1, len(self.y_data_set)):
|
|
plt.scatter(
|
|
self.x_data_set,
|
|
self.y_data_set[i],
|
|
color=self.color[i],
|
|
label=self.label[i])
|
|
plt.xlabel(self.xaxis_name, fontweight='bold', fontsize=15)
|
|
plt.ylabel(self.yaxis_name, fontweight='bold', fontsize=15)
|
|
plt.gcf().autofmt_xdate()
|
|
plt.legend()
|
|
else:
|
|
colours = ListedColormap(self.color)
|
|
scatter = plt.scatter(
|
|
self.x_data_set,
|
|
self.y_data_set,
|
|
c=self.values,
|
|
cmap=colours)
|
|
plt.xlabel(self.xaxis_name, fontweight='bold', fontsize=15)
|
|
plt.ylabel(self.yaxis_name, fontweight='bold', fontsize=15)
|
|
plt.gcf().autofmt_xdate()
|
|
plt.legend(handles=scatter.legend_elements()[0], labels=self.label)
|
|
plt.savefig("%s.png" % self.graph_image_name, dpi=96)
|
|
plt.close()
|
|
print("{}.png".format(self.graph_image_name))
|
|
if self.enable_csv:
|
|
self.lf_csv.columns = self.label
|
|
self.lf_csv.rows = self.y_data_set
|
|
self.lf_csv.filename = f"{self.graph_image_name}.csv"
|
|
self.lf_csv.generate_csv()
|
|
|
|
return "%s.png" % self.graph_image_name
|
|
|
|
|
|
class lf_stacked_graph:
|
|
def __init__(self,
|
|
_data_set=None,
|
|
_xaxis_name="Stations",
|
|
_yaxis_name="Numbers",
|
|
_label=None,
|
|
_graph_image_name="image_name2",
|
|
_color=None,
|
|
_figsize=(9, 4),
|
|
_enable_csv=True):
|
|
if _data_set is None:
|
|
_data_set = [[1, 2, 3, 4], [1, 1, 1, 1], [1, 1, 1, 1]]
|
|
if _label is None:
|
|
_label = ['Success', 'Fail']
|
|
self.data_set = _data_set # [x_axis,y1_axis,y2_axis]
|
|
self.xaxis_name = _xaxis_name
|
|
self.yaxis_name = _yaxis_name
|
|
self.figsize = _figsize
|
|
self.graph_image_name = _graph_image_name
|
|
self.label = _label
|
|
self.color = _color
|
|
self.enable_csv = _enable_csv
|
|
self.lf_csv = lf_csv()
|
|
|
|
def build_stacked_graph(self):
|
|
plt.subplots(figsize=self.figsize)
|
|
if self.color is None:
|
|
self.color = [
|
|
"darkred",
|
|
"tomato",
|
|
"springgreen",
|
|
"skyblue",
|
|
"indigo",
|
|
"plum"]
|
|
plt.bar(self.data_set[0], self.data_set[1], color=self.color[0])
|
|
plt.bar(
|
|
self.data_set[0],
|
|
self.data_set[2],
|
|
bottom=self.data_set[1],
|
|
color=self.color[1])
|
|
if len(self.data_set) > 3:
|
|
for i in range(3, len(self.data_set)):
|
|
plt.bar(self.data_set[0], self.data_set[i],
|
|
bottom=np.array(self.data_set[i - 2]) + np.array(self.data_set[i - 1]), color=self.color[i - 1])
|
|
plt.xlabel(self.xaxis_name)
|
|
plt.ylabel(self.yaxis_name)
|
|
plt.legend(self.label)
|
|
plt.savefig("%s.png" % self.graph_image_name, dpi=96)
|
|
plt.close()
|
|
print("{}.png".format(self.graph_image_name))
|
|
if self.enable_csv:
|
|
self.lf_csv.columns = self.label
|
|
self.lf_csv.rows = self.data_set
|
|
self.lf_csv.filename = f"{self.graph_image_name}.csv"
|
|
self.lf_csv.generate_csv()
|
|
return "%s.png" % self.graph_image_name
|
|
|
|
|
|
class lf_horizontal_stacked_graph:
|
|
def __init__(self,
|
|
_seg=2,
|
|
_yaxis_set=('A', 'B'),
|
|
_xaxis_set1=None,
|
|
_xaxis_set2=None,
|
|
_unit="%",
|
|
_xaxis_name="Stations",
|
|
_label=None,
|
|
_graph_image_name="image_name3",
|
|
_color=None,
|
|
_figsize=(9, 4),
|
|
_disable_xaxis=False,
|
|
_enable_csv=True):
|
|
if _xaxis_set1 is None:
|
|
_xaxis_set1 = [12, 0, 0, 16, 15]
|
|
if _xaxis_set2 is None:
|
|
_xaxis_set2 = [23, 34, 23, 0]
|
|
if _label is None:
|
|
_label = ['Success', 'Fail']
|
|
if _color is None:
|
|
_color = ["success", "Fail"]
|
|
self.unit = _unit
|
|
self.seg = _seg
|
|
self.xaxis_set1 = _xaxis_set1
|
|
self.xaxis_set2 = _xaxis_set2
|
|
self.yaxis_set = _yaxis_set
|
|
self.xaxis_name = _xaxis_name
|
|
self.figsize = _figsize
|
|
self.graph_image_name = _graph_image_name
|
|
self.label = _label
|
|
self.color = _color
|
|
self.disable_xaxis = _disable_xaxis
|
|
self.enable_csv = _enable_csv
|
|
self.lf_csv = lf_csv()
|
|
|
|
def build_horizontal_stacked_graph(self):
|
|
def sumzip(items):
|
|
return [sum(values) for values in zip(items)]
|
|
|
|
fig, ax = plt.subplots(figsize=self.figsize)
|
|
|
|
n = self.seg
|
|
values1 = self.xaxis_set1
|
|
values2 = self.xaxis_set2
|
|
|
|
ind = np.arange(n) + .15
|
|
width = 0.3
|
|
|
|
plt.barh(
|
|
ind,
|
|
values1,
|
|
width,
|
|
color=self.color[0],
|
|
label=self.label[0])
|
|
plt.barh(
|
|
ind,
|
|
values2,
|
|
width,
|
|
left=sumzip(values1),
|
|
color=self.color[1],
|
|
label=self.label[1])
|
|
|
|
extra_space = 0.15
|
|
ax.set_yticks(ind + width - extra_space)
|
|
ax.set_yticklabels(self.yaxis_set)
|
|
ax.yaxis.set_tick_params(length=0, labelbottom=True)
|
|
|
|
for i, v in enumerate(values1):
|
|
if v != 0:
|
|
plt.text(v * 0.45, i + .145, "%s%s" % (v, self.unit), color='white', fontweight='bold', fontsize=10,
|
|
ha='center', va='center')
|
|
|
|
for i, v in enumerate(values2):
|
|
if v != 0:
|
|
plt.text(v * 0.45 + values1[i], i + .145, "%s%s" % (v, self.unit), color='white', fontweight='bold',
|
|
fontsize=10,
|
|
ha='center', va='center')
|
|
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
ax.legend(loc='upper right')
|
|
if self.disable_xaxis:
|
|
plt.tick_params(
|
|
axis='x',
|
|
which='both',
|
|
bottom=False,
|
|
top=False,
|
|
labelbottom=False) # disable x-axis
|
|
plt.savefig("%s.png" % self.graph_image_name, dpi=96)
|
|
plt.close()
|
|
print("{}.png".format(self.graph_image_name))
|
|
if self.enable_csv:
|
|
self.lf_csv.columns = self.label
|
|
self.lf_csv.rows = self.data_set
|
|
self.lf_csv.filename = f"{self.graph_image_name}.csv"
|
|
self.lf_csv.generate_csv()
|
|
return "%s.png" % self.graph_image_name
|
|
|
|
|
|
class lf_line_graph:
|
|
def __init__(self, _data_set=None,
|
|
_xaxis_name="x-axis",
|
|
_yaxis_name="y-axis",
|
|
_xaxis_categories=None,
|
|
_xaxis_label=None,
|
|
_graph_title="",
|
|
_title_size=16,
|
|
_graph_image_name="image_name",
|
|
_label=None,
|
|
_font_weight='bold',
|
|
_color=None,
|
|
_figsize=(10, 5),
|
|
_xaxis_step=5,
|
|
_xticks_font=None,
|
|
_text_font=None,
|
|
_legend_handles=None,
|
|
_legend_loc="best",
|
|
_legend_box=None,
|
|
_legend_ncol=1,
|
|
_legend_fontsize=None,
|
|
_marker=None,
|
|
_dpi=96,
|
|
_enable_csv=False):
|
|
if _data_set is None:
|
|
_data_set = [[30.4, 55.3, 69.2, 37.1], [45.1, 67.2, 34.3, 22.4], [22.5, 45.6, 12.7, 34.8]]
|
|
if _xaxis_categories is None:
|
|
_xaxis_categories = [1, 2, 3, 4, 5]
|
|
if _xaxis_label is None:
|
|
_xaxis_label = ["a", "b", "c", "d", "e"]
|
|
if _label is None:
|
|
_label = ["bi-downlink", "bi-uplink", 'uplink']
|
|
if _color is None:
|
|
_color = ['forestgreen', 'c', 'r', 'g', 'b', 'p']
|
|
self.data_set = _data_set
|
|
self.xaxis_name = _xaxis_name
|
|
self.yaxis_name = _yaxis_name
|
|
self.xaxis_categories = _xaxis_categories
|
|
self.xaxis_label = _xaxis_label
|
|
self.grp_title = _graph_title
|
|
self.title_size = _title_size
|
|
self.graph_image_name = _graph_image_name
|
|
self.label = _label
|
|
self.color = _color
|
|
self.font_weight = _font_weight
|
|
self.figsize = _figsize
|
|
self.xaxis_step = _xaxis_step
|
|
self.xticks_font = _xticks_font
|
|
self.text_font = _text_font
|
|
self.marker = _marker
|
|
self.enable_csv = _enable_csv
|
|
self.lf_csv = lf_csv()
|
|
self.legend_handles = _legend_handles
|
|
self.legend_loc = _legend_loc
|
|
self.legend_box = _legend_box
|
|
self.legend_ncol = _legend_ncol
|
|
self.legend_fontsize = _legend_fontsize
|
|
|
|
def build_line_graph(self):
|
|
plt.subplots(figsize=self.figsize)
|
|
i = 0
|
|
for data in self.data_set:
|
|
plt.plot(
|
|
self.xaxis_categories,
|
|
data,
|
|
color=self.color[i],
|
|
label=self.label[i],
|
|
marker=self.marker)
|
|
i += 1
|
|
|
|
plt.xlabel(self.xaxis_name, fontweight='bold', fontsize=15)
|
|
plt.ylabel(self.yaxis_name, fontweight='bold', fontsize=15)
|
|
plt.legend(
|
|
handles=self.legend_handles,
|
|
loc=self.legend_loc,
|
|
bbox_to_anchor=self.legend_box,
|
|
ncol=self.legend_ncol,
|
|
fontsize=self.legend_fontsize)
|
|
plt.suptitle(self.grp_title, fontsize=self.title_size)
|
|
plt.gcf()
|
|
plt.savefig("%s.png" % self.graph_image_name, dpi=96)
|
|
plt.close()
|
|
print("{}.png".format(self.graph_image_name))
|
|
if self.enable_csv:
|
|
if self.data_set is not None:
|
|
self.lf_csv.columns = self.label
|
|
self.lf_csv.rows = self.data_set
|
|
self.lf_csv.filename = f"{self.graph_image_name}.csv"
|
|
self.lf_csv.generate_csv()
|
|
else:
|
|
print("No Dataset Found")
|
|
print("{}.csv".format(self.graph_image_name))
|
|
return "%s.png" % self.graph_image_name
|
|
|
|
|
|
def main():
|
|
# arguments
|
|
parser = argparse.ArgumentParser(
|
|
prog='lf_graph.py',
|
|
formatter_class=argparse.RawTextHelpFormatter,
|
|
epilog='''\
|
|
lf_graph.py : unit test in lf_graph.py for exersizing the lf_graph.py library
|
|
''',
|
|
description='''\
|
|
-----------------
|
|
NAME: lf_graph.py
|
|
|
|
PURPOSE:
|
|
Common Library for generating graphs for LANforge output
|
|
|
|
SETUP:
|
|
/lanforge/html-reports directory needs to be present or output generated in local file
|
|
|
|
EXAMPLE:
|
|
see: /py-scritps/lf_report_test.py for example
|
|
|
|
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))
|
|
|
|
output_html_1 = "graph_1.html"
|
|
output_pdf_1 = "graph_1.pdf"
|
|
|
|
# test build_bar_graph with defaults
|
|
graph = lf_bar_graph()
|
|
graph_html_obj = """
|
|
<img align='center' style='padding:15;margin:5;width:1000px;' src=""" + "%s" % (graph.build_bar_graph()) + """ border='1' />
|
|
<br><br>
|
|
"""
|
|
#
|
|
test_file = open(output_html_1, "w")
|
|
test_file.write(graph_html_obj)
|
|
test_file.close()
|
|
|
|
# write to pdf
|
|
# write logic to generate pdf here
|
|
# wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
|
|
# sudo apt install ./wkhtmltox_0.12.6-1.focal_amd64.deb
|
|
# prevent eerror Blocked access to file
|
|
options = {"enable-local-file-access": None}
|
|
pdfkit.from_file(output_html_1, output_pdf_1, options=options)
|
|
|
|
# test build_bar_graph setting values
|
|
dataset = [[45, 67, 34, 22], [22, 45, 12, 34], [30, 55, 69, 37]]
|
|
x_axis_values = [1, 2, 3, 4]
|
|
|
|
output_html_2 = "graph_2.html"
|
|
output_pdf_2 = "graph_2.pdf"
|
|
|
|
# test build_bar_graph with defaults
|
|
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=None,
|
|
_color_edge='red',
|
|
_enable_csv=True)
|
|
graph_html_obj = """
|
|
<img align='center' style='padding:15;margin:5;width:1000px;' src=""" + "%s" % (graph.build_bar_graph()) + """ border='1' />
|
|
<br><br>
|
|
"""
|
|
#
|
|
test_file = open(output_html_2, "w")
|
|
test_file.write(graph_html_obj)
|
|
test_file.close()
|
|
|
|
# write to pdf
|
|
# write logic to generate pdf here
|
|
# wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
|
|
# sudo apt install ./wkhtmltox_0.12.6-1.focal_amd64.deb
|
|
# prevent eerror Blocked access to file
|
|
options = {"enable-local-file-access": None}
|
|
pdfkit.from_file(output_html_2, output_pdf_2, options=options)
|
|
|
|
|
|
# Unit Test
|
|
if __name__ == "__main__":
|
|
main()
|