Ejemplo n.º 1
0
        public async Task <Product> Subcases(string product)
        {
            logger_.LogInformation("Loading subcases for {product}...", product);
            var reportLink = dataProdiver_.GetReportLink(product);

            try
            {
                var result = await dataProdiver_.GetSubcasesAsync(product);

                var subcases = result.ToArray();

                logger_.LogInformation("Loaded {0} subcases", subcases.Length);
                return(new Product()
                {
                    Name = product,
                    Subcases = subcases.ToArray(),
                    ReportLink = reportLink
                });
            }
            catch (Exception error)
            {
                logger_.LogError(error, $"Error loading subcases for {product}");
                return(new Product()
                {
                    Name = product,
                    Error = error.Message,
                    Subcases = new Subcase[] {},
                    ReportLink = reportLink
                });
            }
        }
        public async Task <IEnumerable <Subcase> > GetSubcasesAsync(string product)
        {
            var            now            = DateTime.Now;
            CachedSubcases cachedSubcases = null;

            if (_cache.TryGetValue(product, out cachedSubcases))
            {
                _logger.LogDebug("Cached subcases found for {product}", product);
                if (now - cachedSubcases.RequestTime < _refreshTimeout)
                {
                    _logger.LogDebug("Return cached subcases for {product}", product);
                    return(cachedSubcases.Subcases);
                }

                _logger.LogDebug("Cache expired for {product}", product);
            }

            _logger.LogDebug("Updating cache for {product}...", product);
            var subcases = await _dataProdiver.GetSubcasesAsync(product);

            _logger.LogDebug("Cache updated for {product}", product);
            _cache[product] = new CachedSubcases(subcases);

            return(subcases);
        }
Ejemplo n.º 3
0
        public async Task UpdateAsync()
        {
            var productNames = _dataProdiver.GetProducts();

            foreach (var productName in productNames)
            {
                try
                {
                    _logger.LogInformation($"Getting subcases for {productName}...");
                    var subcases = (await _dataProdiver.GetSubcasesAsync(productName)).ToArray();

                    _logger.LogInformation($"{subcases.Count()} subcases for {productName}...");
                    var product = new Product
                    {
                        Id         = GetHash(productName),
                        Name       = productName,
                        ReportLink = _dataProdiver.GetReportLink(productName),
                        Subcases   = subcases.ToArray()
                    };
                    await RegisterProductAsync(product);

                    _logger.LogInformation($"Update complete for {productName}");
                }
                catch (Exception error)
                {
                    _logger.LogError(error, $"Error on updating subcases for {productName}");
                }
            }
        }