Advertisement
Guest User

Untitled

a guest
Jul 29th, 2015
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. private void CalculateExtendedDiskUsage(IEnumerable<Configuration> allConfigurations)
  2. {
  3. var sw = new Stopwatch();
  4. sw.Start();
  5. // Lets take only confs that have been updated within last 7 days
  6. var items = allConfigurations.AsParallel().Where(x =>
  7. x.artifact_cleanup_type != null && x.build_cleanup_type != null &&
  8. x.updated_date > DateTime.UtcNow.AddDays(-7)
  9. ).ToList();
  10.  
  11. using (var ctx = new LocalEntities())
  12. {
  13. Debug.WriteLine("Context: " + sw.Elapsed);
  14. var allBuilds = ctx.Builds;
  15. var ruleResult = new List<Notification>();
  16. foreach (var configuration in items)
  17. {
  18. // all builds for current configuration
  19. var configurationBuilds = allBuilds.Where(x => x.configuration_id == configuration.configuration_id)
  20. .OrderByDescending(z => z.build_date);
  21. Debug.WriteLine("Filter conf builds: " + sw.Elapsed);
  22.  
  23. // Since I don't know which builds/artifacts have been cleaned up, calculate it manually
  24. if (configuration.build_cleanup_count != null)
  25. {
  26. var buildCleanupCount = "30"; // default
  27. if (configuration.build_cleanup_type.Equals("ReserveBuildsByDays"))
  28. {
  29. var buildLastCleanupDate = DateTime.UtcNow.AddDays(-int.Parse(buildCleanupCount));
  30. configurationBuilds = configurationBuilds.Where(x => x.build_date > buildLastCleanupDate)
  31. .OrderByDescending(z => z.build_date);
  32. }
  33. if (configuration.build_cleanup_type.Equals("ReserveBuildsByCount"))
  34. {
  35. var buildLastCleanupCount = int.Parse(buildCleanupCount);
  36. configurationBuilds =
  37. configurationBuilds.Take(buildLastCleanupCount).OrderByDescending(z => z.build_date);
  38. }
  39. }
  40.  
  41. if (configuration.artifact_cleanup_count != null)
  42. {
  43. // skipped, similar to previous block
  44. }
  45.  
  46. Debug.WriteLine("Done cleanup: " + sw.Elapsed);
  47. const int maxDiscAllocationPerConfiguration = 1000000000; // 1GB
  48. // Sum all disc usage per configuration
  49. var confDiscSizePerConfiguration = configurationBuilds
  50. .GroupBy(c => new {c.configuration_id})
  51. .Where(c => (c.Sum(z => z.artifact_dir_size) > maxDiscAllocationPerConfiguration))
  52. .Select(groupedBuilds =>
  53. new
  54. {
  55. configurationId = groupedBuilds.FirstOrDefault().configuration_id,
  56. configurationPath = groupedBuilds.FirstOrDefault().configuration_path,
  57. Total = groupedBuilds.Sum(c => c.artifact_dir_size),
  58. Average = groupedBuilds.Average(c => c.artifact_dir_size)
  59. }).ToList();
  60. Debug.WriteLine("Done db query: " + sw.Elapsed);
  61.  
  62. ruleResult.AddRange(confDiscSizePerConfiguration.Select(iter => new Notification
  63. {
  64. ConfigurationId = iter.configurationId,
  65. CreatedDate = DateTime.UtcNow,
  66. RuleType = (int) RulesEnum.TooMuchDisc,
  67. ConfigrationPath = iter.configurationPath
  68. }));
  69. Debug.WriteLine("Finished loop: " + sw.Elapsed);
  70. }
  71. // find owners and insert...
  72. }
  73. }
  74.  
  75. Context: 00:00:00.0609067
  76. // first round
  77. Filter conf builds: 00:00:00.0636291
  78. Done cleanup: 00:00:00.0644505
  79. Done db query: 00:00:00.3050122
  80. Finished loop: 00:00:00.3062711
  81. // avg round
  82. Filter conf builds: 00:00:00.0001707
  83. Done cleanup: 00:00:00.0006343
  84. Done db query: 00:00:00.0760567
  85. Finished loop: 00:00:00.0773370
  86.  
  87. foreach (var configuration in items)
  88. {
  89.  
  90. var confDiscSizePerConfiguration = await GetData(configuration, allBuilds);
  91.  
  92. ruleResult.AddRange(confDiscSizePerConfiguration.Select(iter => new Notification
  93. {
  94. ... skiped
  95. }
  96.  
  97. private async Task<List<Blabla>> GetData(Configuration configuration, IQueryable<Build> allBuilds)
  98. {
  99. var configurationBuilds = allBuilds.Where(x => x.configuration_id == configuration.configuration_id)
  100. .OrderByDescending(z => z.build_date);
  101. //..skipped
  102. var confDiscSizePerConfiguration = configurationBuilds
  103. .GroupBy(c => new {c.configuration_id})
  104. .Where(c => (c.Sum(z => z.artifact_dir_size) > maxDiscAllocationPerConfiguration))
  105. .Select(groupedBuilds =>
  106. new Tmp
  107. {
  108. ConfigurationId = groupedBuilds.FirstOrDefault().configuration_id,
  109. ConfigurationPath = groupedBuilds.FirstOrDefault().configuration_path,
  110. Total = groupedBuilds.Sum(c => c.artifact_dir_size),
  111. Average = groupedBuilds.Average(c => c.artifact_dir_size)
  112. }).ToListAsync();
  113. return await confDiscSizePerConfiguration;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement