Ejemplo n.º 1
0
 public TimersController(ILogger <TimersController> logger, DbService dbService, RepoInfoCache repoInfo)
 {
     _logger    = logger;
     _dbService = dbService;
     _repoInfo  = repoInfo;
     _indexInfo = dbService.CachedColIndexInfo;
 }
Ejemplo n.º 2
0
 public ConfigurationController(ILogger <ConfigurationController> logger, RepoInfoCache repoInfo, DbService dbService, GitInfoService gitInfo, MongoDBConfig dBConfig)
 {
     _repoInfo  = repoInfo;
     _dbService = dbService;
     _indexInfo = dbService.CachedColIndexInfo;
     _gitInfo   = gitInfo;
     _logger    = logger;
     _dBConfig  = dBConfig;
 }
        public static List <SimpleTimers> Commits(this List <SimpleTimers> lst, RepoInfoCache repoInfo, int index, int size)
        {
            var result = new List <SimpleTimers>();
            var start  = lst.SafeGet(index);
            var cut    = 0;

            if (start == null || size == 0)
            {
                return(result);
            }

            var getter = (Func <ColRepoInfo, List <string> >)null;

            if (size > 0)
            {
                getter = i => i.Children;
            }
            if (size < 0)
            {
                getter = i => i.Parents;
                size   = Math.Abs(size) + 1;
                cut    = 1;
            }

            result.Add(start);
            var currentCommit = start.Commit;
            var opMax         = 5 * size;
            var op            = 0;

            while (result.Count() < size)
            {
                if (++op > opMax)
                {
                    break;
                }

                var timerInfo  = repoInfo[currentCommit];
                var nextCommit = getter(timerInfo).FirstOrDefault();
                if (string.IsNullOrEmpty(nextCommit))
                {
                    // we've reached start or end of the branch
                    break;
                }
                var currentTimer = lst.FirstOrDefault(i => i.Commit == nextCommit);
                if (currentTimer == null)
                {
                    // we skip this and search more
                    currentCommit = nextCommit;
                    continue;
                }
                currentCommit = currentTimer.Commit;
                result.Add(currentTimer);
            }
            return(result.Skip(cut).ToList());
        }
Ejemplo n.º 4
0
 public GitController(RepoInfoCache repoInfo, DbService dbService)
 {
     _repoInfo  = repoInfo;
     _indexInfo = dbService.CachedColIndexInfo;
 }
Ejemplo n.º 5
0
        public static void ComputeWelch(IList <SimpleTimers> result, RepoInfoCache repoInfo)
        {
            var onlyMin   = false;
            var minTimers = onlyMin ? 4 : 30;
            var notBroken = result.Where(i => !i.isBroken).ToList();

            for (var i = 10; i < notBroken.Count() - 10; i++)
            {
                // we run ttest
                var commitPrev = notBroken.Commits(repoInfo, i, -10);
                var commitNext = notBroken.Commits(repoInfo, i, +10);
                var a          = commitPrev.Durations(0, 10); //notBroken.Durations(i + 1, +10);
                var b          = commitNext.Durations(0, 10); //notBroken.Durations(i + 0, -10);
                var welch      = (Welch)null;
                if (a.Length > minTimers && b.Length > minTimers)
                {
                    welch              = Welch.TTest(b, a, 10);
                    notBroken[i].Left  = commitPrev.Select(i => i.Commit).Reverse().ToList();
                    notBroken[i].Right = commitNext.Select(i => i.Commit).ToList();
                    notBroken[i].Welch = welch;
                }
                else
                {
                    continue;
                }


                // in case we detect some change, we'll try to "zoom in"
                if (welch.Significant)
                {
                    for (var j = 9; j > 1; j--)
                    {
                        var aj = commitPrev.Durations(0, j); //notBroken.Durations(i + 0, +j);
                        var bj = commitNext.Durations(0, j); //notBroken.Durations(i - 1, -j);

                        // until we still detect change
                        // and there is atleast 20 samples
                        if (aj.Length > minTimers && bj.Length > minTimers)
                        {
                            var rj = Welch.TTest(bj, aj, j);
                            notBroken[i].Left  = commitPrev.Take(j).Select(i => i.Commit).Reverse().ToList();
                            notBroken[i].Right = commitNext.Take(j).Select(i => i.Commit).ToList();
                            notBroken[i].Welch = rj;
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }

            for (var i = 10; i < notBroken.Count() - 10; i++)
            {
                var cmt  = notBroken[i];
                var test = cmt.Welch;
                if (test?.Significant == true)
                {
                    var type    = cmt.WelchType;
                    var cmtLine = new List <SimpleTimers>();
                    cmtLine.AddRange(notBroken.Commits(repoInfo, i, -10));
                    cmtLine.AddRange(notBroken.Commits(repoInfo, i, +10));
                    var testSeq = cmtLine.FindSequence(
                        i => i.WelchType == type,
                        cmtLine.FindIndex(i => i.Commit == cmt.Commit)
                        );
                    if (testSeq.Count() > 1)
                    {
                        if (testSeq.Any(i => i.Commit == "41e620f7af62f7951d803305cdec15713b4ed2ea"))
                        {
                            Console.WriteLine("cas");
                        }
                        var(minIndex, diff) = testSeq.FindMaxDiff();
                        if (minIndex > 0)
                        {
                            foreach (var r in testSeq.Where((i, j) => j != minIndex))
                            {
                                if (r.WelchType != WelchType.Unknown)
                                {
                                    // r.Welch.Significant = false;
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 6
0
 public CompareCommitController(ILogger <TimersController> logger, DbService dbService, RepoInfoCache repoInfo)
 {
     _logger    = logger;
     _dbService = dbService;
     _repoInfo  = repoInfo;
 }