Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void CalculateExtendedDiskUsage(IEnumerable<Configuration> allConfigurations)
- {
- var sw = new Stopwatch();
- sw.Start();
- // Lets take only confs that have been updated within last 7 days
- var items = allConfigurations.AsParallel().Where(x =>
- x.artifact_cleanup_type != null && x.build_cleanup_type != null &&
- x.updated_date > DateTime.UtcNow.AddDays(-7)
- ).ToList();
- using (var ctx = new LocalEntities())
- {
- Debug.WriteLine("Context: " + sw.Elapsed);
- var allBuilds = ctx.Builds;
- var ruleResult = new List<Notification>();
- foreach (var configuration in items)
- {
- // all builds for current configuration
- var configurationBuilds = allBuilds.Where(x => x.configuration_id == configuration.configuration_id)
- .OrderByDescending(z => z.build_date);
- Debug.WriteLine("Filter conf builds: " + sw.Elapsed);
- // Since I don't know which builds/artifacts have been cleaned up, calculate it manually
- if (configuration.build_cleanup_count != null)
- {
- var buildCleanupCount = "30"; // default
- if (configuration.build_cleanup_type.Equals("ReserveBuildsByDays"))
- {
- var buildLastCleanupDate = DateTime.UtcNow.AddDays(-int.Parse(buildCleanupCount));
- configurationBuilds = configurationBuilds.Where(x => x.build_date > buildLastCleanupDate)
- .OrderByDescending(z => z.build_date);
- }
- if (configuration.build_cleanup_type.Equals("ReserveBuildsByCount"))
- {
- var buildLastCleanupCount = int.Parse(buildCleanupCount);
- configurationBuilds =
- configurationBuilds.Take(buildLastCleanupCount).OrderByDescending(z => z.build_date);
- }
- }
- if (configuration.artifact_cleanup_count != null)
- {
- // skipped, similar to previous block
- }
- Debug.WriteLine("Done cleanup: " + sw.Elapsed);
- const int maxDiscAllocationPerConfiguration = 1000000000; // 1GB
- // Sum all disc usage per configuration
- var confDiscSizePerConfiguration = configurationBuilds
- .GroupBy(c => new {c.configuration_id})
- .Where(c => (c.Sum(z => z.artifact_dir_size) > maxDiscAllocationPerConfiguration))
- .Select(groupedBuilds =>
- new
- {
- configurationId = groupedBuilds.FirstOrDefault().configuration_id,
- configurationPath = groupedBuilds.FirstOrDefault().configuration_path,
- Total = groupedBuilds.Sum(c => c.artifact_dir_size),
- Average = groupedBuilds.Average(c => c.artifact_dir_size)
- }).ToList();
- Debug.WriteLine("Done db query: " + sw.Elapsed);
- ruleResult.AddRange(confDiscSizePerConfiguration.Select(iter => new Notification
- {
- ConfigurationId = iter.configurationId,
- CreatedDate = DateTime.UtcNow,
- RuleType = (int) RulesEnum.TooMuchDisc,
- ConfigrationPath = iter.configurationPath
- }));
- Debug.WriteLine("Finished loop: " + sw.Elapsed);
- }
- // find owners and insert...
- }
- }
- Context: 00:00:00.0609067
- // first round
- Filter conf builds: 00:00:00.0636291
- Done cleanup: 00:00:00.0644505
- Done db query: 00:00:00.3050122
- Finished loop: 00:00:00.3062711
- // avg round
- Filter conf builds: 00:00:00.0001707
- Done cleanup: 00:00:00.0006343
- Done db query: 00:00:00.0760567
- Finished loop: 00:00:00.0773370
- foreach (var configuration in items)
- {
- var confDiscSizePerConfiguration = await GetData(configuration, allBuilds);
- ruleResult.AddRange(confDiscSizePerConfiguration.Select(iter => new Notification
- {
- ... skiped
- }
- private async Task<List<Blabla>> GetData(Configuration configuration, IQueryable<Build> allBuilds)
- {
- var configurationBuilds = allBuilds.Where(x => x.configuration_id == configuration.configuration_id)
- .OrderByDescending(z => z.build_date);
- //..skipped
- var confDiscSizePerConfiguration = configurationBuilds
- .GroupBy(c => new {c.configuration_id})
- .Where(c => (c.Sum(z => z.artifact_dir_size) > maxDiscAllocationPerConfiguration))
- .Select(groupedBuilds =>
- new Tmp
- {
- ConfigurationId = groupedBuilds.FirstOrDefault().configuration_id,
- ConfigurationPath = groupedBuilds.FirstOrDefault().configuration_path,
- Total = groupedBuilds.Sum(c => c.artifact_dir_size),
- Average = groupedBuilds.Average(c => c.artifact_dir_size)
- }).ToListAsync();
- return await confDiscSizePerConfiguration;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement