コード例 #1
0
        public void RunFor(string description, Func <Func <ProjectInfo, string, bool> > filterFactory, TimeSpan delayBetween = default(TimeSpan), int maxNumberOfDeployments = int.MaxValue)
        {
            var projectInfos = GetProjectInfos();
            var projectEnvsQ = from p in projectInfos
                               from e in p.EnvironmentIds
                               select new
            {
                ProjectInfo   = p,
                EnvironmentId = e,
            };

            var projectEnvs = projectEnvsQ.ToArray();

            for (var cnt = 1; cnt <= maxNumberOfDeployments; cnt++)
            {
                var filter        = filterFactory();
                var filteredItems = projectEnvs.Where(e => filter(e.ProjectInfo, e.EnvironmentId)).ToArray();
                var item          = filteredItems[_rnd.Next(0, filteredItems.Length)];

                if (item.ProjectInfo.LatestRelease == null || ChanceOfANewRelease.Get())
                {
                    CreateRelease(item.ProjectInfo);
                }

                CreateDeployment(item.ProjectInfo, item.EnvironmentId);

                Log.Write(cnt % 10 == 0 ? LogEventLevel.Information : LogEventLevel.Verbose, "{description}: {n} deployments", description, cnt);
                Thread.Sleep(delayBetween);
            }
        }
コード例 #2
0
        public void RunOncePerProjectFor(string description, Func <Func <ProjectInfo, string, bool> > filterFactory,
                                         TimeSpan delayBetween = default(TimeSpan))
        {
            var projectInfos = GetProjectInfos();
            var projectEnvsQ = from p in projectInfos
                               from e in p.EnvironmentIds
                               select new
            {
                ProjectInfo   = p,
                EnvironmentId = e,
            };

            var projectEnvs = projectEnvsQ.ToArray();

            var filter        = filterFactory();
            var filteredItems = projectEnvs.Where(e => filter(e.ProjectInfo, e.EnvironmentId)).ToArray();


            var cnt = 0;

            filteredItems.AsParallel()
            .WithDegreeOfParallelism(10)
            .ForAll(item =>
            {
                if (item.ProjectInfo.LatestRelease == null || ChanceOfANewRelease.Get())
                {
                    CreateRelease(item.ProjectInfo);
                }

                CreateDeployment(item.ProjectInfo, item.EnvironmentId);

                Interlocked.Increment(ref cnt);
                Log.Write(cnt % 10 == 0 ? LogEventLevel.Information : LogEventLevel.Verbose,
                          "{description}: {n} deployments", description, cnt);
                Thread.Sleep(delayBetween);
            });
        }