tabbed frametype filtering
This commit is contained in:
@@ -27,6 +27,13 @@ class StatisticsEngine:
|
||||
for flow in flows.values():
|
||||
self._calculate_single_flow_statistics(flow)
|
||||
|
||||
def calculate_all_statistics(self, analyzer=None) -> None:
|
||||
"""Calculate statistics for all flows (called by background analyzer)"""
|
||||
# This is called by the background analyzer
|
||||
# The analyzer parameter should be passed in
|
||||
if analyzer and hasattr(analyzer, 'flows'):
|
||||
self.calculate_flow_statistics(analyzer.flows)
|
||||
|
||||
def _calculate_single_flow_statistics(self, flow: FlowStats) -> None:
|
||||
"""Calculate statistics for a single flow"""
|
||||
# Ensure timeline statistics are calculated
|
||||
@@ -77,11 +84,18 @@ class StatisticsEngine:
|
||||
# Detect outliers for this frame type
|
||||
ft_threshold = ft_stats.avg_inter_arrival + (self.outlier_threshold_sigma * ft_stats.std_inter_arrival)
|
||||
|
||||
# Clear existing outliers to recalculate
|
||||
ft_stats.outlier_frames.clear()
|
||||
ft_stats.outlier_details.clear()
|
||||
ft_stats.enhanced_outlier_details.clear()
|
||||
|
||||
for i, inter_time in enumerate(ft_stats.inter_arrival_times):
|
||||
if inter_time > ft_threshold:
|
||||
frame_number = ft_stats.frame_numbers[i + 1]
|
||||
frame_number = ft_stats.frame_numbers[i + 1] # Current frame
|
||||
prev_frame_number = ft_stats.frame_numbers[i] # Previous frame
|
||||
ft_stats.outlier_frames.append(frame_number)
|
||||
ft_stats.outlier_details.append((frame_number, inter_time))
|
||||
ft_stats.outlier_details.append((frame_number, inter_time)) # Legacy format
|
||||
ft_stats.enhanced_outlier_details.append((frame_number, prev_frame_number, inter_time)) # Enhanced format
|
||||
|
||||
def get_flow_summary_statistics(self, flows: Dict[tuple, FlowStats]) -> Dict[str, float]:
|
||||
"""Get summary statistics across all flows"""
|
||||
@@ -232,9 +246,11 @@ class StatisticsEngine:
|
||||
threshold = avg + (self.outlier_threshold_sigma * std)
|
||||
if new_time > threshold:
|
||||
frame_number = ft_stats.frame_numbers[-1]
|
||||
prev_frame_number = ft_stats.frame_numbers[-2] if len(ft_stats.frame_numbers) > 1 else 0
|
||||
if frame_number not in ft_stats.outlier_frames:
|
||||
ft_stats.outlier_frames.append(frame_number)
|
||||
ft_stats.outlier_details.append((frame_number, new_time))
|
||||
ft_stats.outlier_details.append((frame_number, new_time)) # Legacy format
|
||||
ft_stats.enhanced_outlier_details.append((frame_number, prev_frame_number, new_time)) # Enhanced format
|
||||
stats['outlier_count'] += 1
|
||||
|
||||
stats['last_avg'] = avg
|
||||
|
||||
Reference in New Issue
Block a user