Measuring Remediation Effectiveness
Measuring Remediation Effectiveness
Track remediation progress and effectiveness:
# remediation-metrics.py
class RemediationMetrics:
def __init__(self, historical_data: List[Dict]):
self.historical_data = historical_data
def calculate_metrics(self) -> Dict:
"""Calculate key remediation metrics"""
metrics = {
'mttr': self.calculate_mttr(), # Mean Time To Remediate
'remediation_rate': self.calculate_remediation_rate(),
'vulnerability_density': self.calculate_vulnerability_density(),
'sla_compliance': self.calculate_sla_compliance(),
'remediation_efficiency': self.calculate_efficiency()
}
return metrics
def calculate_mttr(self) -> Dict:
"""Calculate Mean Time To Remediate by severity"""
mttr = {
'critical': [],
'high': [],
'medium': [],
'low': []
}
for vuln in self.historical_data:
if vuln.get('remediated_date'):
time_to_remediate = (
datetime.fromisoformat(vuln['remediated_date']) -
datetime.fromisoformat(vuln['discovered_date'])
).days
mttr[vuln['severity'].lower()].append(time_to_remediate)
return {
severity: sum(times) / len(times) if times else 0
for severity, times in mttr.items()
}
def calculate_sla_compliance(self) -> Dict:
"""Calculate SLA compliance by severity"""
sla_targets = {
'critical': 1, # 1 day
'high': 7, # 7 days
'medium': 30, # 30 days
'low': 90 # 90 days
}
compliance = {severity: {'compliant': 0, 'total': 0}
for severity in sla_targets}
for vuln in self.historical_data:
severity = vuln['severity'].lower()
if severity in compliance:
compliance[severity]['total'] += 1
if vuln.get('remediated_date'):
time_to_remediate = (
datetime.fromisoformat(vuln['remediated_date']) -
datetime.fromisoformat(vuln['discovered_date'])
).days
if time_to_remediate <= sla_targets[severity]:
compliance[severity]['compliant'] += 1
return {
severity: (data['compliant'] / data['total'] * 100) if data['total'] > 0 else 100
for severity, data in compliance.items()
}
def generate_remediation_dashboard(self) -> str:
"""Generate remediation metrics dashboard"""
metrics = self.calculate_metrics()
dashboard = f"""
# Vulnerability Remediation Dashboard
Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}