Example #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;
                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);
        }
Example #2
0
        public Result <DynamicStampProperties> TryGetProperties(StampId stampId)
        {
            if (_properties.TryGetValue(stampId, out var properties))
            {
                return(properties);
            }

            return(new Result <DynamicStampProperties>(errorMessage: $"Unknown stamp {stampId}"));
        }