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; _logger.Info("Loading monitor stamps for environment `{0}`", envName); var results = await _cslQueryProvider.QuerySingleResultSetAsync <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); }
private async Task <IReadOnlyDictionary <Entry, Properties> > LoadWatchlistAsync() { var query = @"CacheMonitorWatchlist"; var watchlist = new Dictionary <Entry, Properties>(); foreach (var environment in new[] { Env.CI, Env.Test, Env.Production }) { _logger.Info("Loading monitor stamps for environment `{0}`", environment); var results = await _cslQueryProvider.QuerySingleResultSetAsync <LoadResult>(query, Monitor.EnvironmentToKustoDatabaseName[environment]); foreach (var result in results) { Contract.AssertNotNullOrEmpty(result.Stamp); Contract.AssertNotNullOrEmpty(result.Ring); Contract.AssertNotNullOrEmpty(result.CacheTableName); var entry = new Entry() { Environment = environment, Stamp = result.Stamp, }; watchlist[entry] = new Properties() { Ring = result.Ring, CacheTableName = result.CacheTableName, }; _logger.Info("Monitoring stamp `{0}` on ring `{1}` from table `{2}` in environment `{3}`", result.Stamp, result.Ring, result.CacheTableName, environment); } } return(watchlist); }
public async Task <IReadOnlyList <T> > QueryAsync <T>(string query, string database, ClientRequestProperties?requestProperties = null) { return((await _client.QuerySingleResultSetAsync <T>(query, database, requestProperties)).ToList()); }