diff --git a/frontend/src/pages/ExecutiveDashboardPage.tsx b/frontend/src/pages/ExecutiveDashboardPage.tsx index 8fc07e1..61c2c97 100644 --- a/frontend/src/pages/ExecutiveDashboardPage.tsx +++ b/frontend/src/pages/ExecutiveDashboardPage.tsx @@ -361,7 +361,74 @@ export default function ExecutiveDashboardPage() { - {/* Section 3: Threat Actor Exposure vs Detection Strength */} + {/* Section 3: Team Performance */} + {teamMetrics && ( +
+ {/* Red Team */} +
+

+
+ Red Team + +

+
+
+

+ {teamMetrics.red_team.tests_completed} +

+

Tests Done

+
+
+

+ {teamMetrics.red_team.avg_completion_hours + ? `${teamMetrics.red_team.avg_completion_hours}h` + : "N/A"} +

+

Avg Time

+
+
+

+ {teamMetrics.red_team.rejection_rate}% +

+

Rejection

+
+
+
+ + {/* Blue Team */} +
+

+
+ Blue Team + +

+
+
+

+ {teamMetrics.blue_team.tests_completed} +

+

Tests Done

+
+
+

+ {teamMetrics.blue_team.avg_completion_hours + ? `${teamMetrics.blue_team.avg_completion_hours}h` + : "N/A"} +

+

Avg Time

+
+
+

+ {teamMetrics.blue_team.rejection_rate}% +

+

Rejection

+
+
+
+
+ )} + + {/* Section 4: Threat Actor Exposure vs Detection Strength */} {(() => { const allActors = [...(threatActors?.items || [])].filter( (a) => a.technique_count > 0, @@ -693,72 +760,6 @@ export default function ExecutiveDashboardPage() { - {/* Section 7: Team Performance */} - {teamMetrics && ( -
- {/* Red Team */} -
-

-
- Red Team - -

-
-
-

- {teamMetrics.red_team.tests_completed} -

-

Tests Done

-
-
-

- {teamMetrics.red_team.avg_completion_hours - ? `${teamMetrics.red_team.avg_completion_hours}h` - : "N/A"} -

-

Avg Time

-
-
-

- {teamMetrics.red_team.rejection_rate}% -

-

Rejection

-
-
-
- - {/* Blue Team */} -
-

-
- Blue Team - -

-
-
-

- {teamMetrics.blue_team.tests_completed} -

-

Tests Done

-
-
-

- {teamMetrics.blue_team.avg_completion_hours - ? `${teamMetrics.blue_team.avg_completion_hours}h` - : "N/A"} -

-

Avg Time

-
-
-

- {teamMetrics.blue_team.rejection_rate}% -

-

Rejection

-
-
-
-
- )} ); }