public async Task Run() { _logger.Info($"Starting Indexer Service Run"); _runtimer.Start(); try { var subSites = GetSubsites(); foreach (var subSite in subSites) { var siteUri = new Uri(subSite.Value); var siteManifest = _manifests.FirstOrDefault(x => x.Resources.Any(y => y.ServiceIdentity == subSite.Key)); _queryTimer.Stop(); if (string.IsNullOrWhiteSpace(subSite.Value)) { _logger.Info($"Site Manifest: at Uri: {siteUri} not found or has no BaseUrl configured"); continue; } _logger.Info( $"Site Manifest: Uri: {subSite.Value ?? "Missing Url"} # Challenges: {siteManifest.Challenges?.Count() ?? 0} # Resources: {siteManifest.Resources?.Count() ?? 0}"); var resourcesToIndex = siteManifest.Resources?.Where(x => !string.IsNullOrWhiteSpace(x.SearchItemsUrl) && !string.IsNullOrWhiteSpace(subSite.Value) && x.SearchCategory != SearchCategory.None).ToList(); if (resourcesToIndex == null) { continue; } foreach (var resource in resourcesToIndex) { _logger.Info($"Processing Resource: Key: {resource.ResourceKey} Title: {resource.ResourceTitle} SearchUri: {resource.SearchItemsUrl ?? "not set"}"); var baseUri = new Uri(subSite.Value); await _indexResourceProcessor.ProcessResource(baseUri, resource); } } } catch (Exception ex) { _logger.Error(ex, "Exception while running indexer"); } finally { _runtimer.Stop(); _logger.Info($"Ending Indexer Service Run Elapsed Time {_runtimer.Elapsed}"); } }