Merge branch 'master' of github.com:greearb/lanforge-scripts

This commit is contained in:
Ben Greear
2021-04-17 16:19:29 -07:00

View File

@@ -1,17 +1,17 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import matplotlib.pyplot as plt import os
import matplotlib as mpl import datetime
import numpy as np
import pandas as pd import pandas as pd
import pdfkit import pdfkit
import math
# internal candela references included during intial phases, to be deleted at future date # internal candela references included during intial phases, to be deleted at future date
# https://candelatech.atlassian.net/wiki/spaces/LANFORGE/pages/372703360/Scripting+Data+Collection+March+2021 # https://candelatech.atlassian.net/wiki/spaces/LANFORGE/pages/372703360/Scripting+Data+Collection+March+2021
# base report class # base report class
class lf_report(): class lf_report():
def __init__(self, def __init__(self,
_path = "/home/user/git/lanforge-scripts/py-scripts/report-data",
_output_format = 'html', # pass in on the write functionality
_dataframe="", _dataframe="",
_title="LANForge Test Run Heading", _title="LANForge Test Run Heading",
_table_title="LANForge Table Heading", _table_title="LANForge Table Heading",
@@ -20,15 +20,28 @@ class lf_report():
_obj_title = "", _obj_title = "",
_date="1/1/2-21 00:00(UTC)", _date="1/1/2-21 00:00(UTC)",
_output_html="outfile.html", _output_html="outfile.html",
_output_pdf="outfile.pdf"): _output_pdf="outfile.pdf",
_path_date_time=""):
#other report paths, "/home/lanforge/html-reports/
if _path == "local" or _path == "here" or _path == None:
self.path = os.path.abspath(__file__)
print("path set to file path: {}".format(self.path))
else:
self.path = _path
print("path set: {}".format(self.path))
self.dataframe=_dataframe self.dataframe=_dataframe
self.title=_title self.title=_title
self.table_title=_table_title self.table_title=_table_title
self.graph_title=_graph_title self.graph_title=_graph_title
self.date=_date self.date=_date
self.output_html=_output_html self.output_html=_output_html
self.path_date_time = _path_date_time
self.write_output_html = ""
self.output_pdf=_output_pdf self.output_pdf=_output_pdf
self.write_output_pdf = ""
self.banner_html = "" self.banner_html = ""
self.graph_titles="" self.graph_titles=""
self.graph_image="" self.graph_image=""
@@ -36,7 +49,57 @@ class lf_report():
self.custom_html = "" self.custom_html = ""
self.objective = _obj self.objective = _obj
self.obj_title = _obj_title self.obj_title = _obj_title
#self.systeminfopath = ""
self.date_time_directory = ""
self.banner_directory = "artifacts"
self.banner_file_name = "banner.png" # does this need to be configurable
self.logo_directory = "artifacts"
self.logo_file_name = "banner.png" # does this need to be configurable.
# create the output path for reports and move *.png files
self.current_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#self.set_path_date_time()
#self.setup_banner_logo()
#self.copy_banner()
#self.copy_logo()
# create the output directory
# move the banners and candela images to report path
#def setup_banner_logo(self):
def set_path(self,_path):
self.path = _path
def set_date_time_directory(self):
self.date_time_directory = str(datetime.datetime.now().strftime("%Y-%m-%d-%H-h-%M-m-%S-s")).replace(':','-')
#def set_date_time_directory(self,date_time_directory):
# self.date_time_directory = date_time_directory
def set_path_date_time(self):
if self.date_time_directory == "":
self.set_date_time_directory()
try:
self.path_date_time = os.path.join(self.path, self.date_time_directory)
print("path_date_time {}".format(self.path_date_time))
if not os.path.exists(self.path_date_time):
os.mkdir(self.path_date_time)
except:
self.path_date_time = os.path.join(self.currentpath, self.date_time_directory)
if not os.path.exists(self.path_date_time):
os.mkdir(self.path_date_time)
#print("report path : {}".format(self.path_date_time))
def set_time_date(self,_time_date):
self.time_date
def set_title(self,_title): def set_title(self,_title):
self.title = _title self.title = _title
@@ -63,24 +126,32 @@ class lf_report():
def set_graph_image(self,_graph_image): def set_graph_image(self,_graph_image):
self.graph_image = _graph_image self.graph_image = _graph_image
def get_path(self):
return self.path
def get_path_date_time(self):
return self.path_date_time
def write_html(self): def write_html(self):
# dataframe_html = self.dataframe.to_html(index=False) # have the index be able to be passed in. self.write_output_html = str(self.path_date_time)+'/'+ str(self.output_html)
# self.build_banner() print("write_output_html: {}".format(self.write_output_html))
# self.build_table_title() try:
# self.html = self.banner_html + self.table_html + dataframe_html test_file = open(self.write_output_html, "w")
test_file = open(self.output_html, "w")
test_file.write(self.html) test_file.write(self.html)
test_file.close() test_file.close()
return self.html except:
print("write_html failed")
return self.write_output_html
def write_pdf(self): def write_pdf(self):
# write to pdf
# write logic to generate pdf here # 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 # 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 # sudo apt install ./wkhtmltox_0.12.6-1.focal_amd64.deb
options = {"enable-local-file-access" : None} # prevent eerror Blocked access to file
pdfkit.from_file(self.output_html, self.output_pdf, options=options) #options = {"enable-local-file-access" : None} # prevent error Blocked access to file
#self.write_output_pdf = str(self.path_date_time)+'/'+ str(self.output_pdf)
#pdfkit.from_file(self.write_output_html, self.write_output_pdf, options=options)
pass
def generate_report(self): def generate_report(self):
self.write_html() self.write_html()
@@ -130,7 +201,19 @@ class lf_report():
""" """
self.html += self.table_title_html self.html += self.table_title_html
# right now from data frame def build_date_time(self):
self.date_time = str(datetime.datetime.now().strftime("%Y-%m-%d-%H-h-%m-m-%S-s")).replace(':','-')
return self.date_time
def build_path_date_time(self):
try:
self.path_date_time = os.path.join(self.path,self.date_time)
os.mkdir(self.path_date_time)
except:
curr_dir_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
self.path_date_time = os.path.join(curr_dir_path,self.date_time)
os.mkdir(self.path_date_time)
def build_table(self): def build_table(self):
self.dataframe_html = self.dataframe.to_html(index=False) # have the index be able to be passed in. self.dataframe_html = self.dataframe.to_html(index=False) # have the index be able to be passed in.
self.html += self.dataframe_html self.html += self.dataframe_html
@@ -165,9 +248,6 @@ class lf_report():
self.html +=self.graph_html_obj self.html +=self.graph_html_obj
# Unit Test # Unit Test
if __name__ == "__main__": if __name__ == "__main__":
@@ -188,13 +268,9 @@ if __name__ == "__main__":
'time_seconds':[23,78,22,19,45,22,25] 'time_seconds':[23,78,22,19,45,22,25]
}) })
#report = lf_report(_dataframe=dataframe)
report = lf_report() report = lf_report()
report.set_title("Banner Title One") report.set_title("Banner Title One")
report.build_banner() report.build_banner()
#report.set_title("Banner Title Two")
#report.build_banner()
report.set_table_title("Title One") report.set_table_title("Title One")
report.build_table_title() report.build_table_title()
@@ -214,3 +290,5 @@ if __name__ == "__main__":
print("returned file ") print("returned file ")
print(html_file) print(html_file)
report.write_pdf() report.write_pdf()
print("report path {}".format(report.get_path()))