Ejemplo n.º 1
0
        internal async Task <DatabaseMeasurementInfo> GetMetaInformationAsync(string db, string measurementName, TimeSpan?expiration)
        {
            var key = new DatabaseMeasurementInfoKey(db, measurementName);
            DatabaseMeasurementInfo info;

            lock (_seriesMetaCache)
            {
                _seriesMetaCache.TryGetValue(key, out info);
            }

            var now = DateTime.UtcNow;

            if (info != null)
            {
                if (!expiration.HasValue) // info never expires
                {
                    return(info);
                }

                if (now - info.Timestamp < expiration.Value) // has not expired
                {
                    return(info);
                }
            }

            // has expired or never existed, lets retrieve it

            // get metadata information from the store
            var tagsResult = await this.ShowTagKeysAsync(db, measurementName).ConfigureAwait(false);

            var tags = tagsResult.Series.FirstOrDefault()?.Rows;

            info = new DatabaseMeasurementInfo(now);
            if (tags != null)
            {
                foreach (var row in tags)
                {
                    info.Tags.Add(row.TagKey);
                }
            }

            lock (_seriesMetaCache)
            {
                _seriesMetaCache[key] = info;
            }

            return(info);
        }
Ejemplo n.º 2
0
        internal async Task <DatabaseMeasurementInfo> GetMetaInformationAsync(string db, string measurementName, bool forceRefresh)
        {
            var key = new DatabaseMeasurementInfoKey(db, measurementName);
            DatabaseMeasurementInfo info;

            if (!forceRefresh)
            {
                lock ( _seriesMetaCache )
                {
                    if (_seriesMetaCache.TryGetValue(key, out info))
                    {
                        return(info);
                    }
                }
            }

            // get metadata information from the store
            var fieldTask = ShowFieldKeysAsync(db, measurementName);
            var tagTask   = ShowTagKeysAsync(db, measurementName);
            await Task.WhenAll(fieldTask, tagTask).ConfigureAwait(false);

            var fields = fieldTask.Result.Series.FirstOrDefault()?.Rows;
            var tags   = tagTask.Result.Series.FirstOrDefault()?.Rows;

            info = new DatabaseMeasurementInfo();
            if (fields != null)
            {
                foreach (var row in fields)
                {
                    info.Fields.Add(row.FieldKey);
                }
            }
            if (tags != null)
            {
                foreach (var row in tags)
                {
                    info.Tags.Add(row.TagKey);
                }
            }

            lock ( _seriesMetaCache )
            {
                _seriesMetaCache[key] = info;
            }

            return(info);
        }