Implemented cleanup/triage direction. ui, and baselinbe days
This commit is contained in:
@@ -22,6 +22,7 @@ from .policies import audit_policies, read_policies
|
||||
from .recommendations import build_recommendations
|
||||
from .sequences import detect_sequences
|
||||
from .threat_intel import ThreatIntelClient, enrich_ips, is_public_ip
|
||||
from .triage import build_triage_queue
|
||||
from .stream_profiles import parse_profiles
|
||||
|
||||
|
||||
@@ -147,7 +148,8 @@ def build_status(
|
||||
events = []
|
||||
baseline = BaselineStore(baseline_path) if baseline_path else None
|
||||
profiles = baseline.profiles({event.src_ip for event in events if event.src_ip}) if baseline else {}
|
||||
field_deviations = baseline.profile_deviations(events, stream_profiles) if baseline else {}
|
||||
baseline_training_days = int(runtime_values.get("baseline_training_days", 7) or 7)
|
||||
field_deviations = baseline.profile_deviations(events, stream_profiles, min_training_days=baseline_training_days) if baseline else {}
|
||||
sequence_findings = detect_sequences(events)
|
||||
for entity, findings in sequence_findings.items():
|
||||
field_deviations.setdefault(entity, []).extend(findings)
|
||||
@@ -189,7 +191,7 @@ def build_status(
|
||||
if baseline
|
||||
else {}
|
||||
)
|
||||
profile_readiness = baseline.profile_readiness(stream_profiles) if baseline else []
|
||||
profile_readiness = baseline.profile_readiness(stream_profiles, min_training_days=baseline_training_days) if baseline else []
|
||||
profile_readiness = [
|
||||
{
|
||||
**item,
|
||||
@@ -208,11 +210,21 @@ def build_status(
|
||||
}
|
||||
)
|
||||
threat_enabled = bool(runtime_values.get("threat_intel_enabled")) if runtime_values else None
|
||||
reputation = enrich_ips(intel_ips, limit=25, enabled=threat_enabled)
|
||||
threat_intel_status = ThreatIntelClient(enabled=threat_enabled).status()
|
||||
reputation = enrich_ips(intel_ips, limit=25, enabled=threat_enabled, config=runtime_values)
|
||||
threat_intel_status = ThreatIntelClient(
|
||||
enabled=threat_enabled,
|
||||
provider=str(runtime_values.get("threat_intel_provider", "auto")),
|
||||
abuseipdb_key=str(runtime_values.get("abuseipdb_api_key", "") or "") or None,
|
||||
virustotal_key=str(runtime_values.get("virustotal_api_key", "") or "") or None,
|
||||
daily_limit=int(runtime_values.get("threat_intel_daily_limit", 100) or 100),
|
||||
ttl_seconds=int(runtime_values.get("threat_intel_ttl_seconds", 604800) or 604800),
|
||||
error_ttl_seconds=int(runtime_values.get("threat_intel_error_ttl_seconds", 3600) or 3600),
|
||||
abuseipdb_max_age_days=int(runtime_values.get("abuseipdb_max_age_days", 90) or 90),
|
||||
).status()
|
||||
recommendations = build_recommendations(events, anomalies, reputation)
|
||||
correlations = correlate_source_ips(events)
|
||||
incidents = IncidentStore(incident_path or "state/signalscope-incidents.json").apply(build_incidents(anomalies, field_deviations, correlations))
|
||||
triage_queue = build_triage_queue(incidents, field_deviations, correlations, recommendations)
|
||||
block_candidates = suggest_block_candidates(
|
||||
events,
|
||||
min_events=min_block_events,
|
||||
@@ -234,7 +246,7 @@ def build_status(
|
||||
"policy_path": policy_path,
|
||||
"summary": summarize_events(events),
|
||||
"anomaly_summary": anomaly_summary(anomalies),
|
||||
"baseline": {"enabled": bool(baseline), "sources_ready": len(profiles), "new_events_recorded": baseline_events, "profile_fields_recorded": profile_baseline_fields, "maintenance": baseline_maintenance, "size_bytes": baseline_maintenance.get("size_bytes", 0) if isinstance(baseline_maintenance, dict) else 0},
|
||||
"baseline": {"enabled": bool(baseline), "sources_ready": len(profiles), "training_days": baseline_training_days, "new_events_recorded": baseline_events, "profile_fields_recorded": profile_baseline_fields, "maintenance": baseline_maintenance, "size_bytes": baseline_maintenance.get("size_bytes", 0) if isinstance(baseline_maintenance, dict) else 0},
|
||||
"capabilities": {"threat_intel": threat_intel_status, "graylog_mcp": mcp_status},
|
||||
"configuration": runtime_config,
|
||||
"stream_profiles": [{"stream_id": item.stream_id, "name": _profile_name(item.stream_id, stream_titles, item), "stream_name": _stream_name(item.stream_id, stream_titles, item), "entity_field": item.entity_field, "entity_fields": list(item.entity_fields), "timestamp_field": item.timestamp_field, "categorical_fields": list(item.categorical_fields), "numeric_fields": list(item.numeric_fields), "detectors": item.detectors, "field_weights": item.field_weights} for item in stream_profiles.values()],
|
||||
@@ -253,6 +265,7 @@ def build_status(
|
||||
},
|
||||
"event_context": build_event_context(events),
|
||||
"field_deviations": field_deviations,
|
||||
"triage_queue": triage_queue,
|
||||
"sequence_findings": sequence_findings,
|
||||
"feedback": feedback,
|
||||
"cross_source_correlations": correlations,
|
||||
|
||||
Reference in New Issue
Block a user