private static void ApplyInactivityHeuristics(ActivityStreamStatistic statistic, TimeSpan shortInactivityLimit, TimeSpan longInactivityThreshold, TimeSpan inactivityDuration, Activity previousActivity, Activity followingActivity) { if (WasShortInactivity(inactivityDuration, shortInactivityLimit)) { Add(statistic, Activity.Inactive, -inactivityDuration); statistic.NumberOfInactivityPeriods--; Add(statistic, previousActivity, inactivityDuration); } else if (WasLongInactivity(followingActivity, inactivityDuration, longInactivityThreshold)) { Add(statistic, Activity.Inactive, -inactivityDuration); statistic.NumberOfInactivityPeriods--; Add(statistic, Activity.InactiveLong, inactivityDuration); statistic.NumberOfLongInactivityPeriods++; } }
public ActivityStreamStatistic Evaluate(TimeSpan shortInactivityLimit, TimeSpan longInactivityThreshold) { var statistic = new ActivityStreamStatistic(); var inactivityDuration = TimeSpan.Zero; var previousActivity = Activity.Other; foreach (var activity in _activities) { if (activity == Activity.Inactive) { if (inactivityDuration == TimeSpan.Zero) { statistic.NumberOfInactivityPeriods++; } inactivityDuration += _windowSpan; } else { ApplyInactivityHeuristics( statistic, shortInactivityLimit, longInactivityThreshold, inactivityDuration, previousActivity, activity); inactivityDuration = TimeSpan.Zero; previousActivity = activity; } if (IsLeaveOrEnter(activity)) { Add(statistic, Activity.Away, _windowSpan); } else { Add(statistic, activity, _windowSpan); } } return(statistic); }