From 9bde6e380b2dedc655c21a62e5fa2a969238c182 Mon Sep 17 00:00:00 2001 From: sebastianserfling Date: Tue, 24 Sep 2024 21:04:41 +0200 Subject: [PATCH] Update all --- db/imapsync_results.db | Bin 0 -> 98304 bytes docker-compose.yml | 11 +++++--- dockerfile/imapsync-dockerfile | 4 +-- dockerfile/streamlit-dockerfile | 6 ++--- python_scripte/.env | 2 +- python_scripte/imapsync.py | 43 ++++++++++++++++++++++---------- python_scripte/requirements.txt | 4 +-- python_scripte/streamlit-app.py | 37 +++++++++++++++++++-------- 8 files changed, 72 insertions(+), 35 deletions(-) create mode 100644 db/imapsync_results.db diff --git a/db/imapsync_results.db b/db/imapsync_results.db new file mode 100644 index 0000000000000000000000000000000000000000..6ee2339aa7f14d661079f3a2bea1e9f5a8b9a20e GIT binary patch literal 98304 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 0 or auth_failed == 1: + current_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + # Insert result into SQLite database + cursor.execute(''' + INSERT INTO sync_results (email, messages_transferred, date, auth_failed) + VALUES (?, ?, ?, ?) + ''', (username, transferred_count, current_date, auth_failed)) + conn.commit() + print(f"Data inserted for {username}: {transferred_count} messages on {current_date}") else: - print(f"No 'Messages transferred' line found for {username}.") + print(f"No messages transferred for {username}.") except Exception as e: print(f"Error running imapsync for {username}: {e}") diff --git a/python_scripte/requirements.txt b/python_scripte/requirements.txt index ba7ae87..1e51534 100644 --- a/python_scripte/requirements.txt +++ b/python_scripte/requirements.txt @@ -1,3 +1,3 @@ -requests +streamlit pandas -streamlit \ No newline at end of file + diff --git a/python_scripte/streamlit-app.py b/python_scripte/streamlit-app.py index e1c37fe..1f41dba 100644 --- a/python_scripte/streamlit-app.py +++ b/python_scripte/streamlit-app.py @@ -1,10 +1,14 @@ import streamlit as st import sqlite3 import pandas as pd +from datetime import datetime, timedelta -def fetch_data_from_db(db_path, table_name): +def fetch_data_from_db(db_path, table_name, start_date=None, end_date=None): conn = sqlite3.connect(db_path) - query = f"SELECT * FROM {table_name}" + if table_name == "sync_results" and start_date and end_date: + query = f"SELECT * FROM {table_name} WHERE date BETWEEN '{start_date}' AND '{end_date}'" + else: + query = f"SELECT * FROM {table_name}" df = pd.read_sql_query(query, conn) conn.close() return df @@ -25,6 +29,9 @@ def delete_user_from_db(db_path, email): cursor.execute(''' DELETE FROM users WHERE email = ? ''', (email,)) + cursor.execute(''' + DELETE FROM sync_results WHERE email = ? + ''', (email,)) conn.commit() conn.close() @@ -82,6 +89,11 @@ def main(): emails.insert(0, "All") selected_email = st.selectbox("Filter by Email:", options=emails) + # Add date range picker for filtering results by date + st.subheader("Filter by Date Range:") + start_date = st.date_input("Start Date", value=datetime.now().date()) + end_date = st.date_input("End Date + 1 Tag", value=start_date + timedelta(days=1)) + if selected_email == "All": filtered_users_df = users_df else: @@ -91,16 +103,21 @@ def main(): # Display email transfer results if available if not results_df.empty: + # Filter by email and date if selected_email == "All": - st.write("Email Transfer Results:") - st.dataframe(results_df) + filtered_results_df = fetch_data_from_db(db_path, "sync_results", start_date=start_date, end_date=end_date) else: - filtered_results_df = results_df[results_df['email'] == selected_email] - if not filtered_results_df.empty: - st.write(f"Email Transfer Results for {selected_email}:") - st.dataframe(filtered_results_df) - else: - st.write(f"No transfer data found for {selected_email}.") + filtered_results_df = fetch_data_from_db(db_path, "sync_results", start_date=start_date, end_date=end_date) + filtered_results_df = filtered_results_df[filtered_results_df['email'] == selected_email] + + if not filtered_results_df.empty: + # Replace 'auth_failed' values with icons + filtered_results_df['auth_failed'] = filtered_results_df['auth_failed'].apply(lambda x: '✅' if x == 0 else '❌') + + st.write(f"Email Transfer Results for {selected_email}:") + st.dataframe(filtered_results_df) + else: + st.write(f"No transfer data found for {selected_email} in the selected date range.") else: st.write("No email transfer results available.")