diff --git a/root/opt/mailstats/templates/mailstats-sub-table.html.pt b/root/opt/mailstats/templates/mailstats-sub-table.html.pt
index 4072b83..8758a9c 100644
--- a/root/opt/mailstats/templates/mailstats-sub-table.html.pt
+++ b/root/opt/mailstats/templates/mailstats-sub-table.html.pt
@@ -1,3 +1,4 @@
+
diff --git a/root/opt/mailstats/templates/mailstats.html.pt b/root/opt/mailstats/templates/mailstats.html.pt
index 552d06f..fd92bbe 100644
--- a/root/opt/mailstats/templates/mailstats.html.pt
+++ b/root/opt/mailstats/templates/mailstats.html.pt
@@ -1,7 +1,4 @@
-
SMEServer Mailstats
@@ -40,13 +37,32 @@
-
+
+
${title}
-
+
+
+
+
Table
+
Stacked Bar Graph
+
Heat Map
+
Line Graph
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
diff --git a/root/usr/bin/mailstats.py b/root/usr/bin/mailstats.py
index c488b22..cce7ad9 100644
--- a/root/usr/bin/mailstats.py
+++ b/root/usr/bin/mailstats.py
@@ -231,12 +231,21 @@ def create_stacked_bar_graph(data2d, xLabels, yLabels, save_path='stacked_bar_gr
title='Stacked Bar Graph by Hour',
xaxis=dict(title='Hour'),
yaxis=dict(title='Values'),
- legend_title_text='Categories'
+ legend_title_text='Categories',
+ margin = {
+ 'l': 50, #left margin
+ 'r': 120, #right margin
+ 't': 50, #top margin
+ 'b': 50 #bottom margin
+ }
+
)
# Save the graph to an HTML file
fig.write_html(save_path)
-
+ # Write it to a var and return the string
+ graph_html = fig.to_html(full_html=False)
+ return graph_html
def sanitize_and_filter_data(data2d, exclude_labels, xLabels):
"""
@@ -320,7 +329,11 @@ def create_heatmap(data2d, xLabels, yLabels, save_path='heatmap.html'):
fig.update_xaxes(showticklabels=True, side='bottom', showline=True, linewidth=2, linecolor='black', mirror=True)
fig.update_yaxes(showticklabels=True, showline=True, linewidth=2, linecolor='black', mirror=True)
- fig.write_html(save_path)
+ fig.write_html(save_path)
+ # Write it to a var and return the string
+ graph_html = fig.to_html(full_html=False)
+ return graph_html
+
def create_line_chart(data2d, xLabels,yLabels, save_path='line_chart.html'):
fig = go.Figure()
@@ -354,6 +367,9 @@ def create_line_chart(data2d, xLabels,yLabels, save_path='line_chart.html'):
)
fig.write_html(save_path)
+ # Write it to a var and return the string
+ graph_html = fig.to_html(full_html=False)
+ return graph_html
def save_summaries_to_db(date_str, hour, parsed_data):
@@ -1357,6 +1373,25 @@ if __name__ == "__main__":
#print(columnCounts_2d)
#quit()
+
+ #Compute next and previous dates
+ day_format = "%Y-%m-%d"
+ # Convert the time string to a datetime object
+ date_obj = datetime.strptime(analysis_date, day_format)
+ # Compute the next date by adding one day
+ next_date = date_obj + timedelta(days=1)
+ # Compute the previous date by subtracting one day
+ previous_date = date_obj - timedelta(days=1)
+ # Convert the datetime objects back to strings in the desired format
+ next_date_str = next_date.strftime(day_format)
+ previous_date_str = previous_date.strftime(day_format)
+
+ # Create graphs of data
+ yLabels = [f'{i:02d}:00' for i in range(len(columnCounts_2d))]
+ stacked_Bar_html = create_stacked_bar_graph(columnCounts_2d,columnHeaders,yLabels,html_page_dir+'stacked_bar_'+analysis_date+'.html')
+ heatmap_html = create_heatmap(columnCounts_2d,columnHeaders,yLabels,html_page_dir+'heatmap_'+analysis_date+'.html')
+ line_graph_html = create_line_chart(columnCounts_2d,columnHeaders,yLabels,html_page_dir+'line_graph_'+analysis_date+'.html')
+
#Now apply the results to the chameleon template - main table
# Path to the template file
template_path = template_dir+'mailstats.html.pt'
@@ -1371,7 +1406,14 @@ if __name__ == "__main__":
rendered_html = template(array_2d=columnCounts_2d, column_headers=columnHeaders,
reporting_date=analysis_date, title=hello_string,
version=version_string,
- nolinks=nolinks)
+ nolinks=nolinks,
+ stacked_bar_graph=stacked_Bar_html,
+ heatmap=heatmap_html,
+ line_graph=line_graph_html,
+ PreviousDate=previous_date_str,
+ NextDate=next_date_str,
+ DomainName=DomainName
+ )
except Exception as e:
print(f"Chameleon template Exception {e}")
except Exception as e:
@@ -1403,32 +1445,24 @@ if __name__ == "__main__":
cursor.close()
conn.close()
- #Add in navigation html - next/previous/see in browser
- day_format = "%Y-%m-%d"
- # Convert the time string to a datetime object
- date_obj = datetime.strptime(analysis_date, day_format)
- # Compute the next date by adding one day
- next_date = date_obj + timedelta(days=1)
- # Compute the previous date by subtracting one day
- previous_date = date_obj - timedelta(days=1)
- # Convert the datetime objects back to strings in the desired format
- next_date_str = next_date.strftime(day_format)
- previous_date_str = previous_date.strftime(day_format)
- navigation_str_html = ""
- try:
- template = PageTemplate(navigation_str_html)
- try:
- Nav_str = template(PreviousDate=previous_date_str,NextDate=next_date_str,TodayDate=analysis_date,DomainName=DomainName)
- except Exception as e:
- print(f"Chameleon nav template Exception {e}")
- except Exception as e:
- print(f"Chameleon nav render Exception {e}")
- # And insert it
- total_html = insert_string_after(total_html,Nav_str, "")
+ # #Add in navigation html - next/previous/see in browser
+ # navigation_str_html = ""
+
+ # try:
+ # template = PageTemplate(navigation_str_html)
+ # try:
+ # Nav_str = template(PreviousDate=previous_date_str,NextDate=next_date_str,TodayDate=analysis_date,DomainName=DomainName)
+ # except Exception as e:
+ # print(f"Chameleon nav template Exception {e}")
+ # except Exception as e:
+ # print(f"Chameleon nav render Exception {e}")
+ # # And insert it
+ # total_html = insert_string_after(total_html,Nav_str, "")
+
# Write the rendered HTML to a file
output_path = html_page_dir+'mailstats_for_'+analysis_date
@@ -1451,13 +1485,6 @@ if __name__ == "__main__":
else:
text_file_path = ""
- # Create graphs of data
- #yLabels = [f'Hour {i}' for i in range(len(columnCounts_2d))]
- yLabels = [f'{i:02d}:00' for i in range(len(columnCounts_2d))]
- create_stacked_bar_graph(columnCounts_2d,columnHeaders,yLabels,html_page_dir+'stacked_bar_'+analysis_date+'.html')
- #yLabels = [f'Hour {i}' for i in range(26)]
- create_heatmap(columnCounts_2d,columnHeaders,yLabels,html_page_dir+'heatmap_'+analysis_date+'.html')
- create_line_chart(columnCounts_2d,columnHeaders,yLabels,html_page_dir+'line_graph_'+analysis_date+'.html')
html_content = None
text_content = None