/// <summary> /// Evaluates the pending changes for policy violations /// </summary> /// <returns></returns> public override PolicyFailure[] Evaluate() { try { TellMe.Instance.TrackEvent("BranchPolicyEvaluate"); List<PolicyFailure> policyFailures = new List<PolicyFailure>(); Stopwatch partialTimer = new Stopwatch(); Stopwatch wholeProcessTimer = new Stopwatch(); wholeProcessTimer.Start(); BranchPatternEvaluator ev = new BranchPatternEvaluator(); // process each file in the set of pending changes if (_pendingCheckin != null) { partialTimer.Start(); List<String> serverItems = (from x in PendingCheckin.PendingChanges.CheckedPendingChanges select x.ServerItem).ToList(); TellMe.Instance.TrackMetric("PendingCheckinRetrieve", partialTimer.ElapsedMilliseconds); TellMe.Instance.TrackMetric("PendingCheckinCount", serverItems.Count); List<BranchPattern> matchingBranchPatterns = ev.EvaluateServerPaths(serverItems, branchPatterns); TellMe.Instance.TrackMetric("BranchPolicyDetectedCount", matchingBranchPatterns.Count); List<BranchPolicyFailure> branchPolicyFailures = new List<BranchPolicyFailure>(); foreach (BranchPattern bp in matchingBranchPatterns) { branchPolicyFailures.AddRange( bp.EvaluatePendingCheckin(_pendingCheckin )); } policyFailures = (from bpf in branchPolicyFailures select new PolicyFailure(bpf.Message, this)).ToList(); } TellMe.Instance.TrackMetric("BranchPolicyEvaluateTimespan", wholeProcessTimer.ElapsedMilliseconds); return policyFailures.ToArray(); } catch (Exception ex) { TellMe.Instance.TrackException(ex); throw ex; } return new PolicyFailure[] { new PolicyFailure(string.Format("There was an error evaluating the policy. Pass the session ID {0} to your administrator.", TellMe.Instance.Context.Session.Id), this) }; }
public void Init() { evaluator = new BranchPatternEvaluator(); }