|
import pandas as pd |
|
import streamlit as st |
|
import matplotlib.pyplot as plt |
|
import io |
|
from pre import preprocess_uploaded_file |
|
|
|
from collections import defaultdict |
|
|
|
def generate_weekly_report(uploaded_files): |
|
|
|
|
|
environment_daily_failures = {} |
|
|
|
for uploaded_file in uploaded_files: |
|
|
|
data = preprocess_uploaded_file(uploaded_file) |
|
|
|
|
|
start_date = data['Start datetime'].dt.date.iloc[0] |
|
|
|
|
|
num_failures = len(data[data['Status'] == 'FAILED']) |
|
|
|
|
|
environment = data['Environment'].iloc[0] |
|
|
|
|
|
key = (environment, start_date) |
|
|
|
|
|
if key in environment_daily_failures: |
|
environment_daily_failures[key] += num_failures |
|
else: |
|
environment_daily_failures[key] = num_failures |
|
|
|
|
|
unique_environments = list(set([key[0] for key in environment_daily_failures.keys()])) |
|
|
|
|
|
plt.figure(figsize=(12, 8)) |
|
|
|
for environment in unique_environments: |
|
|
|
environment_data = [(key[1], value) for key, value in environment_daily_failures.items() if key[0] == environment] |
|
|
|
|
|
environment_data.sort(key=lambda x: x[0]) |
|
|
|
|
|
dates = [date.strftime("%d-%b") for date, _ in environment_data] |
|
failures = [count for _, count in environment_data] |
|
|
|
|
|
plt.plot(dates, failures, marker='o', linestyle='-', label=f'Environment: {environment}') |
|
|
|
plt.xlabel('Date', fontsize=14) |
|
plt.ylabel('Number of Failures', fontsize=14) |
|
plt.title('Trends in Failure Rates Over Days', fontsize=16) |
|
plt.xticks(rotation=45, fontsize=12) |
|
plt.yticks(fontsize=12) |
|
plt.grid(True) |
|
plt.legend(fontsize=12) |
|
|
|
|
|
for environment in unique_environments: |
|
environment_data = [(key[1], value) for key, value in environment_daily_failures.items() if key[0] == environment] |
|
for i in range(len(environment_data)): |
|
plt.text(environment_data[i][0].strftime("%d-%b"), environment_data[i][1], str(environment_data[i][1]), ha='center', va='bottom', fontsize=12) |
|
|
|
plt.tight_layout() |
|
|
|
|
|
st.pyplot(plt) |
|
|