Spaces:
Sleeping
Sleeping
File size: 7,703 Bytes
a089b0d 94c0fea ca3af14 83c336a 42c5a14 853735a a089b0d 83c336a a089b0d 94c0fea ca3af14 a089b0d aad0805 a089b0d aad0805 150662b aad0805 150662b aad0805 83c336a aad0805 a089b0d 83c336a 42c5a14 94c0fea 83c336a 94c0fea ca3af14 94c0fea 83c336a 853735a 83c336a 94c0fea ca3af14 83c336a 94c0fea 83c336a 853735a a089b0d 853735a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
import pandas as pd
import streamlit as st
import matplotlib.pyplot as plt
import numpy as np
from second import double_main
from multiple import multiple_main
from weekly import generate_weekly_report
from pre import preprocess_uploaded_file, add_app_description
from multi_env_compare import multi_env_compare_main
def single_main(uploaded_file):
if uploaded_file is not None:
# Process the csv files with header
data = preprocess_uploaded_file(uploaded_file)
# st.write(data)
# Display scenarios with status "failed" grouped by functional area
failed_scenarios = data[data['Status'] == 'FAILED']
passed_scenarios = data[data['Status'] == 'PASSED']
# Display total count of failures
fail_count = len(failed_scenarios)
st.markdown(f"Failing scenarios Count: {fail_count}")
# Display total count of Passing
pass_count = len(passed_scenarios)
st.markdown(f"Passing scenarios Count: {pass_count}")
# Use radio buttons for selecting status
selected_status = st.radio("Select a status", ['Failed', 'Passed'])
# Determine which scenarios to display based on selected status
if selected_status == 'Failed':
unique_areas = np.append(failed_scenarios['Functional area'].unique(), "All")
selected_scenarios = failed_scenarios
elif selected_status == 'Passed':
unique_areas = np.append(passed_scenarios['Functional area'].unique(), "All")
selected_scenarios = passed_scenarios
else:
selected_scenarios = None
if selected_scenarios is not None:
# st.write(f"Scenarios with status '{selected_status}' grouped by functional area:")
st.markdown(f"### Scenarios with status '{selected_status}' grouped by functional area:")
# Select a range of functional areas to filter scenarios
selected_functional_areas = st.multiselect("Select functional areas", unique_areas, ["All"])
if "All" in selected_functional_areas:
filtered_scenarios = selected_scenarios
else:
filtered_scenarios = selected_scenarios[selected_scenarios['Functional area'].isin(selected_functional_areas)]
if not selected_functional_areas: # Check if the list is empty
st.error("Please select at least one functional area.")
else:
# Calculate the average time spent for each functional area
average_time_spent_seconds = filtered_scenarios.groupby('Functional area')['Time spent'].mean().reset_index()
# Convert average time spent from seconds to minutes and seconds format
average_time_spent_seconds['Time spent'] = pd.to_datetime(average_time_spent_seconds['Time spent'], unit='s').dt.strftime('%M:%S')
# Group by functional area and get the start datetime for sorting
start_datetime_group = filtered_scenarios.groupby('Functional area')['Start datetime'].min().reset_index()
# Merge average_time_spent_seconds and start_datetime_group
average_time_spent_seconds = average_time_spent_seconds.merge(start_datetime_group, on='Functional area')
# Filter scenarios based on selected functional area
if selected_status == 'Failed':
grouped_filtered_scenarios = filtered_scenarios.groupby('Functional area')[['Scenario name', 'Error message','Time spent(m:s)']].apply(lambda x: x.reset_index(drop=True))
elif selected_status == 'Passed':
grouped_filtered_scenarios = filtered_scenarios.groupby('Functional area')[['Scenario name', 'Time spent(m:s)']].apply(lambda x: x.reset_index(drop=True))
else:
grouped_filtered_scenarios = None
grouped_filtered_scenarios.reset_index(inplace=True)
grouped_filtered_scenarios.drop(columns=['level_1'], inplace=True)
grouped_filtered_scenarios.index = grouped_filtered_scenarios.index + 1
st.markdown(grouped_filtered_scenarios)
# Sort the average time spent table by start datetime
average_time_spent_seconds = average_time_spent_seconds.sort_values(by='Start datetime')
# Display average time spent on each functional area in a table
st.markdown("### Average Time Spent on Each Functional Area")
average_time_spent_seconds.index = average_time_spent_seconds.index + 1
st.dataframe(average_time_spent_seconds)
# Check if selected_status is 'Failed' and grouped_filtered_scenarios length is less than or equal to 400
if selected_status != 'Passed' and len(grouped_filtered_scenarios) <= 400:
# Create and display bar graph of errors by functional area
st.write(f"### Bar graph showing number of '{selected_status}' scenarios in each functional area:")
error_counts = grouped_filtered_scenarios['Functional area'].value_counts()
plt.figure(figsize=(10, 6))
plt.bar(error_counts.index, error_counts.values)
plt.xlabel('Functional Area')
plt.ylabel('Number of Failures')
plt.title(f"Number of '{selected_status}' scenarios by Functional Area")
plt.xticks(rotation=45, ha='right')
# Set y-axis limits and ticks for consistent interval of 1
y_max = max(error_counts.values) + 1
plt.ylim(0, y_max)
plt.yticks(range(0, y_max, 1))
# Display individual numbers on y-axis
for i, count in enumerate(error_counts.values):
plt.text(i, count, str(count), ha='center', va='bottom')
plt.tight_layout() # Add this line to adjust layout
st.pyplot(plt)
else:
st.write("### No scenarios with status 'failed' found.")
pass
def main():
add_app_description()
# Initially we are in multi file processing mode
if "mode" not in st.session_state:
st.session_state["mode"] = "multi"
# Add a dropdown for mode selection
selected_mode = st.sidebar.selectbox("Select Mode", ["Multi", "Compare", "Weekly", "Multi-Env Compare"])
# Update the mode based on the selection
st.session_state["mode"] = selected_mode.lower()
# Display the selected mode
mode_display = f'## Current mode: {st.session_state["mode"].title()} mode'
st.sidebar.markdown(mode_display)
# Only show the second file uploader in compare mode
if st.session_state["mode"] == "multi":
multiple_main()
elif st.session_state["mode"] == "compare":
uploaded_file_1 = st.sidebar.file_uploader("Upload CSV file 1", type="csv")
uploaded_file_2 = st.sidebar.file_uploader("Upload CSV file 2", type="csv")
if uploaded_file_1 is not None and uploaded_file_2 is not None:
double_main(uploaded_file_1, uploaded_file_2)
elif st.session_state["mode"] == "weekly":
uploaded_files = st.sidebar.file_uploader("Upload CSV files for Weekly Report", type="csv", accept_multiple_files=True)
if uploaded_files:
generate_weekly_report(uploaded_files)
elif st.session_state["mode"] == "multi-env compare": # Add new mode
multi_env_compare_main()
if __name__ == "__main__":
main() |