Exemplo n.º 1
0
        private Dictionary <int, AbTestPersistentData> GetCachedTests()
        {
            var onScreenContext    = _onScreenContextProvider.GetContext();
            var isStage            = onScreenContext?.AbtestsIsStageOverrided ?? _abTestingQpSettings.IsStage; //isStage может быть переопределен для Onscreen
            var getOnlyActiveTests = onScreenContext == null || !onScreenContext.Enabled;                      //в режиме Onscreen нам нужны не только активные сейчас тесты
            var cacheTags          = new string[1] {
                _qpContentCacheTagNamingProvider.GetByNetName(_abTestRepository.AbTestNetName, _abTestingQpSettings.SiteId, isStage)
            }
            .Where(t => t != null)
            .ToArray();

            return(_cacheProvider.GetOrAdd($"AbTestService.GetCachedTests_{_abTestingQpSettings.SiteId}_{isStage}_{getOnlyActiveTests}",
                                           cacheTags,
                                           _abTestingCacheSettings.TestsCachePeriod,
                                           () => getOnlyActiveTests ?
                                           _abTestRepository.GetActiveTests(_abTestingQpSettings.SiteId, isStage).ToDictionary(_ => _.Id) :
                                           _abTestRepository.GetAllTests(_abTestingQpSettings.SiteId, isStage).ToDictionary(_ => _.Id)));
        }
        private Dictionary <string, ItemDefinition> GetCached()
        {
            var cacheTags = new string[1] {
                _qpContentCacheTagNamingProvider.GetByNetName(KnownNetNames.ItemDefinition, _buildSettings.SiteId, _buildSettings.IsStage)
            }
            .Where(t => t != null)
            .ToArray();

            return(_cacheProvider.GetOrAdd("NameConventionalItemDefinitionProvider.BuildItemDefinitions",
                                           cacheTags,
                                           _cacheSettings.ItemDefinitionCachePeriod,
                                           BuildItemDefinitions));
        }
        public ApiResult ContainersByAbTests(int siteId, bool isStage, int[] cids)
        {
            try
            {
                var cacheTag = new string[1] {
                    _qpContentCacheTagNamingProvider.GetByNetName(_abTestRepository.AbTestNetName, siteId, isStage)
                };
                var tests = _cacheProvider.GetOrAdd($"AllTests_{siteId}_{isStage}", cacheTag, TimeSpan.FromSeconds(30), () =>
                {
                    return(_abTestRepository.GetAllTests(siteId, isStage));;
                });

                var containersCacheTags = new string[4] {
                    _abTestRepository.AbTestNetName,
                    _abTestRepository.AbTestContainerNetName,
                    _abTestRepository.AbTestScriptNetName,
                    _abTestRepository.AbTestRedirectNetName
                }.Select(c => _qpContentCacheTagNamingProvider.GetByNetName(c, siteId, isStage))
                .Where(t => t != null)
                .ToArray();
                var containers = _cacheProvider.GetOrAdd($"AllTestContainers_{siteId}_{isStage}", containersCacheTags, TimeSpan.FromSeconds(30), () =>
                {
                    return(_abTestRepository.GetAllTestsContainers(siteId, isStage));
                });

                var result = containers
                             .Where(c => cids.Contains(c.Id))
                             .GroupBy(c => c.TestId)
                             .Select(g => new AbTestInfo(tests.FirstOrDefault(t => t.Id == g.Key), g))
                             .Where(t => t.Id > 0)
                             .ToList();

                return(ApiResult.Success <IEnumerable <AbTestInfo> >(result));
            }
            catch (Exception ex)
            {
                return(ApiResult.Error(Response, ex.Message));
            }
        }
        private Dictionary <string, ItemDefinitionPersistentData> GetCachedItemDefinitions()
        {
            var cacheTags = new string[1] {
                _qpContentCacheTagNamingProvider.GetByNetName(KnownNetNames.ItemDefinition, _buildSettings.SiteId, _buildSettings.IsStage)
            }
            .Where(t => t != null)
            .ToArray();

            return(_cacheProvider.GetOrAdd("UniversalAbstractItemFactory.GetCachedItemDefinitions",
                                           cacheTags,
                                           _cacheSettings.ItemDefinitionCachePeriod,
                                           () => _repository.GetAllItemDefinitions(_buildSettings.SiteId, _buildSettings.IsStage).ToDictionary(def => def.Discriminator)));
        }
        public AbstractItemStorage Get()
        {
            if (_cacheSettings.SiteStructureCachePeriod <= TimeSpan.Zero)
            {
                return(BuildStorage());
            }

            var cacheKey  = "QpAbstractItemStorageProvider.Get";
            var cacheTags = _builder.UsedContentNetNames.Select(c => _qpContentCacheTagNamingProvider.GetByNetName(c, _buildSettings.SiteId, _buildSettings.IsStage))
                            .Where(t => t != null)
                            .ToArray();

            return(_cacheProvider.GetOrAdd(cacheKey, cacheTags, _cacheSettings.SiteStructureCachePeriod, BuildStorage, _buildSettings.CacheFetchTimeoutAbstractItemStorage));
        }