private async Task <List <Opportunity> > GetRandomRecentOpportunities(
            int takeFromTopCount,
            int numberOfOpportunitiesToInclude)
        {
            var opportunities = await MemoryCacheImpl.GetOpportunitiesAcceptingApplications(_memory, _context);

            opportunities.Sort();
            opportunities.Reverse();

            if (opportunities.Count > takeFromTopCount)
            {
                opportunities = opportunities.Take(takeFromTopCount).ToList();
            }

            var filteredOpportunities = opportunities;

            if (filteredOpportunities.Count > numberOfOpportunitiesToInclude)
            {
                filteredOpportunities = new List <Opportunity>();
                var    filteredOpportunityIds = new List <int>();
                Random random = new Random();
                while (filteredOpportunities.Count < numberOfOpportunitiesToInclude)
                {
                    var opportunity = opportunities[random.Next(opportunities.Count)];
                    if (!filteredOpportunityIds.Contains(opportunity.Id))
                    {
                        filteredOpportunities.Add(opportunity);
                        filteredOpportunityIds.Add(opportunity.Id);
                    }
                }
            }

            return(filteredOpportunities);
        }
        public async Task <IActionResult> SendAsync(SendViewModel model)
        {
            if (model.OpportunityIds == null || model.OpportunityIds.Count == 0)
            {
                TempData["Messages"] = "No opportunities selected, no newsletters delivered.";
                return(RedirectToAction(nameof(Index)));
            }

            var opportunities = await MemoryCacheImpl.GetOpportunitiesAcceptingApplications(_memory, _context);

            var html = GenerateSendGridHtmlFromOpportunities(
                opportunities
                .Where(x => model.OpportunityIds.Contains(x.Id))
                .ToList());

            var response = await _sendgridClient.SendNewsletterAsync(html);

            var res = await response.Body.ReadAsStringAsync();

            if (response.StatusCode.Equals(HttpStatusCode.Accepted) ||
                response.StatusCode.Equals(HttpStatusCode.OK))
            {
                TempData["Messages"] = "Newsletter successfully sent";
            }

            return(RedirectToAction(nameof(Index)));
        }
        public void MemoryTest(int iterations)
        {
            // Given

            const string cacheName = nameof(MemoryCacheImplMemoryTest);

            var memoryCache = new MemoryCacheImpl(cacheName);

            const string key = "GetMemoryTest_Key";

            double startSize = GC.GetTotalMemory(true);

            // When

            var cache = memoryCache;

            for (var i = 0; i < iterations; ++i)
            {
                var value = Guid.NewGuid().ToString("N");
                cache.Set(key, value);
                cache.Get(key);
            }

            cache.Dispose();

            double stopSize = GC.GetTotalMemory(true);

            var memoryLeak = (stopSize - startSize);

            // Then
            Console.WriteLine(@"Iteration count: {0}", iterations);
            Console.WriteLine(@"Memory Leak : {0:N2} %", memoryLeak / startSize);
            Console.WriteLine(@"Memory Leak : {0:N2} Kb", memoryLeak / 1024);
        }
 public void SetUp()
 {
     var connectionString = ConfigurationManager.AppSettings["RedisConnectionString"];
     _cacheLayer1 = new MemoryCacheImpl("TwoLayerCacheRealMemoryTest");
     _cacheLayer2 = new RedisCacheImpl("TwoLayerCacheRealMemoryTest", connectionString);
     _messageBus = new RedisMessageBus(connectionString);
     _testCache = new TwoLayerCacheImpl(_cacheLayer1, _cacheLayer2, _messageBus);
 }
 public PerfomanceTwoLayerRealCacheTest()
 {
     var connectionString = ConfigurationManager.AppSettings["RedisConnectionString"];
     MemoryCacheImpl cacheLayer1 = new MemoryCacheImpl("PerfomanceTwoLayerRealCacheTest");
     RedisCacheImpl cacheLayer2 = new RedisCacheImpl("PerfomanceTwoLayerRealCacheTest", connectionString);
     RedisMessageBus messageBus = new RedisMessageBus(connectionString);
     _testCache = new TwoLayerCacheImpl(cacheLayer1, cacheLayer2, messageBus);
 }
        public void TearDown()
        {
            _testCache.Dispose();
            _messageBus.Dispose();
            _cacheLayer1.Dispose();
            _cacheLayer2.Dispose();

            _testCache = null;
            _messageBus = null;
            _cacheLayer1 = null;
            _cacheLayer2 = null;
        }
Example #7
0
        public async Task <IActionResult> IndexAsync(int id)
        {
            List <Opportunity> opportunities = await MemoryCacheImpl.GetOpportunitiesAcceptingApplications(_memoryCache, _context);

            OpportunityViewModel opportunityView = opportunities
                                                   .Where(x => x.Id == id)
                                                   .Select(OpportunityViewModel.FromOpportunity)
                                                   .SingleOrDefault();

            if (opportunityView == null)
            {
                return(View(new OpportunityViewModel()));
            }
            return(View(opportunityView));
        }
Example #8
0
        public void MemoryTest(int iterations)
        {
            // Given

            var cacheName = GetType().Name;

            var settings = new RedisConnectionSettings
            {
                Host     = "localhost",
                Password = "******"
            };

            var log            = new Mock <ILog>().Object;
            var performanceLog = new Mock <IPerformanceLog>().Object;

            var memoryCache              = new MemoryCacheImpl(cacheName);
            var redisCache               = new RedisCacheImpl(cacheName, new RedisConnectionFactory(settings), log, performanceLog);
            var redisMessageBusManager   = new RedisMessageBusManager(cacheName, new RedisConnectionFactory(settings), log, performanceLog);
            var redisMessageBusPublisher = new RedisMessageBusPublisher(cacheName, new RedisConnectionFactory(settings), log, performanceLog);
            var redisMessageBus          = new MessageBusImpl(redisMessageBusManager, redisMessageBusPublisher);
            var twoLayerCache            = new TwoLayerCacheImpl(memoryCache, redisCache, redisMessageBus);

            const string key = "GetMemoryTest_Key";

            double startSize = GC.GetTotalMemory(true);

            // When

            var cache = twoLayerCache;

            for (var i = 0; i < iterations; ++i)
            {
                var value = Guid.NewGuid().ToString("N");
                cache.Set(key, value);
                cache.Get(key);
            }

            cache.Dispose();

            double stopSize = GC.GetTotalMemory(true);

            var memoryLeak = (stopSize - startSize);

            // Then
            Console.WriteLine(@"Iteration count: {0}", iterations);
            Console.WriteLine(@"Memory Leak : {0:N2} %", memoryLeak / startSize);
            Console.WriteLine(@"Memory Leak : {0:N2} Kb", memoryLeak / 1024);
        }
Example #9
0
        public async Task <IActionResult> Search([FromBody] OpportunitySearch opportunitySearch)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            List <Opportunity> opportunities = await MemoryCacheImpl.GetOpportunitiesAcceptingApplications(_memoryCache, _context);

            List <OpportunityViewModel> opportunityViews = opportunities
                                                           .Where(GetEligibleOpportunityPredicate(opportunitySearch))
                                                           .Select(OpportunityViewModel.FromOpportunity)
                                                           .OrderByDescending(x => x.Id)
                                                           .ToList();

            return(Ok(opportunityViews));
        }
        public void SetUp()
        {
            var cacheName = GetType().Name;

            var settings = new RedisConnectionSettings
            {
                Host     = "localhost",
                Password = "******"
            };

            var log            = new Mock <ILog>().Object;
            var performanceLog = new Mock <IPerformanceLog>().Object;

            var memoryCache              = new MemoryCacheImpl(cacheName);
            var redisCache               = new RedisCacheImpl(cacheName, new RedisConnectionFactory(settings), log, performanceLog);
            var redisMessageBusManager   = new RedisMessageBusManager(cacheName, new RedisConnectionFactory(settings), log, performanceLog);
            var redisMessageBusPublisher = new RedisMessageBusPublisher(cacheName, new RedisConnectionFactory(settings), log, performanceLog);
            var redisMessageBus          = new MessageBusImpl(redisMessageBusManager, redisMessageBusPublisher);
            var twoLayerCache            = new TwoLayerCacheImpl(memoryCache, redisCache, redisMessageBus);

            _cache = twoLayerCache;
        }
 public void SetUp()
 {
     _cache = new MemoryCacheImpl(typeof(MemoryCacheImplTest).Name);
 }
Example #12
0
 public void SetUp()
 {
     _cache = new MemoryCacheImpl("TestMemory");
 }
 public void SetUp()
 {
     _cache = new MemoryCacheImpl(nameof(MemoryCacheImplPerformanceTest));
 }
 public void TearDown()
 {
     _testCache.Dispose();
     _testCache = null;
 }
 public void SetUp()
 {
     _testCache = new MemoryCacheImpl("MemoryLayerCacheTest");
 }
 public PerfomanceMemoryLayerCacheTest()
 {
     _testCache = new MemoryCacheImpl("PerfomanceRedisLayerCacheTest");
 }