in Source/Rules/RepeatedCallsRule.cs [25:93]
override public RuleResult Run(IEnumerable<ServiceCallItem> items, ServiceCallStats stats)
{
RuleResult result = InitializeResult(DisplayName, Description);
if (items.Count() == 0)
{
return result;
}
//check invalid log versions
if (items.Count(item => item.m_logVersion == Constants.Version1509) > 0)
{
result.AddViolation(ViolationLevel.Warning, "Data version does not support this rule. You need an updated Xbox Live SDK to support this rule");
return result;
}
StringBuilder description = new StringBuilder();
List<ServiceCallItem> repeats = new List<ServiceCallItem>();
m_totalCallsChecked = items.Count();
foreach (ServiceCallItem thisItem in items.Where(item => item.m_isShoulderTap == false))
{
if (thisItem.m_reqHeader.Contains("SocialManager"))
{
continue;
}
if (repeats.Contains(thisItem))
{
continue;
}
var timeWindow = from item in items.Where(item => item.m_isShoulderTap == false)
where (item.m_reqTimeUTC > thisItem.m_reqTimeUTC && ((item.m_reqTimeUTC - thisItem.m_reqTimeUTC) / TimeSpan.TicksPerMillisecond) < m_minAllowedRepeatIntervalMs)
select item;
List<ServiceCallItem> repeatedCalls = new List<ServiceCallItem>();
repeatedCalls.Add(thisItem);
foreach (var call in timeWindow)
{
if (thisItem.m_reqBodyHash == call.m_reqBodyHash && thisItem.m_uri == call.m_uri)
{
repeatedCalls.Add(call);
}
}
if (repeatedCalls.Count > 1)
{
description.Clear();
description.AppendFormat("Repeated call found {0} other times in calls to endpoint.", repeatedCalls.Count, thisItem.m_id);
result.AddViolation(ViolationLevel.Warning, description.ToString(), repeatedCalls);
repeats.AddRange(repeatedCalls);
}
}
m_numberOfRepeats = repeats.Count;
result.Results.Add("Total Calls", m_totalCallsChecked);
result.Results.Add("Duplicates", m_numberOfRepeats);
result.Results.Add("Percentage", ((double)m_numberOfRepeats) / m_totalCallsChecked);
return result;
}