fix(compliance): handle latest assessment date for each account (#8108)

This commit is contained in:
Pedro Martín
2025-06-26 11:48:35 +02:00
committed by GitHub
parent 98da3059b4
commit 325e5739a2
2 changed files with 14 additions and 20 deletions

View File

@@ -346,34 +346,27 @@ def display_data(
if item == "nan" or item.__class__.__name__ != "str": if item == "nan" or item.__class__.__name__ != "str":
region_filter_options.remove(item) region_filter_options.remove(item)
# Convert ASSESSMENTDATE to datetime
data["ASSESSMENTDATE"] = pd.to_datetime(data["ASSESSMENTDATE"], errors="coerce") data["ASSESSMENTDATE"] = pd.to_datetime(data["ASSESSMENTDATE"], errors="coerce")
data["ASSESSMENTDATE"] = data["ASSESSMENTDATE"].dt.strftime("%Y-%m-%d %H:%M:%S") data["ASSESSMENTDAY"] = data["ASSESSMENTDATE"].dt.date
# Choosing the date that is the most recent # Find the latest timestamp per account per day
data_values = data["ASSESSMENTDATE"].unique() latest_per_account_day = data.groupby(["ACCOUNTID", "ASSESSMENTDAY"])[
data_values.sort() "ASSESSMENTDATE"
data_values = data_values[::-1] ].transform("max")
aux = []
data_values = [str(i) for i in data_values] # Keep only rows with the latest timestamp for each account and day
for value in data_values: data = data[data["ASSESSMENTDATE"] == latest_per_account_day]
if value.split(" ")[0] not in [aux[i].split(" ")[0] for i in range(len(aux))]:
aux.append(value)
data_values = [str(i) for i in aux]
data = data[data["ASSESSMENTDATE"].isin(data_values)] # Prepare the date filter options (unique days, as strings)
data["ASSESSMENTDATE"] = data["ASSESSMENTDATE"].apply(lambda x: x.split(" ")[0]) options_date = sorted(data["ASSESSMENTDAY"].astype(str).unique(), reverse=True)
options_date = data["ASSESSMENTDATE"].unique() # Filter by selected date (as string)
options_date.sort()
options_date = options_date[::-1]
# Filter DATE
if date_filter_analytics in options_date: if date_filter_analytics in options_date:
data = data[data["ASSESSMENTDATE"] == date_filter_analytics] data = data[data["ASSESSMENTDAY"].astype(str) == date_filter_analytics]
else: else:
date_filter_analytics = options_date[0] date_filter_analytics = options_date[0]
data = data[data["ASSESSMENTDATE"] == date_filter_analytics] data = data[data["ASSESSMENTDAY"].astype(str) == date_filter_analytics]
if data.empty: if data.empty:
fig = px.pie() fig = px.pie()

View File

@@ -56,6 +56,7 @@ All notable changes to the **Prowler SDK** are documented in this file.
- `organizations_scp_check_deny_regions` check to pass when SCP policies have no statements [(#8091)](https://github.com/prowler-cloud/prowler/pull/8091) - `organizations_scp_check_deny_regions` check to pass when SCP policies have no statements [(#8091)](https://github.com/prowler-cloud/prowler/pull/8091)
- Fix logic in VPC and ELBv2 checks [(#8077)](https://github.com/prowler-cloud/prowler/pull/8077) - Fix logic in VPC and ELBv2 checks [(#8077)](https://github.com/prowler-cloud/prowler/pull/8077)
- Retrieve correctly ECS Container insights settings [(#8097)](https://github.com/prowler-cloud/prowler/pull/8097) - Retrieve correctly ECS Container insights settings [(#8097)](https://github.com/prowler-cloud/prowler/pull/8097)
- Fix correct handling for different accounts-dates in prowler dashboard compliance page [(#8108)](https://github.com/prowler-cloud/prowler/pull/8108)
--- ---