feat(exec-dashboard): move Red/Blue team stats above Top Threat Actors
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
This commit is contained in:
@@ -361,7 +361,74 @@ export default function ExecutiveDashboardPage() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Section 3: Threat Actor Exposure vs Detection Strength */}
|
||||
{/* Section 3: Team Performance */}
|
||||
{teamMetrics && (
|
||||
<div className="grid grid-cols-1 gap-4 lg:grid-cols-2">
|
||||
{/* Red Team */}
|
||||
<div className="rounded-xl border border-gray-800 bg-gray-900 p-4">
|
||||
<h2 className="mb-3 flex items-center gap-2 text-sm font-semibold text-red-400">
|
||||
<div className="h-2 w-2 rounded-full bg-red-500" />
|
||||
Red Team
|
||||
<MetricTooltip title="Red Team Performance" description="Metrics for the offensive security team that simulates attacks. Tests Done = completed executions; Avg Time = mean execution duration; Rejection = % of results rejected by leads." context="Lower rejection rate = higher quality test documentation." />
|
||||
</h2>
|
||||
<div className="grid grid-cols-3 gap-3">
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.red_team.tests_completed}
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Tests Done<MetricTooltip title="Tests Done (Red)" description="Total number of attack simulations completed by Red Team and submitted to Blue Team for evaluation." /></p>
|
||||
</div>
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.red_team.avg_completion_hours
|
||||
? `${teamMetrics.red_team.avg_completion_hours}h`
|
||||
: "N/A"}
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Avg Time<MetricTooltip title="Avg Execution Time (Red)" description="Average hours Red Team spends executing and documenting each attack simulation." /></p>
|
||||
</div>
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.red_team.rejection_rate}%
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Rejection<MetricTooltip title="Rejection Rate (Red)" description="Percentage of Red Team submissions rejected by the Red Lead during validation review. High rejection = quality issues in test documentation." /></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Blue Team */}
|
||||
<div className="rounded-xl border border-gray-800 bg-gray-900 p-4">
|
||||
<h2 className="mb-3 flex items-center gap-2 text-sm font-semibold text-blue-400">
|
||||
<div className="h-2 w-2 rounded-full bg-blue-500" />
|
||||
Blue Team
|
||||
<MetricTooltip title="Blue Team Performance" description="Metrics for the defensive security team that analyses attacks and validates detections. Tests Done = evaluations completed; Avg Time = mean evaluation duration; Rejection = % rejected by Blue Lead." context="Lower rejection rate = consistent, high-quality detection analysis." />
|
||||
</h2>
|
||||
<div className="grid grid-cols-3 gap-3">
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.blue_team.tests_completed}
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Tests Done<MetricTooltip title="Tests Done (Blue)" description="Total attack simulations evaluated by Blue Team — verified whether security controls detected or missed the attack." /></p>
|
||||
</div>
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.blue_team.avg_completion_hours
|
||||
? `${teamMetrics.blue_team.avg_completion_hours}h`
|
||||
: "N/A"}
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Avg Time<MetricTooltip title="Avg Evaluation Time (Blue)" description="Average hours Blue Team takes to evaluate an attack simulation and document the detection result." /></p>
|
||||
</div>
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.blue_team.rejection_rate}%
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Rejection<MetricTooltip title="Rejection Rate (Blue)" description="Percentage of Blue Team evaluations rejected by the Blue Lead. May indicate unclear detection documentation or disagreement on results." /></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* 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() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Section 7: Team Performance */}
|
||||
{teamMetrics && (
|
||||
<div className="grid grid-cols-1 gap-4 lg:grid-cols-2">
|
||||
{/* Red Team */}
|
||||
<div className="rounded-xl border border-gray-800 bg-gray-900 p-4">
|
||||
<h2 className="mb-3 flex items-center gap-2 text-sm font-semibold text-red-400">
|
||||
<div className="h-2 w-2 rounded-full bg-red-500" />
|
||||
Red Team
|
||||
<MetricTooltip title="Red Team Performance" description="Metrics for the offensive security team that simulates attacks. Tests Done = completed executions; Avg Time = mean execution duration; Rejection = % of results rejected by leads." context="Lower rejection rate = higher quality test documentation." />
|
||||
</h2>
|
||||
<div className="grid grid-cols-3 gap-3">
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.red_team.tests_completed}
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Tests Done<MetricTooltip title="Tests Done (Red)" description="Total number of attack simulations completed by Red Team and submitted to Blue Team for evaluation." /></p>
|
||||
</div>
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.red_team.avg_completion_hours
|
||||
? `${teamMetrics.red_team.avg_completion_hours}h`
|
||||
: "N/A"}
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Avg Time<MetricTooltip title="Avg Execution Time (Red)" description="Average hours Red Team spends executing and documenting each attack simulation." /></p>
|
||||
</div>
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.red_team.rejection_rate}%
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Rejection<MetricTooltip title="Rejection Rate (Red)" description="Percentage of Red Team submissions rejected by the Red Lead during validation review. High rejection = quality issues in test documentation." /></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Blue Team */}
|
||||
<div className="rounded-xl border border-gray-800 bg-gray-900 p-4">
|
||||
<h2 className="mb-3 flex items-center gap-2 text-sm font-semibold text-blue-400">
|
||||
<div className="h-2 w-2 rounded-full bg-blue-500" />
|
||||
Blue Team
|
||||
<MetricTooltip title="Blue Team Performance" description="Metrics for the defensive security team that analyses attacks and validates detections. Tests Done = evaluations completed; Avg Time = mean evaluation duration; Rejection = % rejected by Blue Lead." context="Lower rejection rate = consistent, high-quality detection analysis." />
|
||||
</h2>
|
||||
<div className="grid grid-cols-3 gap-3">
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.blue_team.tests_completed}
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Tests Done<MetricTooltip title="Tests Done (Blue)" description="Total attack simulations evaluated by Blue Team — verified whether security controls detected or missed the attack." /></p>
|
||||
</div>
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.blue_team.avg_completion_hours
|
||||
? `${teamMetrics.blue_team.avg_completion_hours}h`
|
||||
: "N/A"}
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Avg Time<MetricTooltip title="Avg Evaluation Time (Blue)" description="Average hours Blue Team takes to evaluate an attack simulation and document the detection result." /></p>
|
||||
</div>
|
||||
<div className="rounded-lg bg-gray-800 px-3 py-2 text-center">
|
||||
<p className="text-lg font-bold text-white">
|
||||
{teamMetrics.blue_team.rejection_rate}%
|
||||
</p>
|
||||
<p className="text-[10px] text-gray-500 flex items-center justify-center gap-0.5">Rejection<MetricTooltip title="Rejection Rate (Blue)" description="Percentage of Blue Team evaluations rejected by the Blue Lead. May indicate unclear detection documentation or disagreement on results." /></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user