private async Task <IReadOnlyDictionary <StampId, DynamicStampProperties> > LoadWatchlistAsync() { var query = @"CacheMonitorWatchlist"; var watchlist = new Dictionary <StampId, DynamicStampProperties>(); // This runs a set of blocking Kusto queries, which is pretty slow, so it's done concurrently await _environments.ParallelForEachAsync(async (keyValuePair) => { var envName = keyValuePair.Key; var envConf = keyValuePair.Value; var envKusto = _kustoClients[envName]; _logger.Info("Loading monitor stamps for environment `{0}`", envName); var results = await envKusto.QueryAsync <DynamicStampProperties>(query, envConf.KustoDatabaseName); foreach (var result in results) { Contract.AssertNotNullOrEmpty(result.Stamp); Contract.AssertNotNullOrEmpty(result.Ring); Contract.AssertNotNullOrEmpty(result.CacheTableName); var entry = new StampId(envName, result.Stamp); lock (watchlist) { watchlist[entry] = result; } _logger.Debug("Monitoring stamp `{0}` on ring `{1}` from table `{2}` in environment `{3}`", result.Stamp, result.Ring, result.CacheTableName, envName); } }); return(watchlist); }
public Result <DynamicStampProperties> TryGetProperties(StampId stampId) { if (_properties.TryGetValue(stampId, out var properties)) { return(properties); } return(new Result <DynamicStampProperties>(errorMessage: $"Unknown stamp {stampId}")); }