示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 public async Task <IReadOnlyList <T> > QueryAsync <T>(string query, string database, ClientRequestProperties?requestProperties = null)
 {
     return((await _client.QuerySingleResultSetAsync <T>(query, database, requestProperties)).ToList());
 }