public LeastFrequentlyUsedJournalEntry(JournalEntry entry, CacheAge age, int hitCount, int newerVersionCount) { Entry = entry; Age = age; HitCount = hitCount; NewerVersionCount = newerVersionCount; }
public void WhenAJournalEntryIsCommittedAndRetrieved_ThenItShouldBeEquivalentToTheOriginal() { var journalPath = Path.Combine(testDir, "PackageRetentionJournal.json"); var thePackage = CreatePackageIdentity("TestPackage", "0.0.1"); var cacheAge = new CacheAge(10); var serverTaskId = new ServerTaskId("TaskID-1"); var journalEntry = new JournalEntry(thePackage, 1); journalEntry.AddLock(serverTaskId, cacheAge); journalEntry.AddUsage(serverTaskId, cacheAge); var writeRepository = new JsonJournalRepository(TestCalamariPhysicalFileSystem.GetPhysicalFileSystem(), new StaticJsonJournalPathProvider(journalPath), Substitute.For <ILog>()); writeRepository.AddJournalEntry(journalEntry); writeRepository.Commit(); var readRepository = new JsonJournalRepository(TestCalamariPhysicalFileSystem.GetPhysicalFileSystem(), new StaticJsonJournalPathProvider(journalPath), Substitute.For <ILog>()); readRepository.Load(); readRepository.TryGetJournalEntry(thePackage, out var retrieved).Should().BeTrue(); retrieved.Package.Should().BeEquivalentTo(journalEntry.Package); retrieved.GetLockDetails().Should().BeEquivalentTo(journalEntry.GetLockDetails()); retrieved.GetUsageDetails().Should().BeEquivalentTo(journalEntry.GetUsageDetails()); }
IEnumerable <LeastFrequentlyUsedJournalEntry> OrderByValue(IList <JournalEntry> journalEntries, CacheAge currentCacheAge) { if (!journalEntries.Any()) { return(new LeastFrequentlyUsedJournalEntry[0]); } var details = CreateLeastFrequentlyUsedJournalEntries(journalEntries).ToList(); var hitCountRange = GetHitCountRange(details); var cacheAgeRange = GetCacheAgeRange(details, currentCacheAge); var newVersionCountRange = GetVersionCountRange(details); decimal CalculateValue(LeastFrequentlyUsedJournalEntry pi) => Normalise(pi.HitCount, hitCountRange) * hitFactor - Normalise(currentCacheAge.Value - pi.Age.Value, cacheAgeRange) * ageFactor - Normalise(pi.NewerVersionCount, newVersionCountRange) * newerVersionFactor; return(details.OrderBy(CalculateValue)); }
public PackageCache(CacheAge cacheAge) { CacheAge = cacheAge; }
public PackageCache(int cacheAge) { CacheAge = new CacheAge(cacheAge); }
public void AddLock(ServerTaskId deploymentTaskId, CacheAge cacheAge) { locks.Add(new UsageDetails(deploymentTaskId, cacheAge)); }
public void AddUsage(ServerTaskId deploymentTaskId, CacheAge cacheAge) { usages.Add(new UsageDetails(deploymentTaskId, cacheAge)); }
public UsageDetails(ServerTaskId deploymentTaskId, CacheAge cacheAgeAtUsage, DateTime dateTime) { CacheAgeAtUsage = cacheAgeAtUsage; DateTime = dateTime; DeploymentTaskId = deploymentTaskId; }
/// <summary> Defaults DateTime to DateTime.Now </summary> public UsageDetails(ServerTaskId deploymentTaskId, CacheAge cacheAge) : this(deploymentTaskId, cacheAge, DateTime.Now) { }